diff --git a/FEATURES.md b/FEATURES.md index 4ce3c66..552c2dc 100644 --- a/FEATURES.md +++ b/FEATURES.md @@ -639,3 +639,60 @@ passing 문서 정합화와 운영 runbook만 추가한다. contract, API 또는 production 운영 정책은 변경하지 않는다. + +## CMP-004 — Wave-3 Illustrative Element Library + +### Behavior + +- 새로 문서화된 illustrative element 6개를 구현한다: A-06 Affiliate, + A-12 Red Flag Knowledge Bar, E-03 Bad Actor Disqualification, + F-01 Operator Self-Dealing, F-03 Fraud Surveillance, + F-04 Reg M restricted-period buying gate. 각 element는 `docs/elements` + 브랜치에 추가된 new-format `docs/compliance/elements` walkthrough 문서를 + 근거로 구현한다. +- attestation setter는 operator-gated(`Governed`/`onlyOperator`)이며 production + data source는 각 element 헤더의 approval-gated seam으로 남는다. +- fail-closed default를 유지한다. F-01 OperatorSelfDealing은 `registryAvailable` + default가 false여서 operator가 roster를 적재하고 명시적으로 켜기 전까지 모든 + 거래가 fail-closed된다. +- monitoring element(A-12, F-03)는 거래를 막지 않는다. A-12는 pre-trade + STATELESS로 표시만 하고 `check()`는 항상 pass하며, F-03은 STATEFUL post-trade + 로 no-tipping-off party-facing surface(operator-gated view)를 통해 감시만 한다. +- illustrative reference wiring이며 approved production policy가 아니다. + element는 `tools/deploy-wave3/DeployWave3Elements.s.sol`에서 opt-in으로만 + 등록하고 active recipe에 붙이지 않는다. 기본 demo 배포 범위는 변경하지 않는다. +- CLI(`services/cli`)의 reason-decode 테이블이 wave-3 6개 element를 wave-2와 + 동일한 수준(name label + per-element reason-code decode 테이블 + smoke-test + enumeration)으로 커버한다. wave-2와 마찬가지로 `attest` 명령 + (`services/cli/src/elements.ts`의 `ELEMENT_IDS`, 원본 9개)이나 DeployStack에는 + 추가하지 않는다. + +### Verification + +- `forge test --offline`(전체 770/770, pre-task 582 + 신규 188). +- `cd services/cli && npm test`(CLI reason-decode 테이블이 이제 wave-3를 커버). +- per-element unit test: `test/unit/compliance/elements/Affiliate.t.sol`, + `test/unit/compliance/elements/RedFlagKnowledgeBar.t.sol`, + `test/unit/compliance/elements/BadActorDisqualification.t.sol`, + `test/unit/compliance/elements/OperatorSelfDealing.t.sol`, + `test/unit/compliance/elements/FraudSurveillance.t.sol`, + `test/unit/compliance/elements/RegMIssuerBuying.t.sol`. +- `forge fmt --check`. +- `forge lint --severity high --deny warnings src`. + +### State + +passing + +### Notes + +- wave-2 precedent은 `TOOLKIT-001` Notes(기본 script discovery 밖 opt-in 등록으로 + 기본 demo의 컴파일 그래프/배포 범위 보존)와 동일하다. wave-3 element는 + DeployStack이나 active recipe에 추가하지 않는다. +- production data-source seam은 각 element 헤더에 문서화되어 있다(OFAC/ONCHAINID/ + EDGAR 등은 approval-gated seam). +- F-01 OperatorSelfDealing의 `registryAvailable` fail-closed default는 deploy + script가 자동으로 켜지 않는다. operator가 roster 적재 후 명시적으로 + `setRegistryAvailable(true)`를 호출해야 통과가 시작된다. +- F-03 FraudSurveillance는 STATEFUL(`BaseStatefulElement`)이므로 배포 후 + `setEngine(engine)` wiring이 필요하다(wave-2 D-01 HolderCount와 동일 패턴). diff --git a/PROGRESS.md b/PROGRESS.md index 139f5f2..bb966e2 100644 --- a/PROGRESS.md +++ b/PROGRESS.md @@ -66,6 +66,13 @@ source of truth로 사용한다. `snapshot`/`restore`, `quote-inspect`(서명자 복구/만료/nonce·승인, 실패 시 exit 1). reason 디코딩·EIP-712 복구는 기존 lib 재사용. smoke(quote-inspect valid+tampered) + full live walkthrough로 검증. `forge test --offline` 238/238 유지. +- `CMP-004 — Wave-3 Illustrative Element Library`(illustrative element 6개 + + per-element unit test + `tools/deploy-wave3` opt-in deploy script): A-06 + Affiliate, A-12 Red Flag Knowledge Bar, E-03 Bad Actor Disqualification, + F-01 Operator Self-Dealing, F-03 Fraud Surveillance, F-04 Reg M + restricted-period buying gate. operator-gated setter, fail-closed default, + monitoring element(A-12/F-03) non-blocking. active recipe/DeployStack 미변경. + `forge test --offline` 770/770. ## Blocked @@ -85,6 +92,27 @@ source of truth로 사용한다. ## Last Session Summary +- `CMP-004`에서 wave-3 illustrative element 6개(A-06 Affiliate, A-12 Red Flag + Knowledge Bar, E-03 Bad Actor Disqualification, F-01 Operator Self-Dealing, + F-03 Fraud Surveillance, F-04 Reg M restricted-period buying gate)와 per-element + unit test를 통합하고, `tools/deploy-wave3/DeployWave3Elements.s.sol` opt-in + deploy script를 추가했다. wave-2 precedent과 동일하게 기본 Foundry script + discovery 밖에서 opt-in으로 등록하며 active recipe/DeployStack에 붙이지 않는다. + F-03은 STATEFUL이라 `setEngine(engine)` wiring(D-01 HolderCount 패턴)을 하고, + F-01은 `registryAvailable` fail-closed default를 script에서 자동으로 켜지 않는다. + script는 `ELEMENT_REGISTRY`/`COMPLIANCE_ENGINE`/`DEPLOYER_PRIVATE_KEY`를 받아 + 등록하며 `forge script … --offline`으로 컴파일만 검증했다(env-var 단계에서만 + revert). `forge fmt --check`, `forge build`, + `forge test --offline` 770/770(pre-task 582 + 신규 188), + `forge lint --severity high --deny warnings src`가 모두 통과했다. + `scripts/check.sh`는 Foundry·RFQ SDK·CLI·demo backend·Toolkit·Operator + API/dashboard 단계를 전부 통과했으나 마지막 vendored deploy-v3 단계는 이 세션 + 환경에 yarn이 없어 실행하지 못했다(deploy-v3는 이번 작업에서 변경 없음, CI + parity gate가 커버). + wave-2 script(`tools/deploy-wave2`)의 import 경로가 `../src/...`로 한 단계 + 얕아 repo root 기준 컴파일이 안 되는 잠재 버그를 발견했다(컴파일 게이트가 + 없어 미검출). wave-3는 올바른 `../../src/...`를 사용하며, wave-2 수정은 별도 + follow-up으로 남긴다. - `DOC-003`에서 ROADMAP의 Toolkit/API/dashboard/live E2E 완료 상태와 production 후속 범위를 정렬하고 incident-response runbook을 추가했다. 최신 main에서 `buidl-like`와 `reg-d`가 각각 7/7 scenario, Toolkit preflight/checkpoint, diff --git a/docs/compliance/elements/A-01_sanctions-screening b/docs/compliance/elements/A-01_sanctions-screening new file mode 100644 index 0000000..cd6fd77 --- /dev/null +++ b/docs/compliance/elements/A-01_sanctions-screening @@ -0,0 +1,519 @@ +ELE.A-01_sanctions-screening + +# A-01 Sanctions Screening (OFAC) — 부품 심층 인수인계 문서 (Walkthrough) + +**이 문서는 무엇인가.** Decipher RWA DEX의 컴플라이언스 부품 중 하나인 Sanctions Screening 부품(내부 식별자 A-01)을, 미국 제재법을 처음 보는 사람도 이해할 수 있도록 풀어 쓴 인수인계 문서다. 개발자·법무팀·외부 자문 변호사·학회원이 각자 작업의 base로 그대로 쓸 수 있도록 — ① 이 규제가 어디서 왔고 왜 존재하는지, ② 어떤 사실을 입력받아 ③ 어떤 로직으로 판정하고 ④ 실패하면 어떻게 처리하며 ⑤ 어떤 테스트로 검증하는지를, 기술 요소마다 풀이를 함께 붙여 설명한다. + +**자체완결 원칙.** 이 문서는 다른 내부 문서를 열지 않아도 단독으로 이해되도록 작성했다. 인용은 미국 연방법·연방규칙·재무부 OFAC·대통령 행정명령 등 외부 공식 자료만 사용한다. + +⚠ **출처·버전 정정 노트.** 본 부품의 미국 제재법 인용은 다음 1차 출처를 기준으로 한다 — IEEPA는 50 U.S.C. §§1701·1702·1705 (uscode.house.gov 현행본), TWEA는 50 U.S.C. §§4301–4341, OFAC 규칙은 17 C.F.R.이 아니라 **31 C.F.R. Chapter V**(Parts 500–599) 및 **31 C.F.R. Part 501**(eCFR 현행본, Title 31), 민사 과태료 상한은 **31 C.F.R. §501** 및 2025-01-15 발효 인플레이션 조정(90 FR 3690), OFAC 50% Rule은 재무부 OFAC 발행 *Revised Guidance*(2014-08-13), 가상자산 가이드는 OFAC *Sanctions Compliance Guidance for the Virtual Currency Industry*(2021-10-15)이다. 읽는 사람이 특히 헷갈리기 쉬운 용어·정정 포인트는 다음과 같다(상세는 부록 C). + +- **A-01은 증권법 부품이 아니다.** A-03(적격투자자)·A-13(QP)이 1933년법·1940년법(Title 15·17 C.F.R.) 위에 서 있다면, A-01은 **제재법**(IEEPA·TWEA, Title 50·31 C.F.R. Ch. V) 위에 선다. 법체계·소관 기관(SEC가 아니라 재무부 OFAC)·책임 구조(strict liability)가 모두 다르다. +- **민사 책임은 strict liability다.** IEEPA §1705(b) 민사 과태료는 *고의(scienter)를 요건으로 하지 않는다* — "몰랐다"가 책임을 면하지 못한다. 고의(`willful`)는 §1705(c) 형사 책임의 요건일 뿐이고, 민사에서는 penalty 산정의 한 factor에 불과하다. +- **차단 대상은 "명단에 적힌 사람"만이 아니다.** SDN 직접 등재자 외에, 차단대상이 **합산·직간접 50% 이상** 보유한 법인도 *명단에 없어도* 자동으로 차단대상이다(50% Rule). 이 합산은 *재귀적*이다(중간 법인을 통한 간접 보유 — A-09 look-through와 구조적으로 동형). +- **DEX에서는 지갑 주소도 검사 대상이다.** OFAC은 2018년부터 SDN 등재 항목에 **디지털 자산 지갑 주소**를 식별자로 포함한다. 따라서 A-01은 (i) 당사자의 신원과 (ii) 그 지갑 주소를 둘 다 명단에 대조한다. +- **A-01과 A-02는 다른 축이다.** A-01 = *명단 기반*(특정 사람·법인·지갑이 SDN/차단대상인가). A-02 = *관할 기반*(특정 국가·지역의 투자자인가 — Cuba·Iran·North Korea·Syria·Crimea 등 포괄 제재). 포괄 국가 프로그램에서 겹치는 영역이 있으나 부품은 분리한다(§9). +- **A-01은 한 Recipe의 부품이 아니라 모든 거래의 게이트다.** A-01의 아키텍처상 지위(독립 IEEPA strict-liability 게이트 vs Reg D 레시피 구성요소)는 Open Issue OD-CI-5이며, 본 문서 §10에서 결정적 권고를 제시한다. + +**양식 메모.** 이 문서는 A-13/A-03 인수인계 양식(Walkthrough)의 번호·헤더·서술 관습을 따른다. A-13 양식의 일부 섹션 — §8 (α) 증명서 확인형 패턴, §10 (γ) 3-Layer Solution, §11 (δ) Frontend·Off-chain Operator, §13 파일명 규칙 — 은 A-01에 해당 내용이 다르거나 없어 생략하거나 변형했다. 반대로 본 문서는 A-13 양식엔 없는 **§10 아키텍처 노트(OD-CI-5 분류 결정)**를 A-01 고유 절로 추가한다 — A-01의 "전 Recipe 보편 부착" 성격 때문에 분류 결정이 이 부품의 핵심 산출물이기 때문이다. 부록 A~D는 A-13 양식엔 대응 슬롯이 없는 A-01 고유 내용(Authority 표·BUIDL 레퍼런스·표현 가이드·결론 문구)이라 부록으로 보존한다. + +--- + +## §1. 규제 맥락 — 이 부품이 다루는 규제는 어디서 왔는가 (Context First) + +A-01은 한 줄로 말하면 다음 질문에 답하는 부품이다. + +> 이 거래의 어느 당사자(또는 그 지갑, 또는 그가 50% 이상 보유한 법인)가 OFAC 제재 명단(SDN/차단대상)에 해당하는가? + +미국 제재법의 기본 출발점은 **IEEPA**(International Emergency Economic Powers Act, 50 U.S.C. §§1701 이하)다. 대통령이 "미국 밖에 원천을 둔 비상하고 이례적인 위협"에 대해 국가비상사태를 선포하면(§1701), 대통령은 그 위협과 관련된 재산·거래를 *차단(block)·금지(prohibit)*할 권한을 갖는다(§1702). 이 권한을 위임받아 실제로 명단을 만들고 집행하는 기관이 재무부 산하 **OFAC**(Office of Foreign Assets Control)이다. OFAC은 차단 대상을 **SDN List**(Specially Designated Nationals and Blocked Persons List)에 올리고, 미국인(U.S. person) 및 미국 관할에 속하는 재산은 그 대상과 거래하는 것이 *원칙적으로 전면 금지*된다. + +증권법(A-03·A-13)과의 결정적 차이가 셋 있다. + +1. **법체계가 다르다.** 증권법은 "등록하거나 면제를 찾아라"(Securities Act §5)의 구조다 — 면제 요건을 갖추면 적법하게 팔 수 있다. 제재법은 *면제 요건의 문제가 아니라 금지의 문제*다 — 차단대상과의 거래는 어떤 증권법 면제를 갖추든 무관하게 금지된다. 그래서 A-01은 "Reg D 면제가 성립하는가"라는 질문(R1 Recipe)과 **독립적으로** 작동한다. + +2. **책임이 strict liability다.** 증권법 위반은 대체로 고의·과실 등 주관적 요건을 따진다. 그러나 IEEPA 민사 과태료(§1705(b))는 **고의를 요건으로 하지 않는다** — 차단대상인 줄 몰랐어도 거래가 성사되면 위반이 성립한다. 고의(`willful`)는 형사 책임(§1705(c))에서만 요건이 되고, 민사에서는 과태료 *액수*를 정하는 factor일 뿐이다. 이 strict liability가 A-01을 "사전 차단(pre-trade gate)"으로 설계해야 하는 이유다 — 사후에 "몰랐다"로 방어할 수 없으므로 거래 *전에* 막아야 한다. + +3. **보편적으로 적용된다.** 증권법 부품은 자산이 증권일 때만 켜진다. 제재법은 *모든 미국 관할 거래*에 적용된다 — 증권이든 아니든, 발행이든 재판매든. 그래서 A-01은 특정 Recipe의 부속이 아니라 **모든 Recipe(R1·R2·R3)에 필수로 부착**되고, 사실상 거래 단위의 전역 게이트다(§10). + +A-01이 검사하는 **대상은 거래의 모든 당사자**다 — 매수인만이 아니라 매도인도, 그리고 DEX 맥락에서는 그들의 **지갑 주소**도 함께 본다. 매도인이 차단대상이면 매수인이 깨끗해도 거래는 금지된다. 자전·중개 구조에서는 모든 관여 당사자가 검사 대상이 된다. + +--- + +## §2. 메타 정보 (Internal Identifier Box) + +아래는 Decipher 내부 PM 규약상의 식별자·분류값을 한곳에 모은 박스다. 본문에서는 이 코드들을 단독으로 쓰지 않고 "본 부품"·"Sanctions Screening 부품" 같은 자연어로 부른다. + +| 항목 | 값 | 한 줄 풀이 | +|------|----|----------| +| 부품 이름 | Sanctions Screening | 거래 당사자·지갑이 제재 대상인지 검사하는 차단원 | +| 검사 대상 | OFAC SDN/차단대상 match — IEEPA·OFAC 규정상 blocked person 여부 (직접 등재 + 50% Rule 법인 + 등재 지갑 주소) | "이 사람·법인·지갑과 거래해도 되는가" | +| Internal ID | A-01 (Decipher PM 규약) | 부품 일련번호 | +| 검증 방식 | **기계 판정형(A)** — 단 identity-side는 증명서형(B) 하이브리드 | 온체인 지갑 주소는 코드가 직접 대조(결정론), 신원·50% 판단은 off-chain 스크리닝 후 claim 확인 (§3.8·§4 참조) | +| Timing | pre-trade / at time of transaction | 거래 체결 직전 차단. strict liability라 사후 방어 불가 → 반드시 사전 게이트 | +| Stateful 여부 | STATELESS | 거래 시점에 *현행 명단*에 대조한 스냅샷만 판정. 명단 갱신은 데이터 갱신이지 부품 상태 아님 | +| 활성화 Recipe | **(특수) 전 Recipe 보편** — R1·R2·R3 필수, R4 조건부 | 단일 home Recipe가 없음. 아키텍처상 거래 단위 전역 게이트(§10 OD-CI-5) | +| Cascade Element | A-04(Identity / KYC) | 신원-측 스크리닝의 전제 — 지갑을 실세계 신원으로 해소해야 이름 대조 가능 | +| 인접 경계 | A-02(국가·관할 제한) | A-01=명단 축, A-02=관할 축. 포괄 국가 프로그램에서 일부 중첩(§9) | +| 성숙도 | 완료 (claim schema·스크리닝 데이터 소스는 후속 보완 가능) | 데모 필수, 모든 Recipe 공용 | +| 파일·위치 | A-01_제재명단.md · 산출물/elements/ | 산출물 경로 | + +--- + +## §3. ① 법적 근거 (Layer 1 → 2 → 3) + +**읽는 법.** 법적 근거는 세 겹이다 — Layer 1(조문)은 의회가 만든 법률 텍스트(statute), Layer 2(규칙)는 재무부 OFAC가 그것을 실무 수준으로 구체화한 연방규칙(rule), Layer 3(해석·집행)은 OFAC 발행 guidance·FAQ·대통령 행정명령(Executive Order)이 구체적 적용을 정한 것이다. 증권법 부품(A-03)과 달리 A-01의 Layer 2·3은 17 C.F.R.(SEC)이 아니라 **31 C.F.R. Chapter V**(OFAC)와 **대통령 행정명령**으로 구성된다. 본 절은 조문이 작동하는 논리 흐름 순서로 배열돼 있어 §3.1~§3.12 번호를 그대로 유지하며, 각 항목이 어느 Layer인지는 아래 표로 확인하면 된다. + +| 종류 | Authority | 내용 | A-01 관련성 | Direct/Supporting | Official URL | +|------|-----------|------|-------------|-------------------|--------------| +| Statute | IEEPA §202, 50 U.S.C. §1701 | 국가비상사태 선포 전제(비상·이례적 위협) | 차단 권한의 발동 근거(배경) | Supporting | uscode.house.gov | +| Statute | IEEPA §203, 50 U.S.C. §1702 | 차단대상 재산·거래 block·prohibit 권한 (§1702(a)(1)(B)) | A-01이 막는 행위의 직접 근거 | **Direct** | uscode.house.gov | +| Statute | IEEPA §206, 50 U.S.C. §1705 | 위반 시 민사(strict liability)·형사 벌칙 | 사전 차단의 당위(결과의 무게) | **Direct** | uscode.house.gov | +| Statute | TWEA, 50 U.S.C. §§4301–4341 (벌칙 §4315) | IEEPA 전신·병렬 권한(Cuba 등 legacy) | 일부 프로그램의 대체 근거(배경) | Supporting | uscode.house.gov | +| OFAC Rule | 31 C.F.R. Chapter V (Parts 500–599) | 프로그램별 금지거래(§xxx.201)·벌칙(§xxx.701) | 차단의 규칙 차원 프레임워크 | **Direct** | ecfr.gov | +| OFAC Rule | SDN List (appendix A to 31 C.F.R. Ch. V) | 차단대상 명단(연방관보 공시·규칙 편입) | A-01이 대조하는 명단 본체 | **Direct** | ecfr.gov / ofac.treasury.gov | +| OFAC Rule | 31 C.F.R. Part 501 (RPPR) | 기록보존·차단/거절 보고·차단해제 절차 | 차단 후 운영·오탐 해제 근거 | Supporting | ecfr.gov | +| OFAC Guidance | Revised 50% Rule Guidance (2014-08-13) + FAQ 398–402 | 차단대상이 합산 50%+ 보유 법인의 자동 차단 | 법인 매수인 look-through 근거 | **Direct** | ofac.treasury.gov | +| OFAC Guidance | VC Compliance Guidance (2021-10-15) + FAQ 559·560·563·646 | SDN 등재 지갑 주소·온체인 스크리닝 | DEX의 지갑-측 검사 근거 | **Direct** | ofac.treasury.gov | +| OFAC Guidance | Economic Sanctions Enforcement Guidelines (31 C.F.R. Part 501, App. A) | strict liability·자발적 자진신고(VSD) 감경 | penalty 산정·자진신고 설계 | Supporting | ecfr.gov / ofac.treasury.gov | +| Executive | E.O. 13224 (2001-09-24) 등 IEEPA 발 행정명령 | 프로그램별 지정(SDGT 등) 권한 선언 | 지정 메커니즘의 예시 | Supporting | govinfo.gov | + +### 3.0 법조문 관계 플로우차트 (개발자용) + +위 표의 권한들이 A-01 판정에서 어떻게 연결되는지 — 거래의 어느 당사자·지갑이 어느 단계에서 어느 권한에 의해 차단되는지를 흐름으로 정리한 것이다. 각 조항 상세는 §3.1~§3.12. + +![A-01 제재 스크리닝 법조문 관계·판정 흐름](img/a01_flow.png) + +### 3.0.2 조문 순서·중요성 한눈에 보기 + +아래는 §3.1~§3.12 소단원의 읽는 순서(법이 작동하는 논리 흐름)와 중요성(A-01이 실제로 그걸로 차단하는가)을 한 장으로 요약한 것이다. 순서는 중요도순이 아니라 논리 흐름순이다 — 권한의 뿌리(§1701)에서 시작해 차단 권한(§1702)·명단(SDN·50%·지갑)·결과(§1705)·운영(Part 501)으로 내려간다. + +| 순서 | 조문/근거 | 중요성 | A-01이 그걸로 하는 일 | +|------|----------|--------|----------------------| +| §3.1 | IEEPA §202 (§1701) | 보조 | 안 함 — "왜 차단 권한이 생기나"의 전제 | +| §3.2 | IEEPA §203 (§1702) | **핵심** | 차단대상과의 거래를 *금지*하는 직접 근거 | +| §3.3 | IEEPA §206 (§1705) | **핵심** | 사전 차단의 당위 — strict liability·벌칙 | +| §3.4 | TWEA (§§4301–4341) | 보조 | 안 함 — 일부 legacy 프로그램의 대체 뿌리 | +| §3.5 | 31 C.F.R. Ch. V (§xxx.201) | **핵심** | 프로그램별 금지거래의 규칙 차원 | +| §3.6 | SDN List (App. A) | **핵심** | 신원·지갑을 직접 대조하는 명단 | +| §3.7 | 50% Rule (2014-08-13) | **핵심** | 법인 매수인의 차단 여부를 합산·재귀로 판정 | +| §3.8 | VC Guidance (2021-10-15) | **핵심** | 지갑 주소를 SDN 등재 주소에 대조 | +| §3.9 | 31 C.F.R. Part 501 | 보조 | 차단 후 보고·기록·오탐 해제 | +| §3.10 | Executive Orders | 보조 | 안 함 — 지정이 어떻게 이뤄지는가의 메커니즘 | +| §3.11 | BUIDL Manifest | 노트 | 위를 실제 BUIDL 사례에 적용 | +| §3.12 | ERC-3643 변환 | 총정리 | §3.1~§3.10의 claim·check 매핑을 한 표로 | + +### 3.1 IEEPA §202 — 국가비상사태 선포 전제 + +- **조항:** International Emergency Economic Powers Act §202, 50 U.S.C. §1701 +- **핵심 원문:** Any authority granted to the President by section 1702 of this title may be exercised to deal with any unusual and extraordinary threat, which has its source in whole or substantial part outside the United States, to the national security, foreign policy, or economy of the United States, if the President declares a national emergency with respect to such threat. +- **한국어:** §1702의 권한은, 미국의 국가안보·외교·경제에 대한 *비상하고 이례적인 위협으로서 그 원천이 전부 또는 상당 부분 미국 밖에 있는* 것에 대처하기 위해, 대통령이 그 위협에 관해 국가비상사태를 선포한 경우에 한해 행사될 수 있다. +- **쉬운 설명:** 제재의 출발 스위치. OFAC의 차단 권한은 무에서 나오지 않고 *대통령의 비상사태 선포*에 근거한다. 프로그램마다 그 뿌리가 되는 비상사태(와 그것을 구체화한 행정명령·§3.10)가 있다. A-01은 이 전제를 직접 검사하지 않는다 — 이미 선포된 프로그램들이 만들어 둔 명단(SDN)을 대조할 뿐이다. +- **A-01 PASS/FAIL 반영:** 직접 반영 ✕ (배경 — 권한의 발동 근거) +- **ERC-3643 변환:** 없음 (전제 조항) + +### 3.2 IEEPA §203 — 차단대상 재산·거래의 block·prohibit 권한 + +- **조항:** IEEPA §203, 50 U.S.C. §1702 (특히 §1702(a)(1)(B)) +- **핵심 원문:** [The President may] investigate, block during the pendency of an investigation, regulate, direct and compel, nullify, void, prevent or prohibit, any acquisition, holding, withholding, use, transfer, withdrawal, transportation, importation or exportation of, or dealing in, or exercising any right, power, or privilege with respect to, or transaction involving, any property in which any foreign country or a national thereof has any interest by any person, or with respect to any property, subject to the jurisdiction of the United States. +- **한국어:** [대통령은] 미국 관할에 속하는 자 또는 재산에 의한, 외국 또는 그 국민이 어떤 형태로든 이해관계를 갖는 재산에 관한 *취득·보유·사용·이전·인출·거래 등 일체*를 조사·(조사 중)차단·규제·무효화·방지·금지할 수 있다. (USA PATRIOT Act 개정으로 "조사 진행 중 차단(block during the pendency of an investigation)" 권한이 추가됨.) +- **쉬운 설명:** A-01이 막는 행위의 직접 근거. 차단대상이 *어떤 형태의 이해관계라도* 갖는 재산은 동결 대상이고, 미국인은 그와의 *거래(transaction involving)*가 금지된다. 핵심 포인트 둘 — ① 금지는 "직접·간접(directly or indirectly)" 모두에 미친다(→ 50% Rule·§3.7의 법적 뿌리), ② 대상은 "재산(property)"이며 OFAC은 이를 광의로 해석해 *디지털 자산도 포함*한다(→ 지갑 주소·§3.8). +- **A-01 PASS/FAIL 반영:** **직접 반영 ○** — 거래 당사자(또는 그 지갑, 또는 그가 50%+ 보유한 법인)가 차단대상이면 이 조항에 따라 거래가 금지되므로 FAIL. +- **ERC-3643 변환:** Recipe·context와 무관하게 모든 transfer에 대해 sanctions gate(A-01)를 *전역 적용*. `transaction.parties = {buyer, seller}`, `transaction.wallets = {buyerWallet, sellerWallet}` 전부 스크리닝. + +### 3.3 IEEPA §206 — 위반 시 벌칙 (strict liability) + +- **조항:** IEEPA §206, 50 U.S.C. §1705 +- **핵심 원문 (a) 위법행위:** It shall be unlawful for a person to violate, attempt to violate, conspire to violate, or cause a violation of any license, order, regulation, or prohibition issued under this chapter. +- **핵심 원문 (b) 민사:** A civil penalty may be imposed on any person who commits an unlawful act described in subsection (a) in an amount not to exceed the greater of— (1) [$250,000, 인플레이션 조정 후 $377,700]; or (2) an amount that is twice the amount of the transaction that is the basis of the violation with respect to which the penalty is imposed. +- **핵심 원문 (c) 형사:** A person who willfully commits, willfully attempts to commit, or willfully conspires to commit, or aids or abets in the commission of, an unlawful act described in subsection (a) shall, upon conviction, be fined not more than $1,000,000, or if a natural person, may be imprisoned for not more than 20 years, or both. +- **한국어:** (a) 본 장의 license·order·규정·금지를 위반·위반시도·공모하거나 *위반을 야기*하는 것은 위법이다. (b) 위 위법행위를 한 자에게는 *$377,700(현행 인플레이션 조정액; 법정 기준 $250,000)과 해당 거래액의 2배 중 큰 금액*을 상한으로 민사 과태료를 부과할 수 있다. (c) *고의로(willfully)* 위반·시도·공모하거나 방조한 자는 유죄 시 $1,000,000 이하의 벌금, 자연인은 20년 이하의 징역에 처한다. +- **쉬운 설명:** A-01을 *사전 차단*으로 설계해야 하는 이유. 결정적 비대칭 둘. ① **민사는 strict liability** — (b)에는 `willfully`가 없다. 차단대상인 줄 *몰랐어도* 거래가 성사되면 위반이 성립하고 과태료가 부과될 수 있다. 고의는 (c) 형사에서만 요건이며, 민사에선 과태료 *액수*를 좌우하는 factor일 뿐이다(자진신고·강한 컴플라이언스는 감경 — §3.9·App. A). ② **거래액당 부과** — 상한이 *거래당* $377,700 또는 2배라 거래가 많으면 합산된다. 따라서 "한 번 통과시킨 위법 거래"의 비용이 매우 크고, 사후에 "몰랐다"로 막을 수 없다 → 거래 *전에* 기계가 차단해야 한다. +- **A-01 PASS/FAIL 반영:** 직접 반영 △ (벌칙 자체는 판정식이 아니나, *이 결과의 무게가 A-01의 fail-closed 설계·보수적 기본값을 정당화*한다 — §5·§6). +- **ERC-3643 변환:** A-01은 `fail-closed`로 구현(검사 결과가 불확실하면 통과가 아니라 *차단/보류*가 기본). penalty 비대칭이 그 근거. + +> **strict liability의 설계 함의 (한 칸 요약).** A-03(증권)은 "자격 증명서가 *있으면* 통과" — 적극 요건의 확인. A-01(제재)은 "차단대상이 *아니어야* 통과" — 소극 요건의 배제. 그리고 그 배제는 *고의 불문*이라 한 건의 누락도 위반이 된다. 그래서 A-01은 의심 시 *보류/차단*을 기본으로 하고, 오탐은 사후 해제 절차(§3.9·§6)로 푼다. + +### 3.4 TWEA — IEEPA의 전신·병렬 권한 + +- **조항:** Trading with the Enemy Act, 50 U.S.C. §§4301–4341 (벌칙 §4315) +- **핵심 원문(취지):** TWEA grants the President authority to regulate or prohibit transactions with designated foreign countries or nationals during time of war or declared emergency; it remains the statutory basis for certain legacy programs (notably the Cuban Assets Control Regulations). +- **한국어:** TWEA는 전시 또는 선포된 비상 상황에서 지정된 외국·국민과의 거래를 규제·금지할 대통령 권한을 부여하며, 일부 *legacy 프로그램*(대표적으로 Cuba 자산통제규정)의 법적 근거로 남아 있다. IEEPA(1977)는 TWEA의 평시 적용을 떼어내 만든 후신이며, 현대의 대다수 프로그램은 IEEPA 근거다. +- **쉬운 설명:** A-01에는 직접 호출되지 않는 배경 조항. 대부분의 SDN 차단은 IEEPA 근거이고, TWEA는 Cuba 등 소수 프로그램의 뿌리다. 다만 A-01은 *근거 조문과 무관하게* OFAC이 차단한 자 전체를 명단으로 대조하므로, TWEA 근거든 IEEPA 근거든 검사 결과는 같다(차단대상이면 FAIL). +- **A-01 PASS/FAIL 반영:** 직접 반영 ✕ (배경 — 일부 프로그램의 대체 근거) +- **ERC-3643 변환:** 없음. 단 거절 사유 코드에 근거 프로그램(IEEPA/TWEA)을 메타로 기록할 수 있음(보고·§3.9용). + +### 3.5 31 C.F.R. Chapter V — 프로그램별 금지거래·벌칙 + +- **조항:** 31 C.F.R. Chapter V, Parts 500–599 (각 프로그램의 §xxx.201 *Prohibited transactions*·§xxx.701 *Penalties*) +- **핵심 원문(구조):** Each OFAC program part sets out, at §_.201, the transactions prohibited with respect to blocked persons ("all property and interests in property … are blocked and may not be transferred, paid, exported, withdrawn, or otherwise dealt in"), and at §_.701, the applicable IEEPA/TWEA civil and criminal penalties. +- **한국어:** OFAC의 각 프로그램(Part)은 §xxx.201에서 차단대상에 관한 *금지거래*(모든 재산·재산상 이익을 차단하며 이전·지급·인출·기타 거래 일체 금지)를, §xxx.701에서 적용 벌칙(IEEPA/TWEA)을 규정한다. 회피·우회·공모(evade, avoid, cause a violation, conspiracy)도 동일하게 금지된다. +- **쉬운 설명:** 조문(§1702)이 추상적 권한이라면, 그것을 프로그램별로 구체화한 규칙 차원이 31 C.F.R. Ch. V다. A-01은 특정 Part를 하드코딩하지 않는다 — 차단대상이 *어느 프로그램으로* 차단됐든 결과는 동일(거래 금지)하기 때문이다. 핵심은 §xxx.201이 "직접·간접 일체"를 금지하고 "회피·우회"까지 막는다는 점(→ 단일인 다지갑 우회는 A-04, 50% 우회는 §3.7). +- **A-01 PASS/FAIL 반영:** **직접 반영 ○** — 차단대상과의 거래(직접·간접·회피 포함)는 §xxx.201 위반이므로 FAIL. +- **ERC-3643 변환:** `blockedStatus = SDN_MATCH | FIFTY_PCT_RULE | WALLET_MATCH` 중 하나라도 true → 거래 금지. 프로그램 식별자는 메타(`programTag`)로 보존. + +### 3.6 SDN List — A-01이 대조하는 명단 본체 + +- **조항:** Specially Designated Nationals and Blocked Persons List — appendix A to 31 C.F.R. Chapter V; 연방관보 공시 + 각 프로그램 Part 편입 +- **핵심 원문(취지):** OFAC publishes the names (and identifiers, including aliases, dates of birth, passport numbers, and — since 2018 — digital currency addresses) of blocked persons on the SDN List; the broader Consolidated Sanctions List adds non-SDN lists (e.g., the Sectoral Sanctions Identifications List). Both are available on OFAC's website and searchable via Sanctions List Search. +- **한국어:** OFAC은 차단대상의 이름과 식별자(별칭·생년월일·여권번호, 그리고 2018년부터 *디지털 자산 지갑 주소*)를 SDN List에 공시한다. 더 넓은 Consolidated Sanctions List는 비-SDN 명단(예: SSI List)을 더한다. 둘 다 OFAC 웹사이트에 공개되고 Sanctions List Search로 검색된다. +- **쉬운 설명:** A-01이 *대조하는 대상* 그 자체. 검사는 두 갈래 — (i) 당사자의 *신원*(A-04가 지갑→실세계 신원으로 해소한 이름·생년월일·여권 등)을 SDN 등재 식별자에 대조, (ii) 당사자의 *지갑 주소*를 SDN 등재 지갑 주소에 대조(§3.8). 이름 대조는 표기 변형 때문에 *fuzzy match*가 필요하고(오탐 발생 → §6 해제), 지갑 대조는 *exact match*라 결정론적이다. +- **A-01 PASS/FAIL 반영:** **직접 반영 ○** — 신원 또는 지갑이 명단에 match하면 FAIL. +- **ERC-3643 변환:** `identityMatch = screen(resolvedIdentity, SDN_identifiers)` (off-chain, fuzzy), `walletMatch = (walletAddress ∈ SDN_wallet_addresses)` (on-chain, exact). 둘 중 하나라도 true → FAIL. + +### 3.7 OFAC 50% Rule — 법인 매수인의 차단 여부 (합산·재귀) + +- **조항:** OFAC, *Revised Guidance on Entities Owned by Persons Whose Property and Interests in Property Are Blocked* (2014-08-13); 보충 FAQ 398–402 +- **핵심 원문:** Any entity owned in the aggregate, directly or indirectly, 50 percent or more by one or more blocked persons is itself considered to be a blocked person. The property and interests in property of such an entity are blocked regardless of whether the entity itself is listed … on OFAC's list of Specially Designated Nationals. … For the purpose of calculating aggregate ownership, the ownership interests of persons blocked under different OFAC sanctions programs are aggregated. +- **한국어:** 차단대상 1인 이상이 *합산하여, 직접 또는 간접으로 50% 이상* 보유한 법인은 — *그 법인이 SDN List에 없더라도* — 그 자체로 차단대상으로 본다. 합산 시 *서로 다른 프로그램으로 차단된 자들의 지분도 합산*한다. "간접"은 중간 법인(역시 50%+ 보유된)을 통한 보유를 뜻한다. (50% Rule은 *소유*에만 적용되고 *지배(control)*에는 적용되지 않는다 — 50% 미만이라도 지배하는 경우는 자동 차단이 아니되 주의 대상이며, OFAC이 별도 지정할 수 있다.) +- **쉬운 설명:** 법인 매수인을 만났을 때 "어디까지 뚫고 들어가나"의 답. A-09(법인 look-through)와 *구조적으로 동형*이다 — 자연인 차단대상에 도달할 때까지 재귀적으로 지분을 따라 내려가되, 각 단계에서 *합산 50%*가 기준이다. + - 예 1: 차단대상 X가 법인 A의 50%, A가 법인 B의 50% 보유 → A도 B도 차단대상(X가 B를 간접 50% 보유). + - 예 2: 차단대상 X가 25%, 차단대상 Y가 30% 보유(서로 다른 프로그램) → 합산 55% → 그 법인은 차단대상. + + 이 판단은 지분 데이터·실소유자 정보가 필요해 *off-chain*에서 이뤄지고, 결과가 claim으로 들어온다(A-01은 그 claim과 지갑 직접 대조를 함께 본다). +- **A-01 PASS/FAIL 반영:** **직접 반영 ○** — 법인 매수인이 50% Rule상 차단대상이면 FAIL. 50% 미만 지배(control)만 있는 경우는 자동 FAIL은 아니나 red-flag로 보류 가능(§6). +- **ERC-3643 변환:** `entityOwnership.lookThroughStatus = COMPLETED | PENDING | FAILED`; `aggregateBlockedOwnership ≥ 50% → blocked=true`. look-through 미완(PENDING)이면 fail-closed로 보류. (A-09와 hook 공유.) + +### 3.8 OFAC 가상자산 가이드 — 지갑 주소의 스크리닝 + +- **조항:** OFAC, *Sanctions Compliance Guidance for the Virtual Currency Industry* (2021-10-15); FAQ 559(정의)·560(의무 동일)·563(SDN상 지갑 주소 구조)·646(차단 방법) +- **핵심 원문(취지):** OFAC's sanctions compliance obligations apply equally to transactions involving virtual currency and fiat currency. Since 2018, OFAC has included specific digital currency addresses as identifiers on SDN List entries for blocked persons. Virtual currency industry participants are expected to screen wallet addresses (and IP addresses), to use blockchain analytics, and to consider a historical lookback when OFAC adds a new address. +- **한국어:** OFAC 컴플라이언스 의무는 가상자산 거래에도 *법정화폐와 동일하게* 적용된다. OFAC은 2018년부터 SDN 등재 항목에 *특정 디지털 자산 지갑 주소*를 식별자로 포함한다. 가상자산 업계 참여자는 지갑 주소(및 IP)를 스크리닝하고, 블록체인 분석을 활용하며, 새 주소 등재 시 과거 거래 *소급 점검(historical lookback)*을 고려할 것이 기대된다. +- **쉬운 설명:** DEX 맥락에서 A-01의 *온체인 검사*의 직접 근거. 지갑 주소는 SDN 등재 주소와 *정확히 일치(exact match)*하는지로 보므로 결정론적이고, 이 부분이 A-01을 "기계 판정형(A)"으로 분류하게 하는 핵심이다. 신원-측 이름 대조(§3.6·fuzzy)는 off-chain claim으로 들어오는 반면, 지갑-측 대조는 코드가 직접 한다 — 그래서 A-01은 *하이브리드*다(§2·§4). 가이드는 또한 "등재 주소와 같은 지갑을 공유한 주소"로 연관 주소를 식별하라고 권하나, 그 *연관 분석*은 결정론을 넘는 휴리스틱이므로 A-01의 자동 차단이 아니라 red-flag(감시)로 다룬다(F-02·A-12와 경계). +- **A-01 PASS/FAIL 반영:** **직접 반영 ○** — 거래 지갑 주소가 SDN 등재 주소면 FAIL. 연관 주소(공유 지갑 등)는 자동 FAIL 아님 → flag. +- **ERC-3643 변환:** `walletMatch = (txWallet ∈ SDN_wallet_set)` (on-chain, O(1) set membership); SDN 주소 set은 oracle/주기 갱신으로 온체인 또는 검증 모듈에 공급. + +### 3.9 31 C.F.R. Part 501 (RPPR) — 기록·보고·차단해제 + +- **조항:** Reporting, Procedures and Penalties Regulations, 31 C.F.R. Part 501 — §501.601(기록보존)·§501.603(차단재산 보고)·§501.604(거절거래 보고)·§501.806(오인 해제)·§501.807(delisting)·§501.801/.808(라이선스)·App. A(집행 가이드라인) +- **핵심 원문(취지):** §501.601 requires retention of records relating to blocked/rejected transactions for 5 years; §501.603 requires initial and annual reports of blocked property; §501.604 requires reports of rejected transactions within 10 business days; §501.806 provides a "Compliance Release" for property blocked in error due to mistaken identity or typographical error; §501.807 governs administrative reconsideration (delisting) petitions. +- **한국어:** 차단·거절 거래 관련 기록은 *5년 보존*(§501.601). 차단재산은 *초기 보고 + 연례 보고*(§501.603). 거절 거래는 *10영업일 내 보고*(§501.604; 2019-06-21 개정으로 비-금융기관 포함 모든 미국인에 확대). 오인·오타로 *잘못 차단*한 재산은 §501.806 "Compliance Release"로 해제(차단한 당사자만 신청 가능). 실제 지정자의 명단 제거는 §501.807 *행정재심 청원*으로. +- **쉬운 설명:** A-01이 *차단한 뒤* 운영 차원에서 무엇을 해야 하는지의 근거. 셋을 구분해야 한다. (a) **오탐(mistaken identity)** — 애초에 차단대상이 아니었는데 이름 유사 등으로 잘못 막힌 경우 → §501.806 Compliance Release(빠른 해제). (b) **실제 지정자의 이의** — 진짜 명단에 있으나 지정 자체가 부당하다는 주장 → §501.807 delisting(행정재심, ad hoc). (c) **정당 사유 거래** — 정확히 차단대상이지만 인가받을 사유가 있는 거래 → specific license(§501.801). A-01의 거절 사유 코드는 이 세 해제 경로 중 어디로 보낼지를 운영자에게 알려야 한다(§6). +- **A-01 PASS/FAIL 반영:** 직접 반영 ✕ (사후 운영·해제 — 단 거절 코드 설계와 직결). +- **ERC-3643 변환:** 차단 시 `report = {blockedAt, programTag, txParties, value}` 생성(§501.603/.604 대응); 거절 코드에 해제 경로 힌트(`COMPLIANCE_RELEASE | DELISTING | SPECIFIC_LICENSE`) 부착. + +### 3.10 Executive Orders — 지정 메커니즘 (예: E.O. 13224) + +- **조항:** IEEPA 발 대통령 행정명령 — 예시: Executive Order 13224 (2001-09-24, 테러리즘 관련 SDGT 지정) +- **핵심 원문(취지):** E.O. 13224, issued under IEEPA following the September 11 attacks, declared a national emergency and authorized the Secretary of the Treasury to designate "Specially Designated Global Terrorists" and to block all property and interests in property subject to U.S. jurisdiction; its prohibitions extend to making or receiving any contribution of funds, goods, or services to or for the benefit of designated persons. +- **한국어:** E.O. 13224는 9·11 이후 IEEPA에 근거해 국가비상사태를 선포하고, 재무장관에게 *SDGT(특별지정 글로벌 테러리스트)* 지정 및 미국 관할 재산의 전면 차단 권한을 부여했다. 금지는 지정자에 대한·지정자를 위한 자금·물품·용역의 제공·수령까지 미친다. +- **쉬운 설명:** "명단에 어떻게 오르나"의 메커니즘 예시. 행정명령이 프로그램(과 비상사태)을 만들고 → OFAC이 그 기준으로 개별 지정을 하고 → SDN List에 오른다. A-01은 이 메커니즘을 검사하지 않는다 — 결과물인 명단을 대조할 뿐이다. 다만 거절 사유의 근거 프로그램을 기록할 때 어떤 E.O./Part가 근거인지 메타로 남기면 보고·해제에 유용하다. +- **A-01 PASS/FAIL 반영:** 직접 반영 ✕ (배경 — 지정의 발생 경로) +- **ERC-3643 변환:** 없음. 근거 E.O./Part는 `programTag` 메타로 보존 가능. + +### 3.11 BUIDL Manifest 적용 노트 — 본 부품이 BUIDL에 실제로 어떻게 적용되는가 + +**전제.** §3.1~§3.10은 A-01의 일반(Recipe·자산-agnostic) 근거다. A-01은 *모든 토큰·모든 거래*에 공용으로 적용되는 전역 게이트이므로 BUIDL 고유 협소화가 거의 없다. 이 절은 그 일반 게이트가 BUIDL Manifest 한 토큰에 적용될 때 무엇이 켜지는지를 정리한다. + +**(1) BUIDL 규제 사실관계 (1차 출처 확인).** BUIDL(BlackRock USD Institutional Digital Liquidity Fund)은 Rule 506(c) + ICA §3(c)(7)로 발행되는 BVI 역외 펀드로, 투자자는 whitelist된 적격기관(QP+AI 또는 비-US person)이며 transfer agent·tokenization·placement agent가 Securitize다. **제재 스크리닝은 증권 자격과 무관하게 별도로 적용된다** — 비-US person(역외 투자자)이라도 SDN/차단대상일 수 있으므로 A-01은 그대로 켜진다. + +**(2) ⚠ 가장 중요 — A-01은 증권 자격과 독립적으로 켜진다.** A-03(AI)·A-13(QP)이 PASS여도, 당사자나 그 지갑이 차단대상이면 A-01에서 FAIL이고 거래는 금지된다. 역으로 A-01 PASS는 증권 적격을 전혀 의미하지 않는다(서로 다른 법체계). BUIDL이 *역외 펀드라 비-US person이 존재*한다는 사실이 A-01을 *면제하지 않는다* — 오히려 국적·관할(A-02)과 제재 명단(A-01)을 둘 다 통과해야 한다. + +**(3) BUIDL에서 A-01이 켜지는 국면.** + +| 국면 | 활성 Recipe | A-01 | 비고 | +|------|-------------|------|------| +| 발행(issuance) | R1(506(c)) + R3(§3(c)(7)) | **활성** (buyer·seller·지갑 전부) | 증권 자격(A-03/A-13)과 독립 | +| 재판매(resale) | Rule 144 + R3(§3(c)(7)) | **활성** | 매도인이 affiliate든 아니든, 매수인 자격과 무관하게 양 당사자 스크리닝 | + +→ A-03은 재판매 경로(Rule 144 vs §4(a)(7))에 따라 dormant가 될 수 있으나, **A-01은 경로·자격과 무관하게 항상 활성**이다. 이것이 A-01의 "전 Recipe 보편" 성격의 BUIDL상 발현이다. + +**(4) BUIDL의 스크리닝 실행.** 실제 BUIDL은 Securitize가 onboarding 단계에서 KYC/AML/제재 스크리닝을 수행한다. 본 프로젝트의 ERC-3643 재구성 가정에서는 Securitize가 Trusted Issuer로서 *sanctions-screening claim*을 발급하고, A-01은 (i) 그 claim의 존재·발급자·만료, (ii) 거래 지갑 주소의 SDN 등재 여부, (iii) 법인 매수인의 50% Rule 상태를 함께 확인한다. claim의 freshness(발급 시점이 *현행* 명단 기준인지)는 A-11과 연동된다 — 명단은 자주 갱신되므로 오래된 claim은 거절될 수 있다. + +**(5) A-01 밖 — BUIDL 맥락의 인접 경계.** + +| 사안 | 담당 | 비고 | +|------|------|------| +| 국적·관할(비-US person, 포괄 국가 제재) | A-02 | 명단 축이 아니라 관할 축 | +| 지갑→신원 해소(KYC) | A-04 | A-01 신원-측 스크리닝의 전제 | +| claim freshness·만료 | A-11 | 명단 갱신 대비 | +| 적격투자자(AI) | A-03 | 증권 자격, A-01과 독립 | +| qualified purchaser(QP) | A-13 | 펀드 자격, A-01과 독립 | +| 시세조종·자전(연관 지갑 휴리스틱) | F-02·A-12 | A-01의 결정론적 차단 너머 감시 영역 | + +### 3.12 ERC-3643 변환 총정리 — 근거별 claim·check 매핑 한 표로 + +§3.1~§3.10에 흩어진 ERC-3643 변환을 한곳에 모은 것이다. A-01은 *하이브리드*다 — 지갑-측은 코드가 직접 대조(온체인·결정론), 신원·50%-측은 off-chain 스크리닝 결과를 claim으로 확인. (표 안 enum 구분자 `·`는 코드 표기 `|`의 '중 택1'을 뜻한다.) + +| 근거 | ERC-3643 변환 | 간략 설명 | +|------|---------------|-----------| +| §3.2 §1702 | 모든 transfer에 sanctions gate 전역 적용; `parties`·`wallets` 전부 스크리닝 | 차단대상 거래 금지의 직접 구현 | +| §3.3 §1705 | `fail-closed` — 불확실 시 차단/보류 기본 | strict liability·penalty 비대칭의 구현 | +| §3.5 Ch. V §xxx.201 | `blockedStatus = SDN_MATCH · FIFTY_PCT_RULE · WALLET_MATCH` 중 하나라도 true → 거래 금지 | 프로그램-agnostic 차단 | +| §3.6 SDN List | `identityMatch`(off-chain fuzzy) · `walletMatch`(on-chain exact) | 신원·지갑 이중 대조 | +| §3.7 50% Rule | `lookThroughStatus = COMPLETED·PENDING·FAILED`; `aggregateBlockedOwnership ≥ 50%` | 법인 재귀 합산(A-09 hook 공유) | +| §3.8 VC Guidance | `walletMatch = (txWallet ∈ SDN_wallet_set)`; oracle 갱신 | 온체인 주소 exact match | +| §3.9 Part 501 | 차단 시 `report` 생성; 거절 코드에 해제 경로 힌트 | 보고·기록·오탐 해제 | + +claim 본체(신원-측)는 다음 골격을 갖는다 — `claim.topic = NOT_SANCTIONED`, `claim.screenedAgainst`(명단 버전/일자), `claim.screenedAt`, `claim.expiry`, `claim.issuer`(Trusted Issuer), `claim.signature`, `claim.entityLookThroughStatus`. A-01은 이 claim을 *직접 만들지 않고* 검증만 하며, 지갑-측 exact match를 *추가로* 코드가 직접 수행한다. + +## §4. ② 입력 사실 — 무엇을 받아 판정하는가 + +A-01은 거래 직전 다음 입력으로 판정한다. 핵심은 *양 당사자(buyer·seller) 모두* 와 *그 지갑* 을 본다는 점이다 — 자격 부품(A-03/A-13)이 buyer만 보는 것과 다르다. + +| 필드 | 유형 | 의미 | +|------|------|------| +| `buyerWallet` | address | 매수인 지갑 주소 (on-chain SDN 집합 대조) | +| `sellerWallet` | address | 매도인 지갑 주소 (on-chain SDN 집합 대조) | +| `buyerIdentity` | bytes32 | A-04가 해소한 매수인 신원 핸들 | +| `sellerIdentity` | bytes32 | A-04가 해소한 매도인 신원 핸들 | +| `sdnWalletSet` | merkle root | 온체인 SDN 지갑 집합 루트 (oracle 갱신) | +| `claim.topic` | enum | `NOT_SANCTIONED` (신원-측 스크리닝 결과 토픽) | +| `claim.screenedAgainst` | bytes32 | 대조한 명단 버전·일자 (현행성 판단) | +| `claim.screenedAt` | timestamp | 스크리닝 수행 시점 | +| `claim.expiry` | timestamp | claim 만료 시점 (A-11 연동) | +| `claim.issuer` | address | 발급 Trusted Issuer (예: Securitize) | +| `claim.signature` | bytes | Trusted Issuer 서명 | +| `claim.entityLookThroughStatus` | enum | 법인 50% Rule 합산 완료 여부 (`COMPLETED·PENDING·FAILED`) | +| `aggregateBlockedOwnership` | uint (bps) | 법인 당사자의 차단지분 합산 비율 (50% Rule) | +| `programTag` | bytes32 | (차단 시) 근거 프로그램·E.O. 메타 — 보고·해제용 | + +지갑-측(`buyerWallet`·`sellerWallet`·`sdnWalletSet`)은 코드가 *직접* 대조한다(온체인·결정론). 신원·법인-측(`claim.*`·`aggregateBlockedOwnership`)은 off-chain 스크리닝 결과를 claim으로 *확인만* 한다. 이 이중 입력 구조가 A-01의 하이브리드 성격이다(§8). + +## §5. ③ 판정 로직 — 어떻게 PASS/FAIL이 결정되는가 + +### 5.1 전체 흐름 + +A-01은 거래 직전 아래 순서로 확인한다. **양 당사자 중 하나라도 매칭되면 거래 전체가 FAIL**이다 (fail-closed). + +1. `buyerWallet` 또는 `sellerWallet`이 SDN 지갑 집합에 있는가? (on-chain exact match) +2. buyer·seller 신원에 `NOT_SANCTIONED` claim이 있는가? +3. claim 발급자가 Trusted Issuer인가? +4. claim 서명이 유효한가? +5. claim이 만료되지 않았는가? (A-11 연동) +6. claim의 `screenedAgainst`가 현행 명단 기준인가? (명단 갱신 대비) +7. 법인 당사자라면 50% Rule look-through가 완료됐고(`COMPLETED`) 합산 차단지분이 50% 미만인가? +8. 이름 유사도가 경계(오탐 가능)에 걸리는가? → 그렇다면 `REVIEW`로 보류 + +1~7 모두 통과(매칭 없음)하면 PASS. 하나라도 매칭/불확실이면 차단 또는 보류. + +### 5.2 Pseudocode + +```solidity +function check_A01( + address buyerWallet, + address sellerWallet, + bytes32 buyerIdentity, + bytes32 sellerIdentity, + bytes calldata context +) external view returns (bool passed, bytes32 reasonCode) { + + // (1) 온체인 지갑 exact match — 양 당사자 (VC Guidance / FAQ 563·646) + if (SDNWalletSet.contains(buyerWallet) || + SDNWalletSet.contains(sellerWallet)) { + return (false, FAIL_SDN_WALLET_MATCH); // §1702 차단 + } + + // (2)~(6) 신원-측 sanctions-screening claim — 양 당사자 + for (bytes32 id : [buyerIdentity, sellerIdentity]) { + Claim memory c = ONCHAINID.getClaim(id, Topic.NOT_SANCTIONED); + if (!c.exists) return (false, FAIL_NO_SANCTIONS_CLAIM); + if (!TrustedIssuerRegistry.contains(c.issuer)) + return (false, FAIL_UNTRUSTED_SANCTIONS_ISSUER); + if (!verifySignature(c)) return (false, FAIL_INVALID_SANCTIONS_SIGNATURE); + if (block.timestamp > c.expiry) return (false, FAIL_SANCTIONS_CLAIM_EXPIRED); + if (c.screenedAgainst != currentListVersion()) + return (false, FAIL_SANCTIONS_CLAIM_STALE_LIST); + + // (3) 신원 fuzzy match 경계 — 오탐 가능 → 보류(차단 아님) + if (c.identityMatchScore >= REVIEW_THRESHOLD && + c.identityMatchScore < BLOCK_THRESHOLD) + return (false, REVIEW_SANCTIONS_UNCERTAIN); + if (c.identityMatchScore >= BLOCK_THRESHOLD) + return (false, FAIL_SDN_IDENTITY_MATCH); + + // (7) 법인 당사자 — 50% Rule look-through (A-09 hook 공유) + if (c.isEntity) { + if (c.entityLookThroughStatus != COMPLETED) + return (false, FAIL_50PCT_LOOKTHROUGH_PENDING); + if (c.aggregateBlockedOwnership >= 5000) // 50.00% in bps + return (false, FAIL_50PCT_RULE); + } + } + + return (true, PASS); +} +``` + +## §6. ④ 거절·예외 처리 — 검사에 실패하면 어떻게 되는가 + +차단 사유 코드는 *운영 처리* 와 *해제 경로 힌트* 를 함께 지정해야 한다. §3.9에서 본 세 해제 경로 — Compliance Release(§501.806, 오탐) / delisting(§501.807, 실제 지정자 이의) / specific license(§501.801, 정당 사유) — 중 어디로 보낼지를 운영자에게 알린다. + +| Code | 언제 발생하나 | 처리 · 해제 경로 힌트 | +|------|---------------|------------------------| +| `FAIL_SDN_WALLET_MATCH` | 지갑이 SDN 집합에 등재 | 차단 + §501.603 보고 / 오탐이면 `COMPLIANCE_RELEASE` | +| `FAIL_SDN_IDENTITY_MATCH` | 신원이 SDN과 고신뢰 매칭 | 차단 + 보고 / 실제 지정자는 `DELISTING`, 오탐은 `COMPLIANCE_RELEASE` | +| `FAIL_50PCT_RULE` | 차단지분 합산 ≥ 50% | 차단 + 보고 / `COMPLIANCE_RELEASE`(합산 오류 시) | +| `FAIL_NO_SANCTIONS_CLAIM` | 스크리닝 claim 없음 | onboarding / 재스크리닝 안내 | +| `FAIL_UNTRUSTED_SANCTIONS_ISSUER` | 발급기관 미등록 | 운영자 확인 | +| `FAIL_INVALID_SANCTIONS_SIGNATURE` | claim 서명 검증 실패 | 위조 가능성, 차단 | +| `FAIL_SANCTIONS_CLAIM_EXPIRED` | claim 만료 | 재스크리닝 요청 (A-11) | +| `FAIL_SANCTIONS_CLAIM_STALE_LIST` | 구버전 명단 기준 claim | 재스크리닝 (명단 갱신 반영) | +| `FAIL_50PCT_LOOKTHROUGH_PENDING` | 법인 합산 미완료 | pending 처리 (A-09 대기) | +| `REVIEW_SANCTIONS_UNCERTAIN` | 이름 유사도 경계(오탐 가능) | 거래 보류 + manual review (Compliance) | + +오탐(mistaken identity)으로 차단된 정상 당사자는 §501.806 Compliance Release로 빠르게 해제하되, **해제는 차단한 당사자만 신청 가능**하다(§3.9). 따라서 거절 코드에 `programTag`와 차단 근거를 함께 기록해야 사후 해제·보고가 가능하다. + +## §7. ⑤ 테스트 케이스 — 스펙이 제대로 작동하는지 검증 + +아래 케이스가 모두 기대대로 동작해야 스펙이 완성이다. 지갑 매칭, 신원 fuzzy 매칭, 50% Rule 합산(프로그램 교차·간접), claim 현행성, 그리고 **제재가 증권 자격과 독립**임을 함께 검증한다. + +| 테스트 | 결과 | +|--------|------| +| 매수인 지갑이 SDN 집합에 등재 | `FAIL_SDN_WALLET_MATCH` | +| 매도인 지갑이 SDN 집합에 등재 (매수인 clean) | `FAIL_SDN_WALLET_MATCH` (양 당사자 검사) | +| 매수인 신원이 SDN 이름과 고신뢰 매칭 | `FAIL_SDN_IDENTITY_MATCH` | +| 매수인 신원이 SDN 이름과 부분 유사(경계) | `REVIEW_SANCTIONS_UNCERTAIN` | +| 법인 매수인, 단일 차단대상 60% 보유 | `FAIL_50PCT_RULE` | +| 법인 매수인, 서로 다른 프로그램 차단자 각 30% (합산 60%) | `FAIL_50PCT_RULE` (프로그램 교차 합산) | +| 법인 매수인, 차단대상 40% 보유 | PASS (50% 미만) | +| 법인 매수인, 간접 보유(차단자→중간법인 100%→대상 51%) | `FAIL_50PCT_RULE` (간접 합산) | +| 스크리닝 claim 없음 | `FAIL_NO_SANCTIONS_CLAIM` | +| 스크리닝 claim 만료 | `FAIL_SANCTIONS_CLAIM_EXPIRED` | +| claim의 `screenedAgainst`가 구버전 명단 | `FAIL_SANCTIONS_CLAIM_STALE_LIST` | +| 법인 매수인 look-through 미완료 | `FAIL_50PCT_LOOKTHROUGH_PENDING` | +| BUIDL 비-US person 매수인, QP(A-13) PASS이나 지갑 SDN 매칭 | `FAIL_SDN_WALLET_MATCH` (제재는 증권 자격과 독립) | +| A-03(AI)·A-13(QP) 모두 PASS이나 신원 SDN 매칭 | `FAIL_SDN_IDENTITY_MATCH` (독립 게이트) | +| 오탐으로 차단된 정상 당사자 → 해제 신청 | `FAIL_*` 후 §501.806 Compliance Release 경로 | +| 양 당사자·지갑·법인구조 모두 clean | PASS | + +## §8. (α) 검증 패턴 — A-01은 하이브리드다 + +A-13 양식의 §8 (α) 증명서 패턴 슬롯에 해당한다. A-01은 *단일 패턴이 아니라 두 패턴의 결합* 이라는 점이 특징이다. + +- **지갑-측 = Pattern A (결정론적 기계 판정).** `buyerWallet`·`sellerWallet`을 온체인 SDN 지갑 집합과 *직접 exact match* 한다. off-chain 증명서를 거치지 않고 코드가 즉시 판정한다(VC Guidance·FAQ 563/646). OFAC이 2018년부터 디지털 지갑 주소를 SDN 식별자로 포함했기에 가능하다. +- **신원·50%-측 = Pattern B (증명서).** 자연인 이름 대조와 법인 50% Rule 합산은 온체인에서 직접 수행할 수 없다(원자료가 off-chain). Trusted Issuer가 OFAC 명단·법인 소유구조를 off-chain에서 스크리닝하고 *signed claim* 을 발급하면, A-01은 그 claim의 존재·발급자·서명·만료·현행성만 확인한다. + +이 이중성의 함의: 지갑 집합은 oracle로 *온체인 동기화* 해야 하고(갱신 지연 = stale risk), 신원 claim은 *freshness 관리*(A-11)가 필요하다 — 명단이 자주 갱신되므로 오래된 claim은 거절될 수 있다. 단순 Pattern A 부품(예: 순수 산술 판정)이나 단순 Pattern B 부품(예: A-03 자격 claim)과 달리, A-01은 두 신뢰 모델을 동시에 운용한다. + +## §9. (β) Cross-Element·Cross-Recipe Coordination — 혼자 움직이지 않는다 + +A-01은 전역 게이트이지만(§10), 그 안에서도 다른 부품에 의존하고 다른 부품과 경계를 나눈다. 아래는 직접 책임지는 것과 넘기는 것의 정리다. + +**A-01이 직접 책임지는 것** + +- 매수인·매도인 지갑이 SDN 지갑 집합에 있는지 (on-chain exact match) +- 매수인·매도인 신원에 `NOT_SANCTIONED` claim이 있는지 +- claim이 신뢰기관 발급·서명 유효·미만료인지 +- claim이 *현행* 명단 기준인지 (명단 갱신 대비) +- 법인 당사자의 50% Rule look-through 완료·합산 미만 50%인지 +- 차단 시 거절 코드에 보고(§501.603/.604)·해제 경로 힌트 부착 + +**A-01 밖의 문제** + +- 국적·관할 (비-US person, 포괄 국가 제재) → **A-02** (명단 축이 아니라 *관할 축*) +- 지갑 → 신원 해소 (KYC) → **A-04** (A-01 신원-측 스크리닝의 전제) +- claim freshness·만료 정책 → **A-11** (명단은 증권 credential보다 자주 갱신) +- 법인 재귀 look-through 엔진 → **A-09** (50% Rule이 A-09 재귀 hook 공유 — 단 명단이 다름) +- 적격투자자 (AI) → **A-03** (증권 자격, A-01과 독립) +- qualified purchaser (QP) → **A-13** (펀드 자격, A-01과 독립) +- 시세조종·자전 (연관 지갑 휴리스틱) → **F-02·A-12** (A-01의 결정론적 차단 *너머* 감시 영역) +- 이 토큰이 securities인지, Form D·bad actor 등 → 증권 Element들 (별개 법체계) + +**두 경계가 특히 중요하다.** + +- **A-01 ↔ A-02 (명단 축 vs 관할 축).** A-01은 *특정인이 명단에 있는가* 를 본다. A-02는 *거래 상대가 포괄 제재 관할(예: 특정 국가)에 속하는가* 를 본다. 비-US person이 A-02에서 걸리지 않아도 A-01에서 SDN일 수 있고, 그 역도 성립한다. 둘은 보완적이며 **둘 다 통과해야 한다**. +- **A-01 ↔ A-09 (재귀 메커니즘 공유, 명단은 별개).** 50% Rule 합산은 A-09의 재귀 look-through 엔진을 *공유* 한다. 그러나 A-09(증권)는 equity owner의 *적격성* 을 재귀 평가하고, A-01은 owner의 *차단 여부* 를 재귀 합산한다 — 같은 엔진, 다른 명단·다른 판정. 구현 시 엔진은 재사용하되 판정 대상(적격 vs 차단)을 분리한다. + +## §10. ⭐ 아키텍처 노트 — OD-CI-5: A-01의 분류 결정 + +> **결정: A-01은 독립적 거래-수준 strict-liability 게이트다. Reg D recipe의 구성요소가 아니다.** + +### 쟁점 (OD-CI-5) + +A-01을 (a) Reg D 발행 recipe(R1)의 한 Element로 부착할 것인가, 아니면 (b) 모든 recipe 위에서 독립적으로 작동하는 *전역 게이트* 로 둘 것인가. 본 문서는 **(b)** 를 권고한다. + +### 근거 + +**① 법체계가 다르다.** 제재법은 IEEPA(Title 50, 50 U.S.C. §§1701–1708)와 OFAC 규정(Title 31 CFR Chapter V)이다. 증권법(Title 15, 17 C.F.R.)과 *완전히 다른 축* 이다. A-01을 Reg D recipe에 편입하면 두 법체계를 혼동하는 범주 오류가 된다. Reg D 면제가 충족돼도 제재 의무는 독립적으로 살아 있고, Reg D를 *쓰지 않는* 거래에서도 제재 게이트는 그대로 적용된다. + +**② Strict liability + 보편 적용.** §1705(b) 민사책임은 *고의 불요*(strict liability)다. 그리고 미국 관할의 *모든* 거래에 증권 프레임워크와 무관하게 적용된다. 발행(R1·506(c))뿐 아니라 재판매(R2·Rule 144), 역외(Reg S), 심지어 recipe를 거치지 않는 직접 transfer에서도 제재 게이트는 켜져야 한다. 따라서 특정 recipe에 종속시키는 설계는 *법적으로 부정확* 하다. + +**③ 결과 비대칭.** 단일 증권 요건 미충족은 해당 거래·토큰 차원의 문제다. 그러나 제재 위반은 운영자·프로토콜 *전체* 의 형사·민사 책임으로 번진다 — §1705 민사 최대 $377,700 또는 거래가치의 2배 중 큰 금액(2025년 기준), 형사 최대 $1M·20년. 이 systemic risk가 fail-closed 설계를 강제하며, 게이트의 위상도 그에 맞춰 *최상위* 여야 한다. + +**④ 아키텍처 청결성.** A-01을 Operator/Router가 recipe 해소 *이전에* 실행하는 전역 게이트로 두면, 모든 거래가 recipe와 무관하게 동일한 제재 차단을 통과한다. recipe마다 중복 부착하는 것보다 *단일 강제 지점* 이 깔끔하고, recipe 정의 누락이 곧 제재 게이트 누락으로 이어지는 치명적 취약점을 원천 차단한다. + +### 구현 함의 + +- **Manifest.** A-01을 recipe별 Element 목록에 넣지 않는다. 전역 pre-flight gate로 선언한다 — 예: `manifest.globalGates = [A-01, A-02]`. +- **Operator/Router.** 거래 인입 → 전역 게이트(A-01·A-02) 평가 → 통과 시에만 recipe 해소(R1/R2/R3…) 진입. 게이트 실패 시 recipe는 평가되지 않는다. +- **Recipe 표 표기.** R1●·R2●·R3● 표에는 A-01을 *부착(attach)* 이 아니라 *전제(precondition)* 로 명시한다 — "모든 recipe에 A-01이 항상 선행 적용됨". + +### 대안과 그 단점 ((b)를 택하지 않았다면) + +A-01을 각 recipe에 ● 필수로 *중복 부착* 하는 방식. 단점: (i) recipe 정의에서 누락되면 제재 게이트가 통째로 빠지는 치명적 취약점; (ii) recipe를 거치지 않는 거래 경로(직접 transfer 등)가 미보호; (iii) 동일 로직이 여러 recipe에 흩어져 갱신(명단·임계)이 비일관해질 위험. → 이 셋이 **(b) 독립 게이트** 분류를 결정적으로 지지한다. + +## §12. Open Issues — 변호사·엔지니어 follow-up 대상 + +본 부품의 스펙이 완전해지려면 풀어야 할 질문들이다. + +| # | 질문 (무엇을 결정해야 하나) | 왜 필요한가 | Priority | 해소 경로 (권고) | +|---|------------------------------|--------------|----------|------------------| +| 1 | SDN 지갑 집합의 온체인 동기화 모델 — oracle 신뢰·갱신 주기·정족수 | 지갑 exact match의 정확성·적시성 직결. stale 집합 = 누락 차단 위험 | 즉시 | Decipher + oracle 설계 (§8) | +| 2 | 이름 fuzzy match 임계·오탐 정책 — `REVIEW`/`BLOCK` 경계, false positive 처리 SLA | 과소 차단(법적 위험)과 과다 차단(UX·정당거래 방해)의 균형 | 즉시 | 변호사 + Compliance 정책 (§5·§6) | +| 3 | 50% Rule look-through 재귀 깊이 — A-09 엔진 공유 시 몇 단계, partial·프로그램 교차 합산 | 미정 시 미작동/무한 복잡도. 간접·합산 케이스 처리 직결 | 높음 | 변호사 + A-09 (§3.7·§9) | +| 4 | sanctions claim freshness 윈도 — 명단 갱신 주기 대비 만료 기간 | 명단은 증권 credential보다 *자주* 갱신 → 짧은 윈도 필요. A-11 조율 | 높음 | Decipher + A-11 (§3.12·§8) | +| 5 | on-chain vs off-chain SDN 데이터 분할 — 지갑은 온체인, 이름·법인구조는 off-chain | 하이브리드 경계의 운영 정의. oracle 지연·claim 신뢰 모델 | 높음 | Decipher + Trusted Issuer (§8) | +| 6 | 차단 거래의 온체인 처리 방식 — revert vs hold-and-report | §501.603/.604 보고 자동화와 직결. 블록 후 보고 vs 즉시 revert | 중간 | Decipher + 변호사 (§3.9·§6) | + +--- + +— 이하 부록 A~D는 A-01 고유 내용으로, A-13 양식엔 대응 슬롯이 없어 보존한다. — + +## 부록 A. Authority Verification Table — Official URLs Only + +| Issue | Correct Authority | Direct/Supporting | A-01 반영 | Official URL | +|-------|-------------------|-------------------|-----------|--------------| +| 국가비상사태 선포 권한 | IEEPA §202, 50 U.S.C. §1701 | Supporting | 차단 권한의 전제 | uscode.house.gov | +| 차단·거래금지 권한 | IEEPA §203, 50 U.S.C. §1702 | Direct | 거래 차단의 직접 근거 | uscode.house.gov | +| 민사 strict liability·형사 벌칙 | IEEPA §206, 50 U.S.C. §1705 | Direct | fail-closed 설계 근거 | uscode.house.gov | +| TWEA (legacy·Cuba) | 50 U.S.C. §§4301–4341 (벌칙 §4315) | Supporting | IEEPA 전신, 일부 프로그램 | uscode.house.gov | +| OFAC 프로그램 금지·벌칙 | 31 C.F.R. Ch. V Parts 500–599 (§xxx.201, §xxx.701) | Direct | 프로그램-agnostic 차단 | ecfr.gov | +| SDN List | Appendix A to 31 C.F.R. Ch. V | Direct | identity·wallet 대조 | ecfr.gov (목록 본체: treasury.gov/sdn) | +| 50% Rule | OFAC Revised Guidance (2014-08-13); FAQ 398–402 | Direct | aggregateBlockedOwnership | ofac.treasury.gov | +| 가상자산 가이드 | OFAC Sanctions Compliance Guidance for the Virtual Currency Industry (2021-10-15); FAQ 559/560/563/646 | Direct | walletMatch on-chain exact | ofac.treasury.gov | +| 기록·보고·차단해제 | 31 C.F.R. Part 501 (§501.601/.603/.604/.806/.807/.801) | Direct/Supporting | report 생성·해제 경로 | ecfr.gov | +| Enforcement Guidelines | 31 C.F.R. Part 501 App. A (2008-09-08) | Supporting | strict-liability·VSD 완화 | ecfr.gov | +| 지정 메커니즘 (예) | E.O. 13224 (2001-09-24) | Supporting | programTag 메타 | govinfo.gov | +| 민사 벌칙 금액 갱신 | 90 FR 3690 (2025-01-15); 31 C.F.R. §501 | Supporting | $377,700 (2025) | govinfo.gov / ecfr.gov | + +## 부록 B. BUIDL 레퍼런스 케이스 — 제재 측면·A-01 실행사항 + +본 프로젝트가 A-01을 설계·검증할 때 기준으로 삼는 실제 토큰은 BlackRock BUIDL이다. A-01은 *모든 거래에 공용* 인 전역 게이트라 BUIDL 고유 협소화가 거의 없으므로(§3.11), 이 절은 제재 측면과 실행 체크리스트만 간결히 정리한다. + +**B.1 BUIDL 개요·제재 측면.** BUIDL(BlackRock USD Institutional Digital Liquidity Fund)은 Rule 506(c) + ICA §3(c)(7)로 발행되는 BVI 역외 펀드이며, transfer agent·tokenization·placement agent가 Securitize다. 실제 BUIDL은 Securitize가 onboarding 단계에서 KYC/AML/제재 스크리닝을 수행한다. **핵심: 제재는 증권 자격과 독립적으로 적용된다** — 비-US person(역외 투자자)이라도 SDN/차단대상일 수 있으므로 A-01은 그대로 켜진다. + +**B.2 A-01의 BUIDL 실행 체크리스트.** + +- **A. claim 스키마** — `sanctions-screening claim`(topic=`NOT_SANCTIONED`, `screenedAgainst`, `screenedAt`, `expiry`, issuer=Securitize, `entityLookThroughStatus`)을 정의한다. +- **B. 전역 게이트** — A-01은 BUIDL recipe(R1/R3)에 *부착하지 않고* 전역 pre-flight gate로 둔다(§10). 발행·재판매·Reg S 모든 경로에서 켜진다. +- **C. 지갑 대조** — SDN 지갑 집합을 oracle로 온체인 동기화하고, 매수인·매도인 *양 당사자* 지갑을 대조한다. +- **D. 50% Rule** — 법인·펀드 매수인의 차단지분 합산 look-through를 확인한다(A-09 엔진 공유). +- **E. 비-US person 주의** — 역외 투자자라도 SDN일 수 있다. A-02(관할)와 A-01(명단)은 별개 축이며, A-01은 면제되지 않는다. +- **F. freshness** — A-11과 연동해 명단 갱신 대비 claim 만료를 강제한다(명단은 증권 credential보다 자주 갱신). + +## 부록 C. 안전한 표현 / 위험한 표현 (데모 가이드) + +**써도 되는 표현** + +- A-01은 거래 양 당사자와 그 지갑을 OFAC SDN/차단 명단에 대조하는 pre-trade 전역 게이트입니다. +- 제재 스크리닝은 증권 자격(AI·QP)과 독립적으로 적용됩니다 — 비-US person이라도 차단대상일 수 있습니다. +- IEEPA §1705 민사책임은 strict liability(고의 불요)이므로 시스템은 fail-closed로 설계됩니다. +- 50% Rule상 차단대상이 합산 50% 이상 소유한 법인은 명단 등재 없이도 차단대상입니다. +- OFAC은 2018년부터 디지털 지갑 주소를 SDN 식별자로 포함하므로 지갑 주소 대조가 가능합니다. +- A-01은 모든 recipe 위에서 작동하는 독립 전역 게이트입니다(OD-CI-5 결정). + +**피해야 할 표현** + +- A-01을 통과하면 증권 거래도 적법하다. → A-01은 제재만 봅니다. 증권 자격은 A-03(AI)·A-13(QP)이며, *별개 법체계* 입니다. +- 비-US person·역외 투자자는 제재 스크리닝이 면제된다. → 아닙니다. 국적·관할(A-02)과 명단(A-01)은 별개 축이며 비-US person도 SDN일 수 있습니다. +- SDN 명단에 없으면 차단대상이 아니다. → 50% Rule상 명단 미등재 법인도 차단대상일 수 있습니다. +- 제재 위반은 해당 거래만 무효화한다. → strict liability이며 운영자·프로토콜 전체의 형사·민사 책임으로 확대됩니다. +- A-01은 Reg D recipe의 일부다. → 아닙니다. A-01은 모든 recipe 위의 독립 전역 게이트입니다(§10). +- 고의가 없으면 제재 위반 책임이 없다. → 민사책임은 strict liability입니다. 고의는 형사책임·벌칙 산정의 factor일 뿐입니다. +- 이름이 비슷하면 무조건 차단한다. → fuzzy match는 오탐을 낳으므로 경계 사례는 REVIEW로 보내고, 오탐 차단은 §501.806 Compliance Release로 해제합니다. + +## 부록 D. 팀 문서 결론 문구 + +A-01 Sanctions Screening Element는 모든 토큰·모든 거래에 공통으로 적용되는 거래-수준 strict-liability pre-trade 전역 게이트로, 거래 양 당사자(buyer·seller)의 신원과 지갑 주소를 OFAC SDN/차단 명단에 대조하고, 법인 당사자의 경우 50% Rule에 따른 차단지분 합산 look-through를 확인한다. 그 법적 근거는 증권법(Title 15·17 C.F.R.)이 아니라 IEEPA(50 U.S.C. §§1701–1708)와 OFAC 규정(31 C.F.R. Chapter V)이라는 별개의 법체계이며, §1705(b) 민사책임이 strict liability라는 점이 시스템을 fail-closed로 설계하게 한다. A-01은 하이브리드 검증이다 — 지갑 주소는 on-chain에서 SDN 지갑 집합과 직접 exact match(Pattern A, 결정론)하고, 신원·법인구조는 off-chain 스크리닝 결과를 Trusted Issuer 발급 signed claim으로 확인(Pattern B, 증명서)한다. 본 문서는 OD-CI-5 쟁점에 대해 A-01을 Reg D recipe의 구성요소가 아니라 모든 recipe 위에서 독립적으로 작동하는 전역 게이트로 분류할 것을 권고한다(§10): 법체계가 다르고, strict liability·보편 적용·결과 비대칭·아키텍처 청결성이 모두 독립 게이트 분류를 지지하기 때문이다. 따라서 Manifest는 A-01을 recipe별 Element 목록이 아니라 전역 pre-flight gate로 선언하고, Operator/Router가 recipe 해소 이전에 이를 평가하여 어떤 거래 경로(발행·재판매·Reg S·직접 transfer)도 제재 차단을 우회하지 못하게 한다. A-01의 직접 PASS/FAIL 로직은 지갑 SDN 매칭 여부, sanctions-screening claim의 존재·발급자 신뢰성·서명 유효성·만료·현행 명단 기준 여부, 그리고 법인 당사자의 50% Rule look-through 완료·합산 미만 50% 여부에 한정된다. + +문서 끝. \ No newline at end of file diff --git a/docs/compliance/elements/A-02.md b/docs/compliance/elements/A-02.md new file mode 100644 index 0000000..0c2fb8f --- /dev/null +++ b/docs/compliance/elements/A-02.md @@ -0,0 +1,888 @@ +# ELE.A-02_국가거주제한 + +# A-02 국가·거주 제한 (매수인 측) / Buyer-side Jurisdiction & Residence Gate — 부품 심층 인수인계 문서 (Walkthrough) + +**이 문서는 무엇인가.** Decipher RWA DEX의 컴플라이언스 부품 중 하나인 국가·거주 제한 부품(내부 식별자 A-02)을, 미국 증권규제와 제재법을 처음 보는 사람도 이해할 수 있도록 풀어 쓴 인수인계 문서다. 개발자·법무팀·외부 자문 변호사·학회원이 각자 작업의 base로 그대로 쓸 수 있도록 — ① 이 규제가 어디서 왔고 왜 존재하는지, ② 어떤 사실을 입력받아 ③ 어떤 로직으로 판정하고 ④ 실패하면 어떻게 처리하며 ⑤ 어떤 테스트로 검증하는지를, 기술 요소마다 풀이를 함께 붙여 설명한다. + +**자체완결 원칙.** 이 문서는 다른 내부 문서를 열지 않아도 단독으로 이해되도록 작성했다. 인용은 미국 연방법·연방규칙·SEC·재무부(OFAC)·판례 등 외부 공식 자료만 사용한다. + +**출처 기준 (Version 1.0, 2026-07-22).** 본 부품의 인용은 다음 1차 출처를 기준으로 한다 — 15 U.S.C. §77e·§77d, 50 U.S.C. §1702·§1705·§4305는 uscode.house.gov 현행본(§77e는 2026-06-14 기준, §1705는 2026-05-22 기준), 17 CFR §230.901~§230.905(Regulation S)·§240.3b-4, 31 CFR §560.204(Iranian Transactions and Sanctions Regulations)은 eCFR 현행본(Title 17은 2026-07-14 최신, Title 31은 현행), 관련 Executive Order(E.O. 13685·14065·14312)와 OFAC 프로그램 구성은 federalregister.gov·ofac.treasury.gov, 판례는 govinfo.gov·supremecourt.gov다. 제정법 출처는 uscode.house.gov로 통일했으며, govinfo.gov/link/uscode/... 딥링크도 동일한 1차 출처다. + +**테스트 토큰 전제 (중요).** 본 문서는 실제 BlackRock BUIDL의 발행 표준, transfer architecture, 또는 현재 운영 조건을 단정하지 않는다. 본 프로젝트는 BUIDL-like Rule 506(c) + ICA §3(c)(7) private fund interest를 ERC-3643 테스트 토큰으로 모델링하여, 관할·거주 기반 pre-trade transfer restriction을 검증하는 것이다. 이하 'BUIDL'·'ERC-3643' 관련 서술은 모두 이 모델링 전제 하의 것이다. + +**부등호 표기 규약.** 본 문서는 초과(>)와 이상(≥)을 엄격히 구분한다. 원문이 "fewer than"이면 미만(<), "not less than"이면 이상(≥), "more than"·"exceeding"이면 초과(>)로 옮기고, 경계값의 포함 여부를 판정 매트릭스(§5.3)에서 명시한다. + +## §1. 규제 맥락 — 이 부품이 다루는 규제는 어디서 왔는가 (Context First) + +**왜 맥락부터 읽어야 하나.** 이 부품은 한 줄로 말하면 "이 매수인의 관할(국적·거주, 법인이면 설립지)이 이 거래를 해도 되는 관할인가"를 거래 직전에 판정한다. 그런데 "해도 되는 관할"이라는 기준은 서로 다른 두 법체계에서 동시에 나온다 — 하나는 증권법(어디 사람에게 팔 자격이 있는가), 다른 하나는 제재법(어디와 거래하면 그 자체로 위법인가)이다. 이 둘은 목적도 근거법도 집행기관도 다르다. 그래서 큰 그림(미국 증권규제의 국경 축 → 제재법이라는 별도의 축 → 두 축이 A-02에서 만나는 방식 → 우리 시스템에서의 의미 → 한국법과의 비교)을 먼저 깐다. + +### 1.1 미국 규제의 두 국경 축, 그리고 A-02의 자리 + +미국에서 "외국인에게, 또는 외국을 향해 증권 거래를 태워도 되는가"라는 질문은 한 법이 아니라 두 개의 독립한 법체계가 각각 답한다. + +- **축 1 — 증권법의 속지주의(Regulation S / Reg D 경계).** 1933년 증권법 §5는 등록 없이는 증권을 팔지 못하게 하는 것이 기본값이다. 이 §5가 "미국 안"에서만 작동한다는 것이 Regulation S의 출발점이다(§230.901). 그래서 미국인 매수인에게는 미국 국내 면제(Reg D 506(c))가, 미국 밖 매수인에게는 역외 면제(Reg S)가 각각 적용된다. 결국 "이 매수인이 U.S. person인가"(§230.902(k))가 어느 면제 lane을 타는지를 가르는 분기점이 된다. 이것이 A-02가 판정하는 첫 번째 관할이다. + +- **축 2 — 제재법의 관할 금지(OFAC 포괄제재).** 증권법과 무관하게, 미국은 특정 국가·지역과의 거의 모든 거래를 그 자체로 금지한다. 근거는 국제긴급경제권한법(IEEPA, 50 U.S.C. §1701 이하)과 대적성국교역법(TWEA, Cuba)이며, 재무부 해외자산통제국(OFAC)이 이를 프로그램으로 집행한다. 이 금지는 "누가 명단에 올랐는가"가 아니라 "어느 관할에 속한 사람·재산인가"로 걸린다. 이것이 A-02가 판정하는 두 번째 관할이다. + +**쉽게 말하면.** 증권법 축은 "이 손님에게 이 물건을 팔 자격이 우리에게 있는가"를 묻고, 제재법 축은 "이 손님과 거래하는 것 자체가 국가가 금지한 일인가"를 묻는다. 앞은 면제(자격)의 문제, 뒤는 금지(위법)의 문제다. A-02는 이 두 질문을 한 관문에서 함께 통과시켜야 스왑을 허가한다. + +### 1.2 왜 "국가"가 두 번 문제되는가 — 두 축의 성격 차이 + +두 축은 결과적으로 모두 "관할"을 보지만, 성격이 정반대다. 이 차이를 놓치면 한쪽 논리로 다른 쪽을 잘못 처리한다. + +| 구분 | 축 1 증권법(Reg S/Reg D) | 축 2 제재법(OFAC) | +| --- | --- | --- | +| 묻는 것 | "팔 자격이 있는가"(면제 성립) | "거래가 금지되는가"(위법 여부) | +| 근거법 | 1933 Securities Act §5, Reg D, Reg S | IEEPA §1702·§1705, TWEA §5(b) | +| 집행기관 | SEC | 재무부 OFAC | +| 실패의 성격 | 면제 상실 → 미등록 판매 책임 | IEEPA 위반 → 민·형사 제재 | +| 판정 축 | U.S. person 여부(902(k)) | 포괄제재 관할 소속 여부 | +| 되돌릴 수 있나 | 다른 lane(Reg S) 개방으로 가능 | 원칙적으로 불가(hard block) | +| Phase 1 처리 | 미국인만 허용(Reg S 유보) | 포괄제재역 전면 차단 | + +**핵심.** 제재법 축은 값이 "차단"이면 절대 우회가 없다 — 갱신·재KYC로 풀리지 않는다. 반면 증권법 축의 "비미국인 차단"은 자격 미달이 아니라 lane 미개방의 결과라서, 나중에 Reg S 경로를 열면 통과할 수 있는 상태다. A-02는 이 둘을 서로 다른 실패 코드로 분리한다(§6.2). + +### 1.3 A-01(제재 명단)과 A-02(국가·관할)의 분업 — 명단 기반 vs 관할 기반 + +같은 "제재"라도 A-01과 A-02는 소관이 다르다. 이 경계가 흐려지면 한쪽이 다른 쪽을 중복 구현하거나, 둘 다 놓치는 구멍이 생긴다. + +- **A-01 = 명단 기반(list-based).** OFAC의 Specially Designated Nationals and Blocked Persons List(SDN List)에 특정 사람·법인·지갑이 올랐는지를 이름·식별자로 대조한다. SDN이 50% 이상 소유한 법인을 SDN으로 간주하는 이른바 "50% Rule"도 A-01 소관이다. 요컨대 "이 특정 주체가 차단 대상인가"다. + +- **A-02 = 관할 기반(jurisdiction-based).** 특정 국가·지역 전체를 상대로 한 포괄제재(embargo)에 매수인의 거주·국적·(법인)설립지가 걸리는지, 그리고 증권법상 판매가 허용된 관할인지를 본다. 명단에 이름이 없어도 관할만으로 차단된다 — 예컨대 SDN이 아닌 평범한 개인이라도 이란에 거주하면 A-02에서 걸린다. + +**쉽게 말하면.** A-01은 "지명수배 명단"을 대조하고, A-02는 "출입금지 구역 지도"를 대조한다. 명단에 없어도 금지구역에서 왔으면 A-02가 막고, 허용구역에서 왔어도 명단에 있으면 A-01이 막는다. 둘은 같은 거래에 병렬로(AND) 작동하며 서로를 대체하지 않는다(§9.1 경계). + +### 1.4 Decipher 시스템에서 왜 치명적인가 — 이중의 Existential Risk + +A-02가 잘못 판정하면 두 법체계 각각에서 시스템 전체를 위협하는 사고가 난다. + +- **증권법 측 위험.** 비미국인에게 Reg D 면제로만 팔면(즉 Reg S 요건을 안 갖춘 채 역외 매수인에게 팔면), 그 판매는 면제 근거를 잃어 §5 위반(미등록 판매)이 된다. 발행 전체의 면제 신뢰가 흔들리고 매수인은 rescission(원상회복) 소권을 가질 수 있다. + +- **제재법 측 위험.** 포괄제재역 거주자에게 서비스를 제공하거나 거래를 체결시키면 IEEPA §1705 위반이다. 민사 제재는 위반 1건당 \$250,000 또는 거래금액의 2배 중 큰 금액, 고의(willful) 위반은 형사로 \$1,000,000 이하 벌금과 자연인 20년 이하 징역까지 갈 수 있다(§3.10). 이것은 부품 하나가 막지 못하면 회사와 개인 모두에게 형사 리스크가 되는 종류의 실패다. + +**쉽게 말하면.** 증권법 실수는 "면제가 깨져 소송당함", 제재법 실수는 "형사처벌 대상이 됨"이다. A-02는 이 두 재앙의 공동 방벽이며, 그래서 값싼 자동 게이트로 만들되 어느 쪽도 통과 후 사고가 나면 안 되는 부품이다. + +### 1.5 Phase 1 스코프 — 미국인 한정, Reg S 역외는 유보(deferred) + +본 프로젝트의 Phase 1은 미국 적격투자자(Reg D 506(c)) 대상만 연다. 역외(Reg S) 판매 — U.S. person이 아닌 매수인에게 offshore transaction으로 파는 경로 — 는 나중에 열 때 별도로 검토한다(§12 Open Issue). 따라서 Phase 1의 증권법 allowlist는 사실상 "미국"이며, A-02의 축 1 판정은 "U.S. person이면 통과, 아니면 유보 차단"으로 단순화된다. 이 유보는 자격 미달(제재)이 아니라 lane 미개방이므로, 별도 실패 코드(FAIL_JURISDICTION_NOT_ALLOWED)로 표시해 Reg S 개방 시 자연스럽게 확장되도록 한다. + +### 1.6 한국법 비교 (참고) + +한국 변호사 독자를 위한 대응 관계만 짚는다(현재 타깃은 미국법이므로 한국법은 비활성). + +- **증권법 축.** 자본시장법상 국경 간(cross-border) 증권 모집·매출 규제와, 외국인 투자자 대상 사모 특례가 미국 Reg S/Reg D 경계에 대응한다. 다만 미국의 "U.S. person" 개념처럼 정밀한 역외 안전항 정의는 없고, 실무는 개별 판단에 가깝다. + +- **제재법 축.** 미국 OFAC에 정확히 대응하는 단일 기관·법은 없고, 외국환거래법(지급·거래 허가·신고)과 대외무역법·전략물자수출입고시(전략물자·상황허가), 그리고 UN 안보리 결의 이행을 위한 개별 고시가 기능을 분담한다. 미국 IEEPA처럼 "국가 전체와의 거의 모든 거래 금지 + 강력한 역외적용 + 형사책임"을 한 축으로 묶은 구조는 아니다. 향후 한국 진출 시 본 부품의 관할 정책(파라미터)에 한국법 레이어를 추가하는 방식으로 확장한다. + +## §2. 메타 정보 (Internal Identifier Box) + +아래는 Decipher 내부 PM 규약상의 식별자·분류값을 한곳에 모은 박스다. 본문에서는 이 코드들을 단독으로 쓰지 않고, "본 부품"·"국가·거주 제한 부품" 같은 자연어로 부른다. 코드는 시스템 추적용으로만 여기 둔다. + +| 항목 | 값 | 한 줄 풀이 | +| --- | --- | --- | +| 부품 이름 | 국가·거주 제한 (Jurisdiction & Residence Gate) | "이 매수인의 관할에서 거래해도 되는가"를 판정 | +| 검사 대상 | ① 증권법상 허용 관할(Phase 1 = U.S. person, §230.902(k)) · ② 제재법상 금지 관할(OFAC 포괄제재: Cuba·Iran·North Korea·Crimea/DNR/LNR) | 거주·국적·(법인)설립지가 허용집합 안이고 금지집합 밖인가 | +| Internal ID | A-02 (Decipher PM 규약) | 신원·자격 카테고리 2번 부품 | +| 검증 방식 | 기계 판정형(패턴 A) — 결정론적 집합 판정. 단 입력(거주·국적)은 Trusted Issuer(Sumsub) claim에 의존(하이브리드) | 값 자체는 기계가 집합 대조로 판정, 그 값의 사실 판단은 신뢰기관이 off-chain에서 수행 | +| Timing | pre-trade(거래 체결 직전) | 거래가 일어나기 전에 막는다 | +| Stateful 여부 | STATELESS (Element 한정) | Element 자체는 매수 시점 claim 스냅샷과 그 시점의 제재·정책 파라미터만 본다. 다만 포괄제재 목록과 관할 정책은 시간에 따라 변하는 파라미터라 Operator layer가 별도 관리·갱신한다 | +| 주 활성화 Recipe | R1(Reg D 506(c) Issuance) · R2(§4(a)(7)/Rule 144 Resale) · R3(ICA §3(c)(7) Fund) | 세 레시피 모두에 필수 부착(고재사용 부품). R4(행위감시)에는 미부착 | +| Cumulative Recipe | 위 R1·R2·R3는 한 거래에서 중첩 활성될 수 있음 | A-01·B-01과 함께 사실상 전(全) 거래 공통 검사 | +| Cascade Element | A-01(SDN 명단) · A-04(신원 중복) · A-09(법인 look-through, 법인 매수인 시) · A-11(claim 신선도) | 병렬 AND(A-01·A-04) 및 조건부 하위 호출(A-09) | +| Downstream 의존 | D-01(§12(g)/FPI 미국 거주 record holder 카운트)이 A-02의 거주 판정을 입력으로 소비 | A-02는 거주 claim의 출처, D-01은 그 소비처 | +| 성숙도 | 완료(Spec Sheet 단계) · 본 walkthrough 최초 작성 | 데모 필수, 후속 보완은 §12 | +| 파일·위치 | A-02_국가거주제한.md · 산출물/elements/ | 산출물 경로 | + +## §3. ① 법적 근거 (Layer 1 → 2 → 3) + +**읽는 법.** 법적 근거는 세 겹이다 — **Layer 1**(조문)은 의회가 만든 법률 텍스트(statute), **Layer 2**(규칙)는 행정청(SEC·OFAC)이 그것을 실무 수준으로 구체화한 연방규칙(rule) 및 대통령 명령(Executive Order), **Layer 3**(해석)은 판례·발행문서가 모호한 부분을 메운 해석이다. 아래 §3.0.2 표의 종류 칸이 그대로 Layer에 대응한다 — Statute = Layer 1, SEC/OFAC Rule·E.O. = Layer 2, Case = Layer 3. 본 절은 두 축(증권법 → 제재법)의 논리 흐름 순서로 배열되며 각 항목이 어느 Layer인지는 표의 종류 칸으로 확인한다. + +### 3.0 법조문 관계 플로우차트 (개발자용) + +아래 그림은 두 축의 조문·규칙이 관할 판정에서 어떻게 연결되는지를 하나의 큰 흐름으로 정리한 것이다 — 거래 발생 → (축 1) §5 등록 원칙에서 Reg D 미국 lane과 Reg S 역외 lane으로 분기, U.S. person 판정(902(k)) → (축 2) IEEPA 권한·처벌에서 OFAC 포괄제재 프로그램, 관할 기반 금지(560.204 등)로 하강 → 두 축이 "allowedJurisdiction ∧ ¬prohibitedJurisdiction" 게이트에서 합류 → PASS/FAIL. 각 조항의 상세는 §3.1~§3.16. + +![A-02 fig30 법조문·논리 흐름](A-02_fig30.png) + +**범례.** + +- 파랑 = 핵심(Direct: §5·§230.902(k)·IEEPA §1702/§1705·포괄제재 프로그램) + +- 회색 = 분기·판정 노드 + +- 초록 = PASS + +- 빨강 = FAIL(제재역 hard block / 非허용 관할) + +- 주황 = 유보·참조(Reg S 역외 lane Phase 1 유보) + +- 점선 회색 상자 = 다른 부품 소관(A-01 SDN · D-01 카운트 · Rule 3b-4(c))으로 A-02와 병렬·연동 + +### 3.0.1 실제 BUIDL은 어떻게 적용되나 + +§3.0이 일반 조문 흐름이라면, 이 절은 BUIDL-like 자산에 A-02가 어떻게 걸리는지를 보여준다. **(재확인) 본 서술은 실제 BlackRock BUIDL의 발행 표준·현재 운영 조건을 단정하지 않는다 — BUIDL-like 자산을 ERC-3643 테스트 토큰으로 모델링한 것이다.** + +실제 BUIDL은 미국 밖 투자자에게는 Reg S로, BVI 역외 펀드 형태로 공시되어 있다. 즉 현실의 BUIDL은 축 1의 양쪽 lane(미국 = Reg D, 역외 = Reg S)을 모두 쓰는 구조다. 그러나 본 프로젝트 Phase 1은 미국인 lane만 열고 Reg S 역외 lane은 유보하므로(§1.5), A-02의 축 1 판정은 "U.S. person이면 통과"로 단순화된다. 축 2(제재)는 lane과 무관하게 항상 켜진다 — 미국인이든 아니든, 포괄제재역 거주·설립지면 차단이다. + +거주·국적의 사실 판단은 A-02가 직접 하지 않는다. ERC-3643 가정 하에서 Sumsub이 KYC 과정에서 거주지·국적(법인이면 설립 관할)을 확인하고 그 결과를 claim으로 서명·발급한다. 온체인 A-02는 그 claim의 값을 허용집합·금지집합과 대조하는 결정론적 판정만 한다. BUIDL이 실제 FPI(foreign private issuer)로 취급되는 경우, A-02가 공급하는 "미국 거주 여부"는 D-01이 §12(g)/Rule 12g3-2(a)의 "미국 거주 record holder 300명 미만" 경계를 계산하는 입력이 된다(§3.8·§9.3). + +### 3.0.2 조문 순서·중요성 한눈에 보기 (법 리스트) + +아래 두 표가 §3의 지도다. **표 1**(Authority)은 각 근거가 어떤 종류(=Layer)이고 무슨 내용이며 A-02에 어떻게 닿는지를, **표 2**(순서·중요성)는 소단원의 읽는 순서(논리 흐름)와 중요성(A-02가 실제로 그걸로 판정하는가)을 보여준다. 순서는 중요도순이 아니라 두 축의 흐름순이다. + +**표 1 — Authority(근거 목록)** + +| 종류 | Authority | 내용 | A-02 관련성 | Direct/Supporting | Official URL | +| --- | --- | --- | --- | --- | --- | +| Statute | Securities Act §5 · 15 U.S.C. §77e | 미등록 증권의 offer·sale 금지(기본값) | 두 면제 lane이 전제하는 등록 원칙 | Background | uscode.house.gov | +| Statute | Securities Act §4(b) · 15 U.S.C. §77d(b) | 506(c) 발행은 일반청약해도 public offering 아님 | 미국 lane 발행 근거(A-03 소관) | Supporting | uscode.house.gov | +| SEC Rule | Rule 506(c) · 17 CFR §230.506(c) | 미국 적격투자자 대상 발행 면제 | 축 1 미국 lane(A-03 소관) | Supporting | ecfr.gov | +| SEC Rule | Reg S §230.901 · 17 CFR §230.901 | §5는 미국 내 거래에만 적용(역외 제외) | 축 1 역외 lane의 관문 | Direct | ecfr.gov | +| SEC Rule | Reg S §230.902(k) · 17 CFR §230.902(k) | U.S. person 정의(8 포함 · 6 제외) | 어느 lane인지 가르는 핵심 판정 ⭐ | Direct | ecfr.gov | +| SEC Rule | Reg S §230.902(h) · 17 CFR §230.902(h) | offshore transaction 정의 | 역외 판매의 형태 요건(유보) | Direct | ecfr.gov | +| SEC Rule | Reg S §230.902(c) · 17 CFR §230.902(c) | directed selling efforts 금지·정의 | 역외 판매 시 미국향 광고 금지(유보) | Conditional | ecfr.gov | +| SEC Rule | Reg S §230.903·§230.904 | 발행자/재판매 offshore safe harbor | 역외 lane 골격(Phase 1 유보) | Conditional | ecfr.gov | +| SEC Rule | Rule 3b-4(c) · 17 CFR §240.3b-4 | foreign private issuer·미국 거주 record holder | A-02 거주 판정 → D-01 입력 | Supporting | ecfr.gov | +| Statute | IEEPA §203 · 50 U.S.C. §1702 | 대통령의 거래 규제·금지 권한(OFAC 근거) | 축 2 포괄제재의 수권 | Direct | uscode.house.gov | +| Statute | IEEPA §206 · 50 U.S.C. §1705 | 위반의 민·형사 책임·시효 | 관문이 존재하는 이유(집행 리스크) | Direct | uscode.house.gov | +| Statute | TWEA §5(b) · 50 U.S.C. §4305(b) | Cuba 포괄제재의 별도 수권 | 축 2 Cuba 프로그램 근거 | Supporting | uscode.house.gov | +| OFAC Rule | Iran ITSR §560.204 · 31 CFR §560.204 | 이란 대상 서비스 수출 등 포괄 금지(대표) | 관할 기반 금지의 구체 기제 | Direct | ecfr.gov | +| E.O. | E.O. 13685(Crimea)·14065(DNR/LNR)·14312(Syria 종료) | 지역 포괄제재 지정/해제 | 금지집합이 동적 파라미터인 근거 | Supporting | federalregister.gov | +| Case | Morrison v. National Australia Bank · 561 U.S. 247 (2010) | 증권법의 역외적용 한계(transactional test) | 속지주의(축 1)의 판례 토대 | Background | supremecourt.gov | +| Statute | NSMIA §18 · 15 U.S.C. §77r | covered security의 주(州) 등록 preemption | 미국 내 州 관할과의 경계(A-02 밖) | Background | uscode.house.gov | + +**표 2 — 조문 순서·중요성 한눈에 보기** + +| 순서 | 조문 | 중요성 | A-02가 그걸로 하는 일 | +| --- | --- | --- | --- | +| §3.1 | Securities Act §5 (77e) | 배경 | 안 함 — 두 면제 lane의 전제(등록 원칙) 확인 | +| §3.2 | §4(b)·Rule 506(c) | 보조 | 안 함 — 미국 lane 발행 근거(A-03 소관) | +| §3.3 | Reg S §230.901 | 핵심 | 역외가 §5 밖임을 확인(축 1 역외 lane 관문) | +| §3.4 | Reg S §230.902(k) — U.S. person | 핵심 ⭐ | 매수인이 미국인인지 판정(lane 분기의 본체) | +| §3.5 | Reg S §230.902(h) — offshore transaction | 조건부 | 역외 판매 형태 요건(Phase 1 유보) | +| §3.6 | Reg S §230.902(c) — directed selling efforts | 조건부 | 역외 시 미국향 광고 금지(유보) | +| §3.7 | Reg S §230.903·904 | 조건부 | 역외 lane safe harbor 골격(유보) | +| §3.8 | Rule 3b-4(c) | 보조 | 거주 판정을 D-01(FPI 300 카운트)에 공급 | +| §3.9 | IEEPA §1702 | 핵심 | 안 함(수권) — 포괄제재 금지의 법적 뿌리 | +| §3.10 | IEEPA §1705 | 핵심 | 안 함(집행) — 위반 시 민·형사 책임의 근거 | +| §3.11 | TWEA §5(b) (4305) | 보조 | 안 함 — Cuba 프로그램의 별도 수권 | +| §3.12 | Iran ITSR §560.204 | 핵심 | 관할 금지의 구체 기제(서비스 수출 금지) 대입 | +| §3.13 | E.O. 13685·14065·14312 + 포괄제재 집합 | 핵심 | 금지집합(파라미터)의 현행 값과 갱신 근거 | +| §3.14 | 판례·preemption(Morrison·NSMIA §18) | 보조 | 안 함 — 속지주의 토대·州 관할 경계 확인 | +| §3.15 | Sub-요건 분해 매트릭스 | — | 위 요건을 원자적 검증 단위로 분해(§5.2와 1:1) | +| §3.16 | ERC-3643 변환·claim 총정리 | — | §3.1~§3.14의 claim 매핑을 한 표로 | + +**경계 — 이 부품이 다루지 않는 것.** 아래는 같은 거래에 작동하지만 A-02가 아니라 다른 부품·레이어가 책임진다 — 누락이 아니라 소관 분리이며, A-02 안에 끌어다 구현하지 않는다. + +- **OFAC SDN 명단 대조·50% Rule** — A-01 소관. A-02는 관할(지도)만 보고, 명단(수배)은 A-01이 본다. + +- **적격투자자(AI)·적격매수인(QP) 자격 판정** — A-03·A-13 소관. A-02는 "어디 사람인가"만 보고, "자격이 있는가"는 보지 않는다. + +- **§12(g)/FPI 보유자 수 카운트 자체** — D-01 소관. A-02는 "미국 거주 여부" claim을 공급할 뿐, 300명·2,000명 임계 계산은 D-01이 한다. + +- **claim 신선도·만료** — A-11 소관. A-02는 신선도 게이트를 호출해 결과를 받아 쓴다. + +- **미국 내 州(state) blue sky 등록** — 발행·notice-filing 레이어 소관이며, 506 covered security는 NSMIA §18로 州 등록이 preempt된다(§3.14). A-02는 국가·지역(country/region) 단위 관할만 보고 州 단위는 보지 않는다. + +### 3.1 Securities Act §5 — 15 U.S.C. §77e — 등록 원칙(면제의 배경) [uscode.house.gov] + +- **조항**: Securities Act §5(a)·(c), 15 U.S.C. §77e(a)·(c) — uscode.house.gov (2026-06-14 기준 현행) + +- **핵심 원문**: (a) Unless a registration statement is in effect as to a security, it shall be unlawful for any person, directly or indirectly— (1) to make use of any means or instruments of transportation or communication in interstate commerce or of the mails to sell such security through the use or medium of any prospectus or otherwise; or (2) to carry or cause to be carried through the mails or in interstate commerce, by any means or instruments of transportation, any such security for the purpose of sale or for delivery after sale. … (c) It shall be unlawful for any person, directly or indirectly, to make use of any means or instruments of transportation or communication in interstate commerce or of the mails to offer to sell or offer to buy through the use or medium of any prospectus or otherwise any security, unless a registration statement has been filed as to such security, or while the registration statement is the subject of a refusal order or stop order or (prior to the effective date of the registration statement) any public proceeding or examination under section 77h of this title. + +- **한국어**: (a) 어느 증권에 관하여 registration statement가 발효 중이 아닌 한, 누구든지 직접·간접으로 다음을 하는 것은 위법이다 — (1) prospectus의 사용 또는 그 밖의 방법으로 그 증권을 판매하기 위하여, 주(州)간 상거래 또는 우편의 운송·통신 수단을 사용하는 것; 또는 (2) 판매를 위하여 또는 판매 후 인도를 위하여, 우편 또는 주간 상거래로 그 증권을 운송하거나 운송하게 하는 것. … (c) 누구든지 직접·간접으로, 어느 증권에 관하여 registration statement가 제출되지 않았거나, 그것이 거부명령·정지명령의 대상이거나 (발효일 전) §77h상 공개 절차·심사의 대상인 동안, prospectus의 사용 또는 그 밖의 방법으로 그 증권의 청약(offer to sell)·매수청약(offer to buy)을 하기 위하여 주간 상거래·우편의 수단을 사용하는 것은 위법이다. + +- **쉬운 설명**: 미국 증권법의 기본값은 "등록 안 했으면 팔지도, 팔겠다고 광고하지도 마라"이다. 이 §5가 모든 것의 출발점이며, Reg D(미국 lane)와 Reg S(역외 lane)는 각각 이 §5의 예외(면제)를 성립시키는 조건을 정한 것이다. A-02가 관할을 따지는 이유도 결국 여기서 나온다 — 어느 예외로 §5를 벗어나느냐가 매수인의 관할에 따라 갈리기 때문이다. 상세는 A-03(발행·재판매) 소관이며, 여기서는 두 lane의 공통 전제로만 인용한다. + +- **PASS/FAIL 반영**: 배경 — A-02가 직접 §5를 판정하지 않는다. 다만 A-02의 두 lane 분기(§3.3~§3.4)가 이 §5의 예외 구조 위에 서 있음을 확인한다. + +- **ERC-3643 변환**: 직접 매핑 없음. asset.manifest.issuanceFramework(= REG_D_506C)와 asset.manifest.regsLaneEnabled(Phase 1 = false)가 이 조문 구조를 반영하는 상위 파라미터다. + +### 3.2 Securities Act §4(b)·Rule 506(c) — 미국 lane 발행 면제 (A-03 소관) [uscode.house.gov · ecfr.gov] + +- **조항**: Securities Act §4(b), 15 U.S.C. §77d(b) — uscode.house.gov; Rule 506(c), 17 CFR §230.506(c) — ecfr.gov + +- **핵심 원문 (§4(b))**: Offers and sales exempt under section 230.506 of title 17, Code of Federal Regulations (as revised pursuant to section 201 of the Jumpstart Our Business Startups Act) shall not be deemed public offerings under the Federal securities laws as a result of general advertising or general solicitation. + +- **한국어**: 17 C.F.R. §230.506(JOBS Act §201에 따라 개정된)상 면제되는 청약·판매는, 일반광고 또는 일반청약을 이유로 연방 증권법상 public offering으로 간주되지 아니한다. + +- **쉬운 설명**: 미국인 매수인에게 파는 lane은 Reg D 506(c)다 — 일반청약(광고)을 허용하되 모든 매수인이 적격투자자여야 하고 발행자가 그 자격을 reasonable steps로 검증해야 한다. A-02 관점에서 중요한 것은 이 lane이 "미국 관할"에 대응한다는 점뿐이다. 매수인이 U.S. person이면 이 lane, 아니면 Reg S lane(§3.3~)이다. 자격 검증·일반청약 요건 자체는 A-03 소관이며, A-02는 lane 배정을 위한 참조로만 인용한다. + +- **PASS/FAIL 반영**: 보조 — A-02는 이 조문을 판정하지 않는다. 매수인이 U.S. person일 때 축 1이 이 lane으로 귀결됨을 확인하는 데 쓴다. + +- **ERC-3643 변환**: asset.manifest.issuanceFramework = REG_D_506C. A-02는 이 값을 읽어 "미국 lane 대상 자산"임을 전제한다. + +### 3.3 Regulation S §230.901 — 총칙: §5는 미국 안에만 적용 [ecfr.gov] + +- **조항**: 17 C.F.R. §230.901 (Regulation S 총칙) — ecfr.gov (Title 17 현행) + +- **핵심 원문**: For the purposes only of section 5 of the Act (15 U.S.C. § 77e), the terms offer, offer to sell, sell, sale, and offer to buy shall be deemed to include offers and sales that occur within the United States and shall be deemed not to include offers and sales that occur outside the United States. + +- **한국어**: 오직 이 법 §5(15 U.S.C. §77e)의 목적상, offer·offer to sell·sell·sale·offer to buy라는 용어는 미국 안에서 발생하는 청약·판매를 포함하는 것으로 보고, 미국 밖에서 발생하는 청약·판매는 포함하지 않는 것으로 본다. + +- **쉬운 설명**: 이 한 문장이 Regulation S 전체의 뿌리다 — §5의 등록의무는 "미국 안" 거래에만 걸리고, "미국 밖" 거래는 §5의 문언에서 아예 빠진다는 선언이다. 그래서 미국 밖 매수인에게 파는 역외 거래는 등록 없이도 §5 위반이 아니게 된다. 다만 "미국 밖"인지 여부는 자동이 아니라 아래 §230.902의 정의들(U.S. person·offshore transaction)로 판정한다. Regulation S에는 Preliminary Notes가 붙어 있어, 이 역외 면제가 미국 등록의무를 잠탈하려는 계획(scheme to evade registration)의 일부로 쓰이면 안 된다는 반(反)탈법 원칙을 못 박는다 — 형식상 역외 형태만 갖추고 실질이 미국 국내 판매면 면제가 인정되지 않는다. 본 프로젝트는 Phase 1에서 이 역외 lane을 유보하므로, A-02는 이 조문을 "역외 lane이 존재하지만 지금은 닫혀 있음"의 근거로 인용한다. + +- **PASS/FAIL 반영**: 직접 ○ (lane 관문) — 매수인이 미국 밖(비 U.S. person)이면 이론상 이 역외 lane이 열려야 하나, Phase 1에서는 유보이므로 FAIL_JURISDICTION_NOT_ALLOWED로 처리한다. + +- **ERC-3643 변환**: asset.manifest.regsLaneEnabled(bool). Phase 1 = false → 비 U.S. person은 통과 불가(유보). true로 전환 시 §3.4~§3.7 요건을 활성. + +### 3.4 Regulation S §230.902(k) — "U.S. person" 정의 [ecfr.gov] + +- **조항**: 17 C.F.R. §230.902(k) — ecfr.gov (Title 17, 2026-07-14 최신 확인) + +- **핵심 원문 (k)(1) 포함**: "U.S. person" means: (i) Any natural person resident in the United States; (ii) Any partnership or corporation organized or incorporated under the laws of the United States; (iii) Any estate of which any executor or administrator is a U.S. person; (iv) Any trust of which any trustee is a U.S. person; (v) Any agency or branch of a foreign entity located in the United States; (vi) Any non-discretionary account or similar account (other than an estate or trust) held by a dealer or other fiduciary for the benefit or account of a U.S. person; (vii) Any discretionary account or similar account (other than an estate or trust) held by a dealer or other fiduciary organized, incorporated, or (if an individual) resident in the United States; and (viii) Any partnership or corporation if: (A) Organized or incorporated under the laws of any foreign jurisdiction; and (B) Formed by a U.S. person principally for the purpose of investing in securities not registered under the Act, unless it is organized or incorporated, and owned, by accredited investors (as defined in § 230.501(a)) who are not natural persons, estates or trusts. + +- **핵심 원문 (k)(2) 제외 (요지)**: The following are not "U.S. persons": (i) 미국 소재 dealer·전문수탁자가 비(非)미국인을 위해 보유하는 재량계좌; (ii) 비미국인 전문수탁자가 재량을 갖고 외국법이 규율하는 estate; (iii) 비미국인 수탁자가 재량을 갖고, 수익자(및 철회가능 신탁의 위탁자)에 미국인이 없는 trust; (iv) 미국 밖 법·관행으로 설립·운영되는 employee benefit plan; (v) 유효한 사업상 이유로 미국 밖에 있고 보험·은행업으로 현지 규제를 받는 미국인의 해외 지점·대리점; (vi) IMF·IBRD·미주개발은행·아시아개발은행·아프리카개발은행·UN 등 국제기구와 그 기관·부속·연금. + +- **한국어 (k)(1)**: "U.S. person"이란 다음을 뜻한다 — (i) 미국에 거주하는(resident) 모든 자연인; (ii) 미국법에 따라 조직·설립된 모든 partnership 또는 corporation; (iii) executor·administrator 중 어느 하나가 U.S. person인 모든 estate; (iv) trustee 중 어느 하나가 U.S. person인 모든 trust; (v) 미국에 소재한 외국 실체의 대리점·지점; (vi) dealer 등 수탁자가 U.S. person의 이익·계산으로 보유하는 비재량(non-discretionary) 계좌; (vii) 미국에서 조직·설립(개인이면 거주)된 dealer 등 수탁자가 보유하는 재량(discretionary) 계좌; (viii) (A) 외국 관할법에 따라 조직·설립되었고 (B) 미등록 증권 투자를 주된 목적으로 U.S. person이 형성한 partnership·corporation. 단 자연인·estate·trust가 아닌 적격투자자(§230.501(a))에 의하여 조직·설립·소유된 경우는 제외. + +- **쉬운 설명**: 이것이 A-02 축 1의 심장이다. "미국인(U.S. person)"은 국적이 아니라 주로 **거주(resident)**와 **설립지(organized/incorporated)**로 정의된다 — 미국에 사는 자연인, 미국법으로 세운 법인이 기본이다. 여기서 두 가지가 특히 중요하다. 첫째, (viii)의 anti-abuse 조항 — 미국인이 미등록 증권을 사려고 외국에 급조한 회사는 겉은 외국법인이어도 U.S. person으로 본다(비자연인 적격투자자 소유면 예외). 둘째, (k)(2)의 제외 목록 — 형식상 미국과 연결돼 보여도 실질이 역외면 U.S. person이 아니다. A-02는 이 정의를 직접 재현하지 않고, Sumsub이 이 기준으로 판단한 결과(isUSPerson)를 claim으로 받아 쓴다. Phase 1에서는 isUSPerson = true여야 통과(미국 lane), false면 유보 차단이다. 유의 — U.S. person 여부(증권법 축 1)와 제재 관할(축 2)은 독립이다. 미국 거주자(U.S. person)라도 그가 동시에 이란 거주·국적 등 제재 접점을 가지면 축 2에서 별도로 걸릴 수 있다. + +- **PASS/FAIL 반영**: 직접 ○ (lane 분기 본체) — claim.isUSPerson = true → 미국 lane 후보(축 1 통과 가능). false → Phase 1에서는 FAIL_JURISDICTION_NOT_ALLOWED(Reg S 유보). 단 이 판정은 축 2(제재)와 독립이며, isUSPerson = true라도 거주·설립지가 제재역이면 축 2에서 차단된다. + +- **ERC-3643 변환**: claim.topic = US_PERSON_STATUS, claim.value ∈ {US_PERSON, NON_US_PERSON}, claim.basis(예: RESIDENT_NATURAL, ORGANIZED_US, FOREIGN_ENTITY_ABUSE_VIII, EXCLUDED_902K2). 판단은 off-chain(Sumsub), 온체인은 claim 값만 대조. + +### 3.5 Regulation S §230.902(h) — "offshore transaction" [ecfr.gov] + +- **조항**: 17 C.F.R. §230.902(h) — ecfr.gov + +- **핵심 원문 ((h)(1))**: An offer or sale of securities is made in an "offshore transaction" if: (i) The offer is not made to a person in the United States; and (ii) Either: (A) At the time the buy order is originated, the buyer is outside the United States, or the seller and any person acting on its behalf reasonably believe that the buyer is outside the United States; or (B) For purposes of: (1) Section 230.903, the transaction is executed in, on or through a physical trading floor of an established foreign securities exchange that is located outside the United States; or (2) Section 230.904, the transaction is executed in, on or through the facilities of a designated offshore securities market described in paragraph (b) of this section, and neither the seller nor any person acting on its behalf knows that the transaction has been pre-arranged with a buyer in the United States. + +- **한국어**: 증권의 청약·판매가 다음일 때 "offshore transaction"으로 이루어진 것이다 — (i) 청약이 미국 내의 자에게 이루어지지 않았고; 그리고 (ii) 다음 중 하나: (A) 매수주문이 개시되는 시점에 매수인이 미국 밖에 있거나, 매도인(및 그를 위해 행위하는 자)이 매수인이 미국 밖에 있다고 합리적으로 신뢰함; 또는 (B) §230.903 목적상 미국 밖 established foreign securities exchange의 물리적 거래소에서 체결되거나, §230.904 목적상 designated offshore securities market에서 체결되고 매도인이 그 거래가 미국 내 매수인과 사전 조율되었음을 알지 못함. + +- **쉬운 설명**: 역외 lane을 타려면 "거래가 미국 밖에서 일어났다"는 형태 요건을 갖춰야 한다. 핵심은 (ii)(A) — 매수주문 개시 시점에 매수인이 물리적으로 미국 밖에 있어야 한다(또는 매도인이 그렇게 합리적으로 믿어야 함). DEX 맥락에서 이 "매수주문 개시 시점의 소재"는 온체인만으로 확인하기 어려운 판단이라, Sumsub의 거주·소재 확인과 접속 시그널이 근거가 된다. 본 프로젝트는 Phase 1에서 역외 lane을 유보하므로, 이 요건은 Reg S 개방 시 활성될 조건으로만 인용한다. offshore transaction의 "취득 시점" 개념은 A-02의 취득 시점 논의(§5.4)와 맞물린다. + +- **PASS/FAIL 반영**: 조건부 ○ (Reg S 활성 시) — regsLaneEnabled = true인 경우, 비 U.S. person 매수인이라도 이 offshore-transaction 형태 요건을 충족해야 축 1을 통과한다. Phase 1(false)에서는 도달하지 않는다. + +- **ERC-3643 변환**: (유보) claim.buyerOutsideUS(bool) + 거래 실행 채널 태그. Phase 1 미사용, Reg S 개방 시 활성. + +### 3.6 Regulation S §230.902(c) — "directed selling efforts" [ecfr.gov] + +- **조항**: 17 C.F.R. §230.902(c) — ecfr.gov + +- **핵심 원문 ((c)(1))**: "Directed selling efforts" means any activity undertaken for the purpose of, or that could reasonably be expected to have the effect of, conditioning the market in the United States for any of the securities being offered in reliance on this Regulation S (§ 230.901 through § 230.905, and Preliminary Notes). Such activity includes placing an advertisement in a publication "with a general circulation in the United States" that refers to the offering of securities being made in reliance upon this Regulation S. + +- **한국어**: "directed selling efforts"란, Regulation S(§230.901~§230.905 및 Preliminary Notes)에 의거하여 청약되는 증권에 대하여 미국 내 시장을 조성(conditioning)할 목적으로, 또는 그러한 효과를 합리적으로 기대할 수 있는, 모든 활동을 말한다. 그러한 활동에는 이 Regulation S에 의거한 증권 청약을 언급하는 광고를 "미국 내 일반 유통(general circulation)" 간행물에 게재하는 것이 포함된다. + +- **쉬운 설명**: 역외 lane을 쓰려면 "미국을 향해 판촉하지 마라"는 조건이 붙는다 — 미국 시장을 겨냥한 광고·마케팅(directed selling efforts)이 있으면 offshore transaction 형태를 갖춰도 역외 면제가 깨진다. 이는 발행·판촉 레이어의 행위 규율이라 A-02가 개별 거래에서 직접 판정하는 대상은 아니지만, Reg S 개방 시 venue 운영이 미국향 광고를 하지 않도록 하는 근거가 된다. Phase 1에서는 유보. 참고 — 이는 미국 lane의 일반청약 허용(§4(b)/506(c))과 정반대 방향의 제약이라, lane마다 광고 규율이 다르다는 점을 기억해야 한다. + +- **PASS/FAIL 반영**: 조건부 — A-02가 개별 거래에서 판정하지 않는다(운영·발행 레이어 규율). Reg S 개방 시 Operator 정책으로 반영. + +- **ERC-3643 변환**: (유보) 개별 claim 없음. Operator 정책 파라미터(marketingUSDirected = 금지)로 관리. + +### 3.7 Regulation S §230.903·§230.904 — 발행/재판매 offshore safe harbor 골격 [ecfr.gov] + +- **조항**: 17 C.F.R. §230.903(발행자 등), §230.904(재판매) — ecfr.gov + +- **핵심 원문 (§230.903 chapeau)**: An offer or sale of securities by the issuer, a distributor, any of their respective affiliates, or any person acting on behalf of any of the foregoing, shall be deemed to occur outside the United States within the meaning of § 230.901 if: (1) The offer or sale is made in an offshore transaction; (2) No directed selling efforts are made in the United States by the issuer, a distributor, any of their respective affiliates, or any person acting on behalf of any of the foregoing; and [해당 Category별 추가 요건]. + +- **핵심 원문 (§230.904 chapeau)**: An offer or sale of securities by any person other than the issuer, a distributor, any of their respective affiliates (except any officer or director who is an affiliate solely by virtue of holding such position), or any person acting on behalf of any of the foregoing, shall be deemed to occur outside the United States within the meaning of § 230.901 if: (1) The offer or sale are made in an offshore transaction; (2) No directed selling efforts are made in the United States by the seller, an affiliate, or any person acting on their behalf; and (3) The conditions of paragraph (b) of this section, if applicable, are satisfied. + +- **한국어**: (§230.903) 발행자·distributor·그 affiliate 등에 의한 청약·판매는, (1) offshore transaction으로 이루어지고 (2) 미국 내 directed selling efforts가 없으며 (3) 해당 Category(발행자 성격·미국 시장 이해관계에 따른 1·2·3 분류)의 추가 요건을 충족하면 §230.901상 미국 밖에서 발생한 것으로 본다. (§230.904) 발행자·distributor 등 이외의 자(즉 후속 재판매자)에 의한 청약·판매도, (1) offshore transaction이고 (2) 매도인 측의 미국 내 directed selling efforts가 없으며 (3) (해당 시) (b)항 요건을 충족하면 미국 밖 발생으로 본다. + +- **쉬운 설명**: 역외 면제에는 두 개의 safe harbor가 있다 — §230.903은 발행 단계(발행자·인수인), §230.904는 유통 단계(그 밖의 매도인·재판매)다. 둘 다 공통적으로 "offshore transaction + 미국향 판촉 없음"을 요구하고, 발행 단계는 Category 1/2/3에 따라 추가 제한(예: distribution compliance period, offering restrictions)을 얹는다. 본 프로젝트 Phase 1은 역외 lane을 유보하므로 이 골격은 참조로만 둔다. Reg S를 열 때, R1(발행)은 §230.903, R2(재판매)는 §230.904 프레임을 각각 A-02 상위에서 적용하게 된다. + +- **PASS/FAIL 반영**: 조건부 (Reg S 활성 시) — Phase 1에서는 도달하지 않음. 개방 시 lane 배정(발행/재판매)에 따라 903/904 요건을 상위 Recipe가 관리하고, A-02는 offshore-transaction·U.S. person 축만 담당. + +- **ERC-3643 변환**: (유보) asset.manifest.regsCategory ∈ {CAT1, CAT2, CAT3} + regsResaleFrame(904). Phase 1 미사용. + +### 3.8 Rule 3b-4(c) — foreign private issuer·미국 거주 record holder [ecfr.gov] + +- **조항**: 17 C.F.R. §240.3b-4(c) (및 관련 §240.12g3-2(a)) — ecfr.gov + +- **핵심 원문 (3b-4(c))**: The term foreign private issuer means any foreign issuer other than a foreign government except for an issuer meeting the following conditions as of the last business day of its most recently completed second fiscal quarter: (1) More than 50 percent of the issuer's outstanding voting securities are directly or indirectly held of record by residents of the United States; and [(2) any of: (i) a majority of executive officers or directors are U.S. citizens or residents; (ii) more than 50 percent of assets located in the United States; or (iii) business administered principally in the United States]. + +- **한국어**: "foreign private issuer(FPI)"란, 가장 최근 완료된 제2 회계분기의 마지막 영업일 기준 다음에 해당하는 issuer를 제외한, 외국 정부가 아닌 모든 foreign issuer를 말한다 — (1) 발행 의결권증권의 50% 초과(more than 50 percent)를 미국 거주자가 직접·간접으로 record상 보유하고; 그리고 (2) (i) 임원·이사의 과반이 미국 시민·거주자이거나, (ii) 자산의 50% 초과가 미국 내에 있거나, (iii) 사업이 주로 미국에서 관리되는 경우. + +- **쉬운 설명**: 이 조문 자체는 D-01(보유자 수)의 소관이지만, A-02와 직접 맞물린다. FPI 판정과 그에 따르는 Rule 12g3-2(a) 면제("미국 거주 record holder가 300명 미만이면 §12(g) 면제")는 모두 "미국 거주자"를 세는 데서 출발하는데, 그 "미국 거주 여부"의 원천이 바로 A-02의 거주 판정이다. 즉 A-02는 각 매수인의 거주지를 확정해 claim으로 남기고, D-01은 그 claim들을 합산해 "미국 거주 보유자 < 300"(초과 아님, 미만) 경계를 감시한다. 부등호 유의 — FPI 요건 (1)은 "50 percent 초과"(> 50%), 12g3-2(a) 면제는 "300명 미만"(< 300)으로, 방향이 다르다. A-02는 이 계산을 하지 않고 입력(거주)만 제공한다. + +- **PASS/FAIL 반영**: 보조 ○ (D-01 입력 공급) — A-02는 residence claim을 확정·보존한다. FPI 여부·300명 경계 판정은 D-01이 수행하며, 그 결과가 A-02의 통과/차단을 바꾸지는 않는다(소관 분리). + +- **ERC-3643 변환**: claim.residence(ISO 3166 관할 코드) → D-01의 usResidentHolderCount 집계 입력. asset.manifest.issuerIsFPI·fpiExemption12g3_2a는 D-01 소관 파라미터. + +### 3.9 IEEPA §203 — 50 U.S.C. §1702 — 대통령의 거래 규제·금지 권한 [uscode.house.gov] + +- **조항**: International Emergency Economic Powers Act §203, 50 U.S.C. §1702(a)(1) — uscode.house.gov + +- **핵심 원문 (§1702(a)(1))**: At the times and to the extent specified in section 1701 of this title, the President may, under such regulations as he may prescribe, by means of instructions, licenses, or otherwise— (A) investigate, regulate, or prohibit— (i) any transactions in foreign exchange, (ii) transfers of credit or payments between, by, through, or to any banking institution, to the extent that such transfers or payments involve any interest of any foreign country or a national thereof, (iii) the importing or exporting of currency or securities, by any person, or with respect to any property, subject to the jurisdiction of the United States; (B) investigate, block during the pendency of an investigation, regulate, direct and compel, nullify, void, prevent or prohibit, any acquisition, holding, withholding, use, transfer, withdrawal, transportation, importation or exportation of, or dealing in, or exercising any right, power, or privilege with respect to, or transactions involving, any property in which any foreign country or a national thereof has any interest by any person, or with respect to any property, subject to the jurisdiction of the United States. + +- **한국어**: §1701에 정한 시기·범위에서, 대통령은 그가 정하는 규칙에 따라 지시·허가 기타 방법으로 다음을 할 수 있다 — (A) 다음을 조사·규제·금지한다: (i) 외국환에 관한 모든 거래, (ii) 어느 외국 또는 그 국민의 이해관계가 관련되는 한, 은행기관 간·을 통한·에 대한 신용공여 또는 지급의 이전, (iii) 미국의 관할에 속한 어느 자에 의한 또는 어느 재산에 관한 통화·증권의 수입·수출; (B) 미국의 관할에 속한 어느 자에 의한 또는 어느 재산에 관한, 어느 외국 또는 그 국민이 이해관계를 갖는 재산의 취득·보유·유보·사용·이전·인출·운송·수입·수출, 또는 그에 관한 거래·권리·권한·특권의 행사를, 조사·(조사 계속 중) 차단·규제·지시·강제·무효화·취소·방지·금지한다. + +- **쉬운 설명**: 이 조문이 OFAC 포괄제재의 헌법적 뿌리다. 대통령이 국가비상사태(§1701)를 선언하면, 이 §1702가 "외국 또는 그 국민이 이해관계를 갖는 재산·거래를 사실상 전면적으로 금지·차단할 수 있는" 광범위한 권한을 준다. 특히 (iii)의 "통화·증권의 수입·수출"과 (B)의 "거래·재산 dealing 금지"가 증권 거래에 직결된다 — 제재역 국민이 이해관계를 갖는 증권 거래를 미국의 관할에 속한 자가 하면, 이 권한으로 금지된 거래가 된다. Decipher가 미국의 관할에 속한 운영자라면(또는 미국인이 참여하면) 이 금지의 수범자다. A-02가 관할을 기계적으로 막는 이유는 이 광범위한 금지에 걸리지 않기 위함이다. 이 조문 자체는 A-02가 "판정"하는 대상이 아니라, 아래 프로그램(§3.12·§3.13)의 수권 근거로 인용한다. + +- **PASS/FAIL 반영**: 핵심(수권) — A-02가 직접 이 조문을 판정하지 않는다. 이 권한에 근거해 만들어진 개별 프로그램(포괄제재역 목록)이 A-02의 금지집합(파라미터)을 채운다. + +- **ERC-3643 변환**: 직접 매핑 없음. 이 수권 아래의 프로그램들이 sanctionsPolicy.prohibitedJurisdictions 집합을 구성한다. + +### 3.10 IEEPA §206 — 50 U.S.C. §1705 — 위반의 민·형사 책임·시효 [uscode.house.gov] + +- **조항**: IEEPA §206, 50 U.S.C. §1705(a)·(b)·(c)·(d) — uscode.house.gov (2026-05-22 기준 현행) + +- **핵심 원문**: (a) Unlawful acts. It shall be unlawful for a person to violate, attempt to violate, conspire to violate, or cause a violation of any license, order, regulation, or prohibition issued under this chapter. (b) Civil penalty. A civil penalty may be imposed on any person who commits an unlawful act described in subsection (a) in an amount not to exceed the greater of— (1) \$250,000; or (2) an amount that is twice the amount of the transaction that is the basis of the violation with respect to which the penalty is imposed. (c) Criminal penalty. A person who willfully commits, willfully attempts to commit, or willfully conspires to commit, or aids or abets in the commission of, an unlawful act described in subsection (a) shall, upon conviction, be fined not more than \$1,000,000, or if a natural person, may be imprisoned for not more than 20 years, or both. (d) Statute of limitations … [10 years]. + +- **한국어**: (a) 위법행위 — 누구든지 이 장에 따라 발령된 license·order·regulation·prohibition을 위반하거나, 위반을 기도·공모하거나, 위반을 야기(cause)하는 것은 위법이다. (b) 민사 제재 — (a)의 위법행위를 한 자에게 다음 중 큰 금액을 초과하지 않는 범위에서 민사 제재를 부과할 수 있다: (1) \$250,000; 또는 (2) 위반의 기초가 된 거래 금액의 2배. (c) 형사 제재 — (a)의 위법행위를 고의로(willfully) 범하거나 기도·공모하거나 방조한 자는, 유죄판결 시 \$1,000,000 이하의 벌금에 처하고, 자연인인 경우 20년 이하의 징역에 처하거나 이를 병과할 수 있다. (d) 공소·제소 시효 … [10년]. + +- **쉬운 설명**: 이것이 A-02가 존재하는 이유의 실체다. 제재를 위반하면 처벌이 "civil \$250,000 또는 거래액의 2배 중 큰 것", "criminal(고의) 벌금 \$1M·징역 20년"이다. 특히 (a)가 "cause a violation"(위반을 야기)까지 위법으로 규정하므로, Decipher가 제재역 거주자에게 거래를 체결시켜 준 것만으로도 야기·방조 책임에 걸릴 수 있다. 부등호·금액 유의 — (b) 민사 상한은 "not to exceed"(초과 불가)이고 "\$250,000 또는 2배 중 큰 것"이다. (2024년 개정 Pub. L. 118-50은 (d) 10년 시효를 신설했고 민사 상한 \$250,000은 유지했다.) 이 형사 리스크 때문에 A-02는 제재 관할 실패를 절대 통과시키지 않는 hard block으로 설계한다(§6.2). + +- **PASS/FAIL 반영**: 핵심(집행) — A-02가 판정하는 대상은 아니나, 이 처벌 규정이 "제재 관할 적중 = 되돌릴 수 없는 차단"이라는 설계 원칙의 근거다. + +- **ERC-3643 변환**: 직접 매핑 없음. sanctionsPolicy 적중 시 FAIL_SANCTIONED_JURISDICTION(hard block)으로 귀결되는 것이 이 조문의 정책적 반영이다. + +### 3.11 TWEA §5(b) — 50 U.S.C. §4305(b) — Cuba 포괄제재의 별도 수권 [uscode.house.gov] + +- **조항**: Trading with the Enemy Act §5(b), 50 U.S.C. §4305(b) — uscode.house.gov + +- **핵심 취지(요지 인용)**: §4305(b)는, 전시 또는 국가비상사태 기간 중, 대통령이 외국 또는 그 국민이 이해관계를 갖는 재산에 관한 이전·지급·수출입·거래를 조사·규제·금지할 수 있도록 수권한다. Cuba 제재(Cuban Assets Control Regulations, 31 CFR Part 515)는 IEEPA가 아니라 이 TWEA §5(b)의 계속 적용을 근거로 유지된다. + +- **한국어(취지)**: 대적성국교역법 §5(b)는 대통령에게, 외국·그 국민의 이해관계가 걸린 재산·거래를 규제·금지할 권한을 부여한다. 다른 현행 포괄제재 프로그램 대부분이 IEEPA(§1702)에 근거하는 것과 달리, Cuba 프로그램은 역사적으로 TWEA §5(b)의 지속 근거 위에 서 있다는 점이 특징이다. + +- **쉬운 설명**: A-02의 금지집합에 포함되는 Cuba는 다른 나라들(Iran·North Korea)과 근거법이 다르다 — Iran·NK 등은 IEEPA(§1702), Cuba는 TWEA §5(b)다. 실무상 A-02의 판정 로직에는 차이가 없다(둘 다 "prohibitedJurisdictions에 속하면 차단"). 다만 법적 근거가 프로그램마다 다를 수 있다는 점, 그래서 금지집합을 "단일 법의 산물"이 아니라 "여러 근거법 아래 여러 프로그램의 합집합"으로 이해해야 한다는 점이 중요하다. 이는 금지집합을 하드코딩하지 않고 프로그램 단위로 관리해야 하는 또 다른 이유다. + +- **PASS/FAIL 반영**: 보조(수권) — A-02가 판정하지 않는다. Cuba가 prohibitedJurisdictions에 포함되는 근거가 TWEA §5(b)임을 명시하는 데 쓴다. + +- **ERC-3643 변환**: sanctionsPolicy.prohibitedJurisdictions에 CU(Cuba) 포함, program 메타에 authority = TWEA_5B 태그. + +### 3.12 Iran ITSR §560.204 — 관할 기반 서비스 수출 금지 (대표 프로그램) [ecfr.gov] + +- **조항**: Iranian Transactions and Sanctions Regulations §560.204, 31 C.F.R. §560.204 — ecfr.gov (현행) + +- **핵심 원문**: Except as otherwise authorized pursuant to this part, and notwithstanding any contract entered into or any license or permit granted prior to May 7, 1995, the exportation, reexportation, sale, or supply, directly or indirectly, from the United States, or by a United States person, wherever located, of any goods, technology, or services to Iran or the Government of Iran is prohibited, including the exportation, reexportation, sale, or supply of any goods, technology, or services to a person in a third country undertaken with knowledge or reason to know that: (a) Such goods, technology, or services are intended specifically for supply, transshipment, or reexportation, directly or indirectly, to Iran or the Government of Iran; or (b) Such goods, technology, or services are intended specifically for use in the production of, for commingling with, or for incorporation into goods, technology, or services to be directly or indirectly supplied, transshipped, or reexported exclusively or predominantly to Iran or the Government of Iran. + +- **한국어**: 이 part에서 달리 허가된 경우를 제외하고, 그리고 1995년 5월 7일 이전에 체결된 계약이나 부여된 license·permit에도 불구하고, 미국으로부터 또는 (소재지 불문) 미국인에 의한, 이란 또는 이란 정부에 대한 goods·technology·services의 수출·재수출·판매·공급을 직접·간접으로 하는 것은 금지된다. 여기에는, (a) 그 goods·technology·services가 직접·간접으로 이란(정부)에 공급·환적·재수출될 목적임을, 또는 (b) 이란(정부)에 배타적·주로 공급될 goods 등의 생산·혼합·편입에 사용될 목적임을, 알거나 알 만한 이유가 있으면서(with knowledge or reason to know) 제3국의 자에게 공급하는 것도 포함된다. + +- **쉬운 설명**: 이것이 "관할 기반 금지"가 실제로 어떻게 작동하는지를 보여주는 대표 조문이다. 핵심은 "services … to Iran" — 이란(또는 이란 정부, 또는 이란 소재자)에게 서비스를 제공하는 것 자체가 금지다. Decipher가 이란 거주자에게 DEX 거래 서비스를 제공·체결하면 이는 금지된 서비스 수출(exportation of services)에 해당할 수 있다. 그리고 이 조문에는 명단(SDN)이 등장하지 않는다 — 이란 소재라는 관할만으로 걸린다는 점이 A-02(관할)와 A-01(명단)의 분업을 정확히 드러낸다. 또 "reason to know"로 우회(제3국 경유)까지 포섭하므로, A-02는 표면 거주지뿐 아니라 회피 신호(§12 IP/VPN)도 운영 차원에서 고려해야 한다. 다른 포괄제재 프로그램(North Korea Sanctions Regulations 31 CFR Part 510, Cuban Assets Control Regulations 31 CFR Part 515 등)도 구조는 유사하다 — 이 §560.204는 그 대표 예시다. + +- **PASS/FAIL 반영**: 직접 ○ (금지 기제) — 매수인의 거주·국적·설립지가 이란(또는 그 밖 포괄제재역)이면 이 유형의 서비스 수출 금지에 걸려 FAIL_SANCTIONED_JURISDICTION(hard block). + +- **ERC-3643 변환**: sanctionsPolicy.prohibitedJurisdictions에 IR(Iran) 포함. 판정: residence ∈ prohibitedJurisdictions ∨ nationality ∈ prohibitedJurisdictions ∨ incorporationJurisdiction ∈ prohibitedJurisdictions → 차단. + +### 3.13 포괄제재 관할 집합 + E.O. 13685·14065·14312 — 동적 파라미터의 근거 [federalregister.gov · ofac.treasury.gov] + +- **근거**: 지역·국가 포괄제재를 지정·해제하는 Executive Order와 그 이행규칙 — E.O. 13685(2014, Crimea 지역), E.O. 14065(2022, 이른바 DNR·LNR 및 추가 지정 지역), Ukraine-/Russia-Related Sanctions Regulations(31 CFR Part 589), E.O. 14312(2025, Syria 국가비상사태 종료·기존 Syria E.O. 취소) — federalregister.gov·ofac.treasury.gov + +- **현행 포괄제재 집합(2026-07 기준, 확인)**: 미국이 현재 포괄제재(comprehensive embargo)를 유지하는 관할은 **Cuba · Iran · North Korea**, 그리고 우크라이나의 피점령 지역인 **Crimea · 이른바 Donetsk(DNR) · Luhansk(LNR) 지역**이다. 이들 관할에 대해서는 특정·일반 license가 없는 한 미국인과 그 관할 소재 사람·재산 간 거의 모든 거래·서비스·수출이 금지된다. + +- **Syria — 목록이 변한다는 결정적 실례**: Syria는 오랫동안 포괄제재 대상이었으나, 2025년 6월 30일 OFAC이 Syria 포괄제재를 종료(E.O. 14312로 국가비상사태 종료·관련 E.O. 취소)했다. 따라서 2026년 7월 현재 Syria는 포괄제재역이 아니다(다만 특정 개인·단체에 대한 SDN 지정 등 명단 기반 제재는 잔존할 수 있으며, 이는 A-01 소관이다). 반대로 Russia는 국가 전체가 포괄제재역은 아니고 강력한 sectoral·targeted 제재 대상이며, 우크라이나의 Zaporizhzhia·Kherson 지역은 부분 점령이나 포괄제재 "covered region"으로 지정되지는 않았다. + +- **쉬운 설명**: 이 절의 요점은 조문 하나가 아니라 설계 원칙이다 — **포괄제재역 목록은 하드코딩할 수 없다.** Syria 사례가 이를 증명한다. Syria는 어제까지 금지집합의 확실한 원소였다가 하루아침에 빠졌다. 만약 A-02가 "Cuba·Iran·NK·Syria"를 코드에 박아 두었다면, 2025년 6월 30일부터 잘못된 판정(합법 거래를 차단)을 하게 된다. 그래서 A-02의 금지집합(prohibitedJurisdictions)은 반드시 Operator가 유지·갱신하는 동적 파라미터여야 하고, OFAC의 프로그램 페이지·E.O.·SDN List 갱신을 정기적으로 반영해야 한다(§11 운영). A-02의 로직(집합 대조)은 고정이지만, 그 로직이 참조하는 데이터(집합의 내용)는 살아 움직인다. + +- **PASS/FAIL 반영**: 핵심(파라미터 근거) — A-02는 이 집합의 "현재 값"을 대조한다. 값의 갱신은 Operator layer의 의무이며(§11), 갱신 지연은 컴플라이언스 리스크로 관리된다. + +- **ERC-3643 변환**: sanctionsPolicy = { prohibitedJurisdictions: Set, coveredRegions: Set, version, lastSyncedAt, source }. Manifest·Operator가 서명·버전 관리, A-02는 대조만. + +### 3.14 판례·Preemption (Layer 3·Background) — Morrison / NSMIA §18 [supremecourt.gov · uscode.house.gov] + +- **Morrison v. National Australia Bank, 561 U.S. 247 (2010)** — supremecourt.gov·govinfo.gov. 미국 증권법(특히 Exchange Act §10(b))의 역외적용에 관하여, "미국 거래소 상장 증권" 또는 "미국 내에서 이루어진 증권 거래"에만 적용된다는 이른바 transactional test를 세웠다. 취지 — 증권법의 국경은 발행인·투자자의 국적이 아니라 "거래가 어디서 일어났는가"로 그어진다. 이는 Regulation S의 속지주의(§230.901: "미국 안" 거래에만 §5 적용)와 궤를 같이하는 판례적 토대다. A-02는 이 원칙을 직접 판정하지 않으나, 축 1이 "국적"이 아니라 "거주·거래 소재(U.S. person·offshore transaction)"를 보는 이유의 배경으로 인용한다. + +- **NSMIA §18 — 15 U.S.C. §77r** — uscode.house.gov. Rule 506 발행분은 "covered security"로서 주(州)의 증권 등록·자격 요건이 preempt된다(주는 notice-filing과 사기 방지 권한만 보유). 취지 — 미국 내 관할 문제 중 "州(state)" 단위는 A-02의 대상이 아니라 발행·notice-filing 레이어에서 처리된다. A-02는 국가·지역(country/region) 단위 관할만 본다는 경계를 이 조문으로 확인한다. + +- **PASS/FAIL 반영**: 보조 — 둘 다 A-02가 판정하지 않는다. 축 1의 속지주의 근거(Morrison)와 州 단위 경계(NSMIA §18)를 확인하는 해석 자료다. + +### 3.15 Sub-요건 분해 매트릭스 + +아래는 §3.1~§3.14의 요건을 A-02가 실제로 확인하는 원자적 검증 단위로 분해한 것이다. 각 행은 §5.2 pseudocode의 한 단계와 1:1 대응하며, reasonCode는 §6.2 거절 코드와 일치한다. + +| # | 원자 검증 단위 | 근거 | 축 | 판정 방식 | 실패 코드 | +| --- | --- | --- | --- | --- | --- | +| S1 | 관할 claim(거주·국적·설립지) 존재·서명·신뢰기관·신선도 | 검증구조(A-11 연동) | 전제 | 존재·암호 검증·timestamp | FAIL_JURISDICTION_CLAIM_INVALID / _EXPIRED | +| S2 | 거주·국적·설립지가 prohibitedJurisdictions(포괄제재역)에 속하는가 | IEEPA §1702/§1705, §560.204, E.O.(§3.13) | 축 2 | 집합 소속(∈) | FAIL_SANCTIONED_JURISDICTION (hard) | +| S3 | 관할이 allowedJurisdictions(증권법 허용집합; Phase 1 = US)에 속하는가 | §230.901, §230.902(k) | 축 1 | 집합 소속(∈) | FAIL_JURISDICTION_NOT_ALLOWED | +| S4 | U.S. person 여부(자연인 거주·법인 설립·(viii) anti-abuse) | §230.902(k)(1)·(2) | 축 1 | claim 값 대조 | FAIL_JURISDICTION_NOT_ALLOWED | +| S5 | 법인 매수인이면 설립지·구성원 관할 look-through | §230.902(k)(1)(viii), §3.13, A-09 | 축 1·2 | cascade(A-09) | FAIL_ENTITY_JURISDICTION | +| S6 | 이중국적·거주 변경·라이선스(일반허가) 여지의 경계 판단 | 프로그램별 general license, (§12) | 양축 | 수동 검토 | REVIEW_JURISDICTION_UNCERTAIN | + +**설계 원칙 — 순서.** S1(전제) → S2(제재, hard block) → S3·S4(증권법) → S5(법인) → S6(경계) 순으로, 값싸고 되돌릴 수 없는 검사(제재)를 앞에 두어 fail-fast한다. 특히 S2를 S3보다 앞에 두는 이유는, 제재 적중은 어떤 경우에도 통과가 없으므로 증권법 lane 판정에 자원을 쓰기 전에 먼저 끊는 것이 안전하기 때문이다. + +### 3.16 ERC-3643 변환·claim 총정리 + +§3.1~§3.14의 조문을 ERC-3643(T-REX) 온체인 요소로 매핑한 종합표다. A-02는 아래 claim·파라미터를 읽어 결정론적으로 판정하며, 사실 판단(거주·국적·설립지·U.S. person 여부)은 모두 off-chain(Sumsub)에서 이루어진다. + +| 온체인 요소 | 값/타입 | 근거 조문 | A-02가 하는 일 | +| --- | --- | --- | --- | +| claim.topic = US_PERSON_STATUS | {US_PERSON, NON_US_PERSON} + basis | §230.902(k) | lane 분기(축 1) | +| claim.topic = RESIDENCE | ISO 3166 관할 코드 | §230.902(k)(i), 3b-4(c) | 축 1·축 2 대조 + D-01 입력 | +| claim.topic = NATIONALITY | ISO 3166 관할 코드 | §1702, §560.204 | 축 2 대조 | +| claim.incorporationJurisdiction | ISO 3166 (법인) | §230.902(k)(viii) | 법인 축 1·2 + A-09 | +| sanctionsPolicy.prohibitedJurisdictions | Set | §1702/§1705, §560.204, E.O. | 축 2 금지집합(∈ → 차단) | +| sanctionsPolicy.coveredRegions | Set | E.O. 13685·14065 | 지역 포괄제재 대조 | +| policy.allowedJurisdictions | Set (Phase 1={US}) | §230.901, §230.902(k) | 축 1 허용집합 | +| asset.manifest.regsLaneEnabled | bool (Phase 1=false) | §230.901·903·904 | 역외 lane 개폐 | +| asset.manifest.issuanceFramework | REG_D_506C | §4(b)/506(c) | 미국 lane 전제 | +| (연동) A-01 SDN 결과 | PASS/FAIL | 별도 | 병렬 AND | +| (연동) A-11 신선도 | 유효/만료 | 별도 | S1 게이트 | +| (연동) A-09 look-through | 구성원 관할 | 별도 | S5 cascade | + +## §4. ② 입력 사실 — 판정에 필요한 데이터 + +**왜 입력부터 정리하나.** A-02의 판정은 결정론적이지만, 그 판정이 먹는 재료(거주·국적·설립지)는 온체인이 스스로 알 수 없는 사실이다. 이 절은 "그 사실을 어디서, 어떤 형태로, 어떻게 받아 오는가"를 정리한다. 재료의 신뢰가 판정의 신뢰를 결정하므로, 입력의 출처와 형태를 명확히 하는 것이 §5 로직만큼 중요하다. + +### 4.1 본 부품이 판정하려면 어떤 증거가 필요한가 + +A-02가 두 축을 판정하려면 다음 사실이 확정되어 있어야 한다. + +- **자연인 매수인**: 거주 관할(country of residence)과 국적(nationality). 거주는 축 1(U.S. person)·축 2(제재)·D-01(FPI 카운트)에 모두 쓰이고, 국적은 주로 축 2(제재 관할)에 쓰인다. + +- **법인 매수인**: 설립 관할(jurisdiction of incorporation/organization)과, §230.902(k)(viii) anti-abuse·포괄제재 우회 판단을 위한 구성원 관할(A-09 look-through 결과). + +- **U.S. person 판정 결과**: 위 사실에 §230.902(k)를 적용해 Sumsub이 내린 isUSPerson 값(자연인 거주·법인 설립·(viii) 예외 반영). + +- **정책 파라미터(자산·시스템 측)**: allowedJurisdictions(Phase 1 = US), prohibitedJurisdictions·coveredRegions(현행 포괄제재 집합), regsLaneEnabled(Phase 1 = false). + +### 4.2 Data field — DEX가 실제로 읽는 항목 + +| 필드 | 출처 | 타입/예시 | 쓰이는 축 | +| --- | --- | --- | --- | +| claim.residence | Sumsub KYC → 서명 claim | ISO 3166-1 (예: US, KR, IR) | 축 1·축 2·D-01 | +| claim.nationality | Sumsub KYC → 서명 claim | ISO 3166-1 (복수 가능) | 축 2 | +| claim.isUSPerson | Sumsub 판정 → 서명 claim | {US_PERSON, NON_US_PERSON} + basis | 축 1 | +| claim.incorporationJurisdiction | Sumsub(법인 KYB) → 서명 claim | ISO 3166-1 | 축 1·축 2(법인) | +| claim.issuer / signature | Trusted Issuer(Sumsub) | 주소·서명 | S1 전제 | +| claim.verifiedAt | Trusted Issuer | timestamp | S1 신선도(A-11) | +| policy.allowedJurisdictions | 시스템 정책 파라미터 | Set (Phase 1 = {US}) | 축 1 | +| sanctionsPolicy.prohibitedJurisdictions | Operator 유지 파라미터 | Set (Cuba·Iran·NK 등) | 축 2 | +| sanctionsPolicy.coveredRegions | Operator 유지 파라미터 | Set (Crimea·DNR·LNR) | 축 2 | +| asset.manifest.regsLaneEnabled | Manifest | bool (Phase 1 = false) | 축 1 lane | + +**유의.** residence·nationality는 별개 필드다 — 한 사람이 미국 거주·이란 국적일 수 있고, 그 경우 축 1(거주 기준)은 US_PERSON이어도 축 2(제재)는 국적으로 걸릴 수 있다. 두 필드를 하나로 뭉개면 이런 케이스를 놓친다. + +### 4.3 수집 경로 — 5단계 흐름 + +1. **매수인 신원확인(KYC/KYB) 개시**: 매수인이 frontend에서 Sumsub 온보딩을 시작한다(자연인은 KYC, 법인은 KYB). + +2. **관할 사실 확정**: Sumsub이 신분증·주소증빙·법인등기 등으로 거주지·국적·(법인)설립지를 확정한다. 이 단계에서 §230.902(k) 기준으로 U.S. person 여부도 판단한다. + +3. **claim 서명·발급**: Sumsub(Trusted Issuer)이 residence·nationality·isUSPerson·incorporationJurisdiction claim을 서명해 매수인 ONCHAINID에 부착한다. + +4. **정책 파라미터 로드**: A-02가 거래 시점의 allowedJurisdictions·prohibitedJurisdictions·coveredRegions·regsLaneEnabled를 읽는다(포괄제재 집합은 Operator가 최신으로 유지). + +5. **판정**: A-02가 claim 값과 정책 파라미터를 집합 대조해 PASS/FAIL/REVIEW를 반환한다(§5). + +### 4.4 갈래별 증거 예시 + +- **미국 거주 자연인(전형)**: residence=US, nationality=US, isUSPerson=US_PERSON → 축 1 통과(미국 lane), 축 2 무적중 → PASS(A-01 등 병렬 검사 별도). + +- **미국 거주·이란 국적 자연인**: residence=US, nationality=IR, isUSPerson=US_PERSON → 축 1은 통과하나 축 2에서 nationality=IR이 prohibitedJurisdictions 적중 → FAIL_SANCTIONED_JURISDICTION(hard). 국적만으로도 제재역 접점이면 차단된다는 보수적 정책(§12 OD-A02 참조). + +- **비미국 거주 자연인(예: 한국 거주)**: residence=KR, isUSPerson=NON_US_PERSON → 축 2 무적중이나 축 1 allowedJurisdictions(={US}) 밖 → FAIL_JURISDICTION_NOT_ALLOWED(Reg S 유보). 자격 미달이 아니라 lane 미개방. + +- **법인 매수인(BUIDL 전형)**: incorporationJurisdiction=US(또는 (viii) 예외 충족 외국법인), 구성원 관할 look-through(A-09) 통과 → 축 1·2 통과. 설립지 또는 구성원이 제재역이면 FAIL_ENTITY_JURISDICTION. + +## §5. ③ 판정 로직 — 어떻게 PASS/FAIL이 결정되는가 + +### 5.0 판정 흐름 플로우차트 + +아래 그림은 A-02가 입력 claim을 받아 두 축을 순서대로 통과시키는 런타임 흐름이다 — 입력(거주·국적·(법인)설립지) → Gate 1(전제: 존재·진위·신선도) → Gate 2(제재 blocklist, hard block) → Gate 3(증권법 allowlist) → Gate 4(법인 look-through) → 경계 판단(이중국적·거주 변경·라이선스) → PASS. 각 게이트의 상세는 §5.2. + +![A-02 fig50 런타임 판정 흐름](A-02_fig50.png) + +### 5.1 전체 흐름 (사람 말로) + +매수인의 관할 claim이 들어오면, A-02는 먼저 그 claim이 믿을 만한지(있는가·서명이 유효한가·신뢰기관이 발급했나·너무 오래되지 않았나)를 값싸게 확인한다. 그다음 되돌릴 수 없는 검사인 제재부터 본다 — 거주·국적·설립지 중 하나라도 포괄제재역에 걸리면 그 자리에서 hard block이다. 제재를 통과하면 증권법 축을 본다 — Phase 1에서는 U.S. person이어야 통과하고, 아니면 lane 미개방으로 유보 차단이다. 법인이면 설립지와 구성원 관할까지 look-through한다. 마지막으로 이중국적·거주 변경·일반허가(license) 같은 경계 케이스는 사람(Operator)이 본다. 모든 축을 통과하면 A-02는 PASS를 반환하고, 같은 거래의 다른 검사(A-01 SDN·A-03 자격·A-04 신원)와 함께 AND로 최종 판정된다. + +### 5.2 Pseudocode + 단계별 해설 + +**검사 순서 한눈에 보기 — 왜 이 순서인가** + +| 순서 | 검사 | 무엇을 확인 | 실패 코드 | 비용 | 왜 이 위치인가 | +| --- | --- | --- | --- | --- | --- | +| 1 | claim 전제(S1) | 존재·서명·신뢰기관·신선도 | _CLAIM_INVALID/_EXPIRED | 매우 낮음 | 판정 대상 자체의 신뢰 확보 | +| 2 | 제재 blocklist(S2) | 거주·국적·설립지 ∈ 포괄제재역 | _SANCTIONED_JURISDICTION | 낮음(집합 대조) | 되돌릴 수 없는 검사 → 최우선 fail-fast | +| 3 | 증권법 allowlist(S3·S4) | U.S. person ∧ 관할 ∈ 허용집합 | _JURISDICTION_NOT_ALLOWED | 낮음(집합 대조) | 제재 통과분에만 lane 판정 | +| 4 | 법인 look-through(S5) | 설립지·구성원 관할 | _ENTITY_JURISDICTION | 높음(A-09 cascade) | 가장 비싼 단계라 맨 뒤 | +| 5 | 경계(S6) | 이중국적·거주변경·license | REVIEW_JURISDICTION_UNCERTAIN | 사람 | 자동 판정 불가분 | + +``` +function check_A_02(prospective_buyer, asset, block, policy, sanctionsPolicy): + # S1: claim 전제 (존재·서명·신뢰기관·신선도) + jc = ONCHAINID.getJurisdictionClaims(prospective_buyer) # residence, nationality, isUSPerson, (incorp) + if jc == null or not Cryptography.verify(jc.signature, jc.issuer): + return FAIL_JURISDICTION_CLAIM_INVALID + if not TrustedIssuerRegistry.contains(jc.issuer): + return FAIL_JURISDICTION_CLAIM_INVALID # 신뢰기관 아님(운영 알림) + if not A_11.isFresh(jc.verifiedAt, block.timestamp): # 신선도는 A-11 위임 + return FAIL_JURISDICTION_CLAIM_EXPIRED + + # S2: 제재 blocklist (hard block) — 되돌릴 수 없음 + jset = { jc.residence, jc.nationality } # 자연인 + if asset_buyer_is_entity(prospective_buyer): + jset = jset ∪ { jc.incorporationJurisdiction } + if (jset ∩ sanctionsPolicy.prohibitedJurisdictions) != ∅ + or region_hit(prospective_buyer, sanctionsPolicy.coveredRegions): + return FAIL_SANCTIONED_JURISDICTION # hard block, 갱신 불가 + + # S3·S4: 증권법 allowlist (Phase 1 = US only) + if jc.isUSPerson == US_PERSON: + us_lane = true + else: + us_lane = false + if us_lane and (jc.residence in policy.allowedJurisdictions): + pass_axis1 = true + elif (not us_lane) and asset.manifest.regsLaneEnabled: + pass_axis1 = check_offshore_transaction(prospective_buyer, asset) # Reg S (유보 시 도달 안 함) + else: + return FAIL_JURISDICTION_NOT_ALLOWED # 非US person + Reg S 유보 + + # S5: 법인 look-through (설립지·구성원 관할) + if asset_buyer_is_entity(prospective_buyer): + lt = check_A_09_jurisdiction(prospective_buyer, sanctionsPolicy, policy) + if lt == FAIL: + return FAIL_ENTITY_JURISDICTION + if lt == IN_PROGRESS: + return REVIEW_JURISDICTION_UNCERTAIN # suspend, 대기 + + # S6: 경계 (이중국적·거주 변경·license 여지) + if boundary_case(jc, sanctionsPolicy): # 예: 일반허가 대상 활동, 최근 거주 변경 + return REVIEW_JURISDICTION_UNCERTAIN + + return PASS +``` + +- **S1 해설**: 관할 claim이 있고, 서명이 유효하며, 발급자가 Trusted Issuer 명부에 있고, 신선도(A-11)가 유효한지를 본다. 신선도 판정 자체는 A-11에 위임한다 — A-02는 그 결과만 게이트로 쓴다. 서명이 깨졌거나 발급자가 명부에 없으면 _CLAIM_INVALID(대개 운영 이슈라 관리자 알림), 오래됐으면 _CLAIM_EXPIRED. + +- **S2 해설**: 여기가 제재 축이다. 자연인은 거주·국적을, 법인은 설립지까지 합쳐 포괄제재역 집합과 교집합을 본다. 하나라도 걸리면 즉시 hard block이며, 이 실패는 갱신·재KYC로 풀리지 않는다(§3.10 IEEPA 형사 리스크). coveredRegions(Crimea·DNR·LNR)는 국가가 아니라 지역이라 별도 region 판정 함수로 확인한다. S2를 S3보다 앞에 둔 것은 되돌릴 수 없는 검사를 먼저 끊기 위함이다. + +- **S3·S4 해설**: 증권법 lane 판정이다. Phase 1에서는 isUSPerson=US_PERSON이고 거주가 허용집합(={US})에 있어야 통과(미국 lane). 비 U.S. person은 regsLaneEnabled=true여야 offshore-transaction 검사(§3.5)로 넘어가는데, Phase 1은 false이므로 그 가지에 도달하지 않고 _JURISDICTION_NOT_ALLOWED로 끝난다. 이 실패는 "자격 미달"이 아니라 "lane 미개방"이라, Reg S를 열면 자연스럽게 확장된다. + +- **S5 해설**: 법인 매수인이면 설립지와 구성원 관할을 A-09 look-through로 확인한다. 설립지가 제재역이거나(축 2), (viii) anti-abuse에 걸리거나(축 1), 구성원 중 제재역 접점이 있으면 _ENTITY_JURISDICTION. look-through가 아직 진행 중이면 거절이 아니라 대기(REVIEW/suspend)로 둔다 — 자료가 채워지면 통과할 수 있기 때문이다. + +- **S6 해설**: 자동으로 결정할 수 없는 경계는 사람이 본다. 예 — 최근 거주지를 옮겨 claim과 실거주가 어긋나는 경우, 특정 일반허가(general license)로 예외 허용될 여지가 있는 활동, 이중국적으로 축 2 판단이 갈리는 경우. 이들은 REVIEW_JURISDICTION_UNCERTAIN으로 Operator 큐에 넣는다. + +### 5.3 판정 매트릭스 (포함성·부등호 명시) + +A-02의 핵심 판정은 수치 임계가 아니라 집합 소속(∈/∉)이다. 다만 연동 축(D-01·FPI)에 넘기는 값에는 부등호가 있으므로 함께 정리한다. + +| 항목 | 판정 | 근거 | 경계·부등호 | +| --- | --- | --- | --- | +| 제재역 소속 | jset ∩ prohibitedJurisdictions ≠ ∅ → 차단 | §1702/§1705, §560.204 | 교집합이 공집합이 아니면(∅ 초과) 차단. 원소 1개라도 적중이면 hard block | +| 증권법 허용 | residence ∈ allowedJurisdictions(={US}) → 통과 후보 | §230.901·902(k) | 집합 소속(∈). Phase 1은 US 단일 | +| U.S. person | isUSPerson = US_PERSON → 미국 lane | §230.902(k) | 값 일치(=) | +| (연동) FPI 면제 경계 | 미국 거주 record holder < 300 → 면제 유지 | Rule 12g3-2(a) | 미만(<). 300 도달 시 면제 상실(D-01 소관) | +| (연동) FPI 판정 | 미국 거주 의결권 > 50% 등 → FPI 아님 | Rule 3b-4(c) | 초과(>). A-02는 입력만 공급 | +| claim 신선도 | verifiedAt이 상한 이내 → 유효 | A-11 위임 | A-11 정책(초과 시 만료) | + +**부등호 규율 재확인.** 제재 판정은 "교집합 ≠ ∅"(원소가 하나라도 있으면 차단)이라 사실상 "≥ 1개 적중 → 차단"이다. FPI 면제 경계는 "fewer than 300"이므로 미만(< 300)이고 300은 면제 상실 쪽이다. FPI 판정 요건은 "more than 50 percent"이므로 초과(> 50%)다. A-02는 이 부등호 계산을 직접 하지 않고 거주 입력만 D-01에 넘긴다. + +### 5.4 취득 시점 — 어느 시점의 관할·정책을 기준으로 보나 + +관할 판정에는 두 개의 "시점" 문제가 있다. 첫째는 매수인의 관할을 어느 시점 기준으로 볼 것인가(거주는 변할 수 있다), 둘째는 제재·정책 파라미터를 어느 시점 값으로 볼 것인가(포괄제재 목록은 변한다). + +| 시점 후보 | "취득 시점" 부합도 | 운영 리스크 | +| --- | --- | --- | +| claim 발급 시점(verifiedAt) | 낮음 — 발급 후 거주 변경·목록 변경 반영 안 됨 | 높음(오래된 관할·구목록) | +| 거래 매칭 시점(off-chain) | 중간 — 아직 정산 미확정 | 중간 | +| 블록 확정 시점(block.timestamp) | 최적 — 실행 시점의 claim·정책을 함께 평가 | 낮음 | + +**Decipher 권고**: 블록 확정 시점(block.timestamp)을 기준으로, 그 시점에 유효한 claim(신선도는 A-11)과 그 시점의 sanctionsPolicy 버전을 함께 평가한다. 이렇게 하면 "발급은 과거지만 실행 시점에 목록이 바뀐" 경우(예: 실행 직전 특정 관할이 포괄제재역으로 추가됨)를 반영할 수 있다. 특히 제재 목록은 발효 즉시 적용되므로, A-02는 캐시된 구목록이 아니라 실행 시점의 최신 sanctionsPolicy를 참조해야 한다(§11 운영). offshore transaction의 "buy order 개시 시점"(§3.5) 기준과의 정합은 Reg S 개방 시 변호사 확인 대상이다(§12). + +### 5.5 비결정성을 결정성으로 — 본 부품 구현의 본질 + +A-02는 겉으로 순수한 결정론적 집합 대조처럼 보이지만, 그 대조가 먹는 값에는 두 겹의 비결정론적 판단이 숨어 있다. 첫째는 **거주·국적·설립지·U.S. person 여부의 사실 판단**이다 — "이 사람이 미국에 거주하는가"는 주소증빙·체류일수·생활 실질을 종합한 판단이고, "(viii) anti-abuse 외국법인인가"는 설립 의도 판단이다. 이 판단들은 온체인 코드로 재현할 수 없다. 그래서 Sumsub(Trusted Issuer)이 off-chain에서 판단하고 그 결과를 claim으로 부호화한다. 둘째는 **제재 목록의 해석·갱신**이다 — 어느 관할이 지금 포괄제재역인지는 E.O.·프로그램·general license를 해석해 정하는 문제이며, 이를 sanctionsPolicy 파라미터로 부호화한다. + +즉 본 부품의 구현 본질은 "**비결정적 관할 판단(사실·정책)을 두 겹의 서명된 데이터(claim·sanctionsPolicy)로 캡슐화하고, 온체인은 그 데이터를 집합 대조하는 결정론적 확인만 하는 것**"이다. + +**쉽게 말하면(비유).** 출입국 심사대의 자동 게이트를 떠올리면 된다. 게이트 자체는 "여권 칩이 유효한가, 이 여권이 입국금지 명단에 있는가"를 기계적으로 대조할 뿐이다. 그러나 그 여권에 찍힌 국적·거주는 사람(심사관·발급기관)이 판단해 넣은 것이고, 입국금지 명단은 정부가 정책으로 갱신한 것이다. A-02도 똑같다 — 기계는 대조만 하고, 관할이라는 사실 판단과 금지 목록이라는 정책 판단은 사람(Sumsub·Operator)이 한다. + +## §6. ④ 거절·예외 처리 — 검사에 실패하면 어떻게 되는가 + +### 6.1 전체 흐름 (사람 말로) + +검사가 실패하면 거래가 그 자리에서 차단되거나(reject), 일부 경우엔 대기 상태로 전환된다(suspend). 어떤 종류의 실패인지에 따라 ① 매수인에게 보이는 메시지, ② 매수인이 해야 할 다음 행동, ③ Decipher 측 조치가 크게 달라진다. 특히 A-02는 "되돌릴 수 있는 실패(비미국인·claim 만료)"와 "되돌릴 수 없는 실패(제재역)"를 엄격히 분리한다 — 전자는 안내·갱신·Reg S 개방으로 풀리지만, 후자는 어떤 조치로도 통과되지 않는다. + +### 6.2 Failure codes + +| Code | 언제 뜨나 | 무엇이 문제인가 | 되돌릴 수 있나 | 매수인이 할 일 / Decipher 측 조치 | +| --- | --- | --- | --- | --- | +| FAIL_SANCTIONED_JURISDICTION | 거주·국적·설립지 중 하나가 포괄제재역(Cuba·Iran·NK·Crimea/DNR/LNR 등) | 제재법상 거래 금지(IEEPA §1705) | ✕ 불가(hard block) | 매수인: 없음(거래 불가). Decipher: 차단 기록·컴플라이언스 로그, 필요 시 SAR/보고 검토(운영) | +| FAIL_JURISDICTION_NOT_ALLOWED | 비 U.S. person + Reg S 역외 lane 유보(Phase 1) | 증권법상 판매 lane 미개방(자격 미달 아님) | △ Reg S 개방 시 가능 | 매수인: 현재 지원 관할 아님 안내. Decipher: Reg S 로드맵 안내, 정책 확장 시 재시도 | +| FAIL_JURISDICTION_CLAIM_INVALID | 관할 claim 결측·서명 위조·발급자 미신뢰 | 관할 증명 자체가 없거나 신뢰 불가 | ○ 재KYC로 가능 | 매수인: Sumsub에서 KYC 시작/재발급. Decipher: 발급자 명부 갱신 검토·관리자 알림 | +| FAIL_JURISDICTION_CLAIM_EXPIRED | verifiedAt이 신선도 상한 초과(A-11) | 관할 증명이 오래됨 | ○ 갱신으로 가능 | 매수인: 관할 claim 갱신. Decipher: frontend에 갱신 안내 | +| FAIL_ENTITY_JURISDICTION | 법인 설립지가 제재역, (viii) anti-abuse 적중, 또는 구성원 관할 실패 | 법인 관할·구성원 관할이 요건 미달 | 경우에 따라(구조·구성원 보강 필요) | 매수인: 구조·구성원 자료 보강 또는 대체 경로. Decipher: A-09 자료 요청·상세 안내 | +| REVIEW_JURISDICTION_UNCERTAIN | 이중국적·거주 변경·일반허가 여지·look-through 진행 중 | 기계가 결정할 수 없는 경계 케이스 | 대기(suspend) | 매수인: 수동 검토 결과 대기. Decipher: Trust Operations 큐 라우팅(SLA 목표 24~72h, 운영 확정) | + +**해설.** 실패의 성격이 세 갈래로 갈린다. (1) **되돌릴 수 없는 것** — FAIL_SANCTIONED_JURISDICTION만 유일하게 갱신·재KYC로 풀리지 않는다. 제재역 접점은 사실이 바뀌지 않는 한(예: 실제 이주) 통과가 없고, 심지어 그런 경우도 목록·상황 변화가 필요하다. (2) **되돌릴 수 있는 것** — CLAIM_INVALID·CLAIM_EXPIRED는 매수인이 KYC를 시작·갱신하면 풀린다. (3) **lane 미개방** — JURISDICTION_NOT_ALLOWED는 매수인 잘못이 아니라 Phase 1 스코프의 결과라, Reg S를 열면 자동 확장된다. 이 세 갈래를 하나의 "실패"로 뭉치면 안 된다 — 매수인에게 "가능성 없음(제재)"과 "지금은 안 됨(lane)"과 "고치면 됨(claim)"을 정확히 구분해 안내해야 하기 때문이다. + +### 6.3 Manual Review Path (REVIEW_JURISDICTION_UNCERTAIN 처리) + +자동 판정이 불가능한 경계 케이스는 사람이 처리한다. 흐름은 이렇다. + +- 거래가 suspend(거절이 아닌 대기) 상태로 전환된다. + +- REVIEW_JURISDICTION_UNCERTAIN이 수동 검토 큐에 쌓인다. + +- Decipher Trust Operations team이 큐에서 집어 든다(목표 응답시간 SLA는 운영 정책으로 확정). + +- 팀이 추가 증거(예: 실거주 증빙, 이중국적 중 실효적 관할, 해당 일반허가 적용 가능성)를 요청하거나 경계의 법적 판단을 하고, 필요하면 변호사 자문으로 escalate한다. + +- 최종 결정(통과 또는 명시적 FAIL code)을 내리고, 통과면 갱신된 claim으로 반영한다. + +- 모든 결정과 근거(reasoning)를 Compliance Log에 남긴다(off-chain audit trail). 제재 관련 경계 판단은 특히 근거 보존이 중요하다. + +**누가 결정하나**: 관할·제재 경계의 최종 판단 권한은 Decipher Trust Operations(및 필요 시 자문 변호사)에 있고, 그 결정은 새 claim 또는 정책 반영으로 온체인에 남아 다음 거래부터 자동 판정된다. 단, 제재역 명백 적중(S2)은 경계가 아니라 확정 차단이므로 이 경로로 오지 않는다. + +### 6.4 Error message — 매수인 노출용 vs 내부 기록용 분리 + +개인정보 보호와 운영 진단을 분리한다. 매수인에게는 일반적이고 행동 가능한 메시지만 보여주고, 구체적 실패 사유는 내부 audit log에만 남긴다. 제재 관련 메시지는 특히 신중히 표현한다 — 매수인에게 제재 판단의 상세를 노출하는 것은 회피를 조장할 수 있고 개인정보·안전 이슈가 있다. + +| Code | 매수인 노출(frontend) | 내부 기록(audit) | +| --- | --- | --- | +| FAIL_SANCTIONED_JURISDICTION | "현재 이 거래를 진행할 수 없습니다." (구체 사유 비노출) | 적중 관할·필드(residence/nationality/설립지)·정책 버전·timestamp | +| FAIL_JURISDICTION_NOT_ALLOWED | "현재 지원되지 않는 관할입니다. 지원 확대 시 안내드립니다." | isUSPerson 값·거주 관할·lane 상태 | +| FAIL_JURISDICTION_CLAIM_INVALID | "관할 정보 확인이 필요합니다. KYC를 진행해 주세요." | claim 결측/서명 실패/발급자 미신뢰 상세 | +| FAIL_JURISDICTION_CLAIM_EXPIRED | "관할 인증이 만료되었습니다. 갱신해 주세요." | verifiedAt·경과 일수 | +| REVIEW_JURISDICTION_UNCERTAIN | "추가 확인 중입니다. 잠시 후 다시 시도해 주세요." | 경계 유형(이중국적/거주변경/license)·필요 자료 | + +**이유.** 매수인에게 "당신의 국적이 제재역이라 막혔다"고 상세히 노출하면 회피(국적 위장·경유)를 유도하거나 개인의 안전을 위협할 수 있다. 그래서 제재 실패의 노출 메시지는 최소화하고, "왜 막혔나"는 내부 로그에만 상세히 남긴다. lane 미개방(NOT_ALLOWED)은 매수인 잘못이 아니므로 "지원 확대 시 안내" 같은 중립적·희망적 문구를 쓴다. + +## §7. ⑤ 테스트 케이스 — 이 부품이 맞게 동작하는지 어떻게 확인하나 + +**읽는 법.** 아래 케이스는 두 축(증권법·제재)과 각 실패 코드를 모두 커버하도록 설계했다. 각 케이스는 입력 → 기대 결과 → 무엇을 검증하는가 순으로 읽는다. TC-01~TC-04는 정상·기본 실패, TC-05~TC-09는 경계·복합 케이스다. + +### TC-01 — 정상 통과 (미국 거주 자연인) + +- **입력**: residence=US, nationality=US, isUSPerson=US_PERSON, claim 서명 유효·신선, 자산=REG_D_506C. + +- **기대 결과**: S1 통과 → S2 제재 무적중 → S3·S4 미국 lane 통과 → 법인 아님 → 경계 아님 → **PASS**. (A-01 SDN·A-03 자격 등 병렬 검사는 별도.) + +- **검증 포인트**: 정상 미국인 매수가 관할 축에서 막히지 않는가(과잉 차단 방지). + +### TC-02 — 제재역 hard block (이란 거주) + +- **입력**: residence=IR, nationality=IR, isUSPerson=NON_US_PERSON. + +- **기대 결과**: S1 통과 → S2에서 residence=IR이 prohibitedJurisdictions 적중 → **FAIL_SANCTIONED_JURISDICTION**(즉시 종료, S3 미도달). + +- **검증 포인트**: 제재역이 S2에서 즉시 hard block되는가, 그리고 증권법 lane 판정(S3)에 도달하기 전에 끊기는가(fail-fast). 갱신·재KYC로 풀리지 않음도 확인. + +### TC-03 — 비미국인 lane 미개방 (한국 거주) + +- **입력**: residence=KR, nationality=KR, isUSPerson=NON_US_PERSON, regsLaneEnabled=false(Phase 1). + +- **기대 결과**: S1 통과 → S2 무적중 → S3·S4에서 비 U.S. person + Reg S 유보 → **FAIL_JURISDICTION_NOT_ALLOWED**. + +- **검증 포인트**: 비미국인이 "제재"가 아니라 "lane 미개방" 코드로 분리되는가. regsLaneEnabled=true로 바꾸면 offshore-transaction 검사로 넘어가는지도 확인(Reg S 개방 시나리오). + +### TC-04 — claim 만료 (신선도 실패) + +- **입력**: residence=US, isUSPerson=US_PERSON, 그러나 verifiedAt이 A-11 신선도 상한 초과. + +- **기대 결과**: S1의 신선도 게이트에서 **FAIL_JURISDICTION_CLAIM_EXPIRED**(S2 미도달). + +- **검증 포인트**: 신선도 판정이 A-11에 위임되어 만료를 정확히 잡는가. 갱신 후 재시도하면 PASS로 바뀌는가. + +### TC-05 — 경계: 미국 거주·이란 국적 (이중 접점) + +- **입력**: residence=US, nationality=IR, isUSPerson=US_PERSON. + +- **기대 결과**: S1 통과 → S2에서 nationality=IR이 prohibitedJurisdictions 적중 → **FAIL_SANCTIONED_JURISDICTION**. (보수 정책: 국적만으로도 제재역 접점이면 차단. §12 OD-A02에서 이 정책의 적정성·general license 여지를 재검토 대상으로 표시.) + +- **검증 포인트**: residence(축 1)와 nationality(축 2)를 별개 필드로 보아, 축 1은 통과해도 축 2에서 국적으로 걸리는가. 두 필드를 뭉개지 않았는지 확인. + +### TC-06 — 경계: 지역 포괄제재 (Crimea 거주) + +- **입력**: residence=UA(우크라이나)이나 세부 지역이 Crimea로 확인됨(coveredRegions 적중), nationality=UA. + +- **기대 결과**: S2의 region_hit에서 Crimea 적중 → **FAIL_SANCTIONED_JURISDICTION**. (국가 코드 UA 자체는 금지집합이 아니나 지역이 covered region.) + +- **검증 포인트**: 국가 단위(UA는 허용)와 지역 단위(Crimea는 금지)를 구분해, 국가 코드만 보고 통과시키지 않는가. coveredRegions 대조가 별도로 작동하는가. + +### TC-07 — 경계: 목록 변경 반영 (Syria, 종료 후) + +- **입력**: residence=SY(시리아), nationality=SY, isUSPerson=NON_US_PERSON, sanctionsPolicy는 2025-06-30 이후 버전(Syria 제외됨). + +- **기대 결과**: S2에서 SY가 prohibitedJurisdictions에 없음(종료 반영) → 제재 무적중 → S3에서 비 U.S. person + Reg S 유보 → **FAIL_JURISDICTION_NOT_ALLOWED**(제재가 아니라 lane 미개방). 만약 구버전 정책(Syria 포함)을 참조하면 잘못된 SANCTIONED 판정 → 회귀 실패로 감지. + +- **검증 포인트**: sanctionsPolicy가 동적 파라미터로서 최신 버전을 참조하는가. 하드코딩된 구목록으로 합법 거래를 차단하지 않는가(§3.13 핵심 원칙 검증). + +### TC-08 — 법인 look-through 실패 (구성원 제재역) + +- **입력**: 법인 매수인, incorporationJurisdiction=US(적법), 그러나 A-09 look-through 결과 지배 구성원 중 이란 거주자 포함. + +- **기대 결과**: S1·S2(법인 설립지=US 무적중)·S3(법인 US) 통과 → S5의 A-09 look-through에서 구성원 관할 실패 → **FAIL_ENTITY_JURISDICTION**. + +- **검증 포인트**: 법인 설립지가 적법해도 구성원 관할까지 내려가 제재역 접점을 잡는가. A-09 cascade가 관할 관점에서 호출되는가. + +### TC-09 — 법인 (viii) anti-abuse (급조 외국법인) + +- **입력**: 법인 매수인, incorporationJurisdiction=KY(케이맨), 미국인이 미등록 증권 투자 목적으로 형성, 소유자가 자연인(비 적격투자자-법인 예외 미충족). + +- **기대 결과**: §230.902(k)(1)(viii) 적용으로 Sumsub이 isUSPerson=US_PERSON으로 판정(외국법인이나 U.S. person 간주) → S3에서 미국 lane 처리. 만약 설립지 KY가 제재역이 아니고 미국 lane 자격을 갖추면 통과, 아니면 해당 코드로 실패. + +- **검증 포인트**: (viii) anti-abuse가 "외국 설립이라도 U.S. person"으로 뒤집는 로직이 Sumsub claim에 반영되고, A-02가 그 claim을 신뢰해 미국 lane으로 보내는가. 형식 설립지만 보고 비미국인으로 오판하지 않는가. + +**테스트 커버리지 요약.** 위 9개 케이스로 (1) 정상 통과(TC-01), (2) 두 축의 각 실패(TC-02 제재·TC-03 lane·TC-04 claim), (3) 두 필드 분리(TC-05), (4) 지역 단위(TC-06), (5) 동적 목록(TC-07), (6) 법인 look-through(TC-08·TC-09)를 모두 커버한다. 회귀 테스트에는 특히 TC-07(목록 변경)을 상시 포함해, sanctionsPolicy 갱신이 판정에 정확히 반영되는지 지속 검증한다. + +## §8. (α) 증명서 확인형 패턴 — 이 부품은 어떤 유형인가 + +### 8.1 패턴 분류: Pattern A(집합 판정) + 하이브리드 입력 + +본 부품은 판정 로직만 보면 **Pattern A(기계 판정형)**다 — 값(관할 코드)을 허용집합·금지집합과 대조하는 결정론적 집합 연산이며, 확률적·재량적 요소가 로직 안에 없다. 그러나 그 로직이 먹는 입력(거주·국적·설립지·U.S. person 여부)은 **Trusted Issuer(Sumsub)의 서명 claim**에 의존한다. 즉 "판정은 기계, 사실은 신뢰기관"이라는 하이브리드 구조다. + +이 점에서 A-02는 순수 Pattern A(예: 온체인 상태만으로 판정하는 부품)와도, 순수 Pattern B(증명서 확인형, 신뢰기관 attestation을 그대로 신뢰하는 부품)와도 다르다. A-02는 두 성격을 겸한다 — 사실 확정 단계는 Pattern B(attestation 신뢰), 판정 단계는 Pattern A(집합 대조). + +### 8.2 왜 이렇게 나뉘는가 + +관할 사실(거주·설립지·U.S. person 여부)은 본질적으로 온체인에서 재현 불가능한 판단이다(§5.5). "미국 거주"는 체류일수·생활 근거지·세법상 지위 등을 종합한 사실 판단이고, "(viii) anti-abuse 외국법인"은 설립 의도 판단이다. 이런 판단을 스마트컨트랙트가 직접 할 수는 없으므로, 판단은 off-chain 신뢰기관(Sumsub)이 하고 결과만 claim으로 온체인에 올린다(Pattern B적 요소). + +반면 그 결과값을 "허용집합에 있나/금지집합에 있나"로 판정하는 것은 순수 기계 연산이다. 여기엔 재량이 없다 — residence가 US면 US, IR면 IR이고, 집합 소속은 참/거짓으로 확정된다(Pattern A적 요소). 그래서 A-02는 "attestation을 신뢰해 사실을 받고, 그 사실을 결정론적으로 판정하는" 두 단 구조가 된다. + +### 8.3 이 분류가 실무에 주는 함의 + +- **신뢰의 위치.** A-02의 판정 신뢰성은 두 곳에 달려 있다 — Sumsub claim의 정확성(사실 판단)과 sanctionsPolicy의 최신성(정책 판단). 로직 자체는 검증하기 쉽지만(결정론), 입력의 품질은 별도 관리 대상이다(§10·§11). + +- **Pattern B 표준의 적용.** A-02의 attestation 신뢰 부분은 프로젝트의 Pattern B 표준(신뢰기관 자격·재KYC 주기·attestation 신뢰 충분성)을 따른다. 특히 U.S. person 판정 같은 복합 판단은 attestation 신뢰의 충분성 문제와 직결되므로, TA/KYC attestation 신뢰 근거(외부 자문 Q 항목)와 연동해 관리한다. + +- **Pattern A 표준의 적용.** 집합 대조 로직은 결정론이므로 단위 테스트로 완전 검증이 가능하다(§7). 부등호·경계·집합 소속만 정확하면 로직 오류 위험은 낮다. + +## §9. (β) Cross-Element·Cross-Recipe 조율 — 다른 부품과 어떻게 맞물리나 + +### 9.1 A-01(SDN 명단)과의 관계 — 병렬 AND, 소관 분리 + +A-02(관할)와 A-01(명단)은 같은 거래에 병렬로 작동하며 서로를 대체하지 않는다(§1.3). 둘의 관계는 AND다 — 매수가 허가되려면 A-01(명단에 없음)과 A-02(관할 허용·비제재)를 모두 통과해야 한다. + +- **경계.** A-02는 관할(국가·지역 단위 포괄제재)만, A-01은 명단(SDN 개인·법인·지갑, 50% Rule)만 본다. 둘은 겹치지 않는다 — SDN이 아닌 이란 거주자는 A-02가, 허용 관할의 SDN은 A-01이 막는다. + +- **주의.** A-02가 제재역을 통과시켰다고 A-01 검사를 생략하면 안 되고, 그 반대도 마찬가지다. 한 부품이 다른 부품의 소관을 대신 구현하려는 유혹(예: A-02에서 SDN 명단도 같이 보기)은 중복·불일치를 낳으므로 금지한다. + +### 9.2 A-11(claim 신선도)과의 관계 — 게이트 위임 + +A-02의 S1 전제 검사 중 신선도 판정은 A-11에 위임한다. A-02는 "이 관할 claim이 너무 오래됐나"를 스스로 계산하지 않고, A-11의 isFresh 결과를 게이트로 받아 쓴다. 이렇게 하면 신선도 정책(상한·갱신 주기)이 한곳(A-11)에서 관리되어, 관할 claim에도 일관되게 적용된다. + +### 9.3 D-01(보유자 수)과의 관계 — 입력 공급자/소비자 + +A-02는 거주 판정의 **출처(source)**, D-01은 그 **소비처(sink)**다. A-02가 각 매수인의 residence claim을 확정·보존하면, D-01이 그것들을 합산해 "미국 거주 record holder < 300"(FPI 12g3-2(a) 면제 경계)과 §12(g) 2,000명 경계를 감시한다. + +- **책임 경계.** A-02는 "이 사람의 거주가 어디인가"까지만 책임진다. "미국 거주자가 몇 명이고 300·2,000 경계를 넘었나"는 D-01 책임이다. A-02는 카운트·임계를 계산하지 않는다. + +- **정합.** 두 부품의 "거주" 정의가 일치해야 한다 — A-02가 확정한 residence를 D-01이 그대로 세므로, 거주 판정 기준(예: Rule 3b-4(c)의 "resident")이 어긋나면 카운트가 틀어진다. 그래서 거주 claim은 단일 출처(A-02가 신뢰하는 Sumsub claim)로 통일한다. + +### 9.4 A-09(법인 look-through)와의 관계 — 조건부 cascade + +법인 매수인일 때 A-02는 설립지·구성원 관할 판정을 위해 A-09를 호출한다(S5). A-09는 원래 자격(적격투자자·QP) look-through를 담당하지만, A-02는 그 look-through 결과에서 "구성원 관할"을 관할 관점으로 재사용한다. + +- **경계.** A-02는 A-09에게 "구성원이 적격한가"가 아니라 "구성원 관할이 제재역인가/(viii) anti-abuse인가"를 묻는다. 자격 판정은 A-09·A-08 소관, 관할 판정은 A-02 소관이다. 같은 look-through 자료를 두 관점에서 각각 소비한다. + +- **진행 중 처리.** look-through 자료가 미완이면 A-02는 거절이 아니라 REVIEW/suspend로 둔다(§5.2 S5). 자료가 채워지면 자동 재판정된다. + +### 9.5 Recipe별 활성화 — R1·R2·R3 공통, R4 제외 + +본 부품은 R1(Reg D 506(c) 발행)·R2(§4(a)(7)/Rule 144 재판매)·R3(ICA §3(c)(7) 펀드) 세 레시피에 모두 필수 부착된다 — 관할·제재는 발행이든 재판매든 펀드든 항상 걸리는 공통 관문이기 때문이다. R4(시장 행위 감시)에는 부착되지 않는다(R4는 매수인 관할이 아니라 거래 행위 패턴을 본다). + +- **중첩 활성.** 한 거래에서 R1·R3가 함께 켜질 수 있고(발행 겸 펀드 지분), 그 경우 A-02는 한 번만 판정해 두 레시피에 공통으로 쓰인다(고재사용). A-01·B-01과 함께 사실상 전 거래 공통 검사군을 이룬다. + +- **레시피 배타적 상호작용.** Reg S를 여는 시점에는 R1(발행)은 §230.903, R2(재판매)는 §230.904 프레임이 A-02 위에 얹히므로, 같은 관할 판정이라도 레시피에 따라 상위 요건(offshore transaction·directed selling efforts)이 달라진다. 이 상호작용은 Recipe Spec Sheet의 Conflict/Interaction 열에서 별도로 관리한다. + +### 9.6 책임 경계 요약표 + +| 질문 | 담당 부품 | A-02가 하는가 | +| --- | --- | --- | +| 이 사람이 SDN 명단에 있나 | A-01 | 아니오 | +| 이 사람의 관할이 포괄제재역인가 | A-02 | 예 | +| 이 사람이 U.S. person인가 | A-02(Sumsub claim 대조) | 예 | +| 이 사람이 적격투자자·QP인가 | A-03·A-13 | 아니오 | +| claim이 신선한가 | A-11(A-02가 게이트로 사용) | 위임 | +| 미국 거주자가 300·2,000명 넘었나 | D-01 | 아니오(거주 입력만 공급) | +| 법인 구성원이 적격한가 | A-09·A-08 | 아니오 | +| 법인 구성원 관할이 제재역인가 | A-02(A-09 자료 재사용) | 예 | + +## §10. (γ) 3-Layer Solution — 신뢰를 어떻게 나눠 담나 + +관할 판정의 신뢰는 한 곳에 몰아넣지 않고 세 겹으로 나눈다. 각 층은 서로를 보완하며, 어느 한 층이 실패해도 다른 층이 방어한다. + +### 10.1 Layer 1 — Self-Attestation (매수인 자기 신고) + +매수인이 온보딩에서 거주·국적·(법인)설립지를 스스로 신고한다. 이는 출발점일 뿐 최종 근거가 아니다 — 자기 신고만으로는 판정하지 않으며, 반드시 Layer 2의 검증을 거친다. 자기 신고의 가치는 (1) 후속 검증의 대상을 특정하고, (2) 허위 신고 시 책임 귀속의 근거가 된다는 데 있다. + +### 10.2 Layer 2 — Trusted Issuer Attestation (Sumsub 검증·서명) + +Sumsub이 신분증·주소증빙·법인등기 등으로 신고를 검증하고, §230.902(k) 기준 U.S. person 여부까지 판단해 claim으로 서명·발급한다. **이것이 A-02가 실제로 신뢰하는 근거다.** A-02의 온체인 판정은 이 서명 claim을 대조하는 것이며, Layer 1(자기 신고)이 아니라 Layer 2(검증된 claim)를 본다. + +- **신뢰의 조건.** Sumsub이 Trusted Issuer Registry에 등록돼 있어야 하고(S1), claim이 신선해야 하며(A-11), 서명이 유효해야 한다. 이 조건이 깨지면 _CLAIM_INVALID/_EXPIRED로 차단된다. + +- **attestation 충분성.** U.S. person 판정 같은 복합 판단을 Sumsub attestation에 얼마나 의존할 수 있는지는 Pattern B 표준·외부 자문 대상이다(§8.3·§12). + +### 10.3 Layer 3 — Spot-Check / Ongoing Monitoring (사후 점검·재검증) + +주기적·표본적 사후 점검으로 attestation의 지속 유효성을 확인한다. 거주는 변할 수 있고(이주), 제재 목록도 변하므로(§3.13), 발급 시점의 claim이 계속 유효하다고 가정하지 않는다. + +- **재검증 트리거.** claim 신선도 만료(A-11), 거주 변경 신호, 제재 목록 갱신 시 관련 보유자 재판정, 경계 케이스(S6) 발생 시. + +- **제재 목록 변경 반영.** 특정 관할이 새로 포괄제재역으로 지정되면, 그 관할 거주·국적 보유자를 재점검한다(§11 운영). 반대로 해제되면(Syria 사례) 잘못된 차단이 없도록 정책을 갱신한다. + +### 10.4 책임 분배 요약 + +| Layer | 누가 | 무엇을 | 실패 시 | +| --- | --- | --- | --- | +| 1 Self-Attest | 매수인 | 거주·국적·설립지 신고 | 허위 시 책임 귀속·차단 | +| 2 Trusted Issuer | Sumsub | 검증·U.S. person 판정·claim 서명 | _CLAIM_INVALID/_EXPIRED | +| 3 Spot-Check | Decipher Trust Ops | 사후 점검·재검증·목록 변경 반영 | 재검증 큐·정책 갱신 | +| 판정 | A-02(온체인) | claim·정책 집합 대조 | 각 FAIL code | + +**핵심.** A-02(온체인)는 판정만 하고, 신뢰의 실체(사실 검증·정책 갱신)는 Layer 2·3(off-chain)이 담당한다. 온체인은 값싸고 결정론적인 대조에 집중하고, 비싸고 재량적인 판단은 off-chain으로 밀어낸다 — 이것이 비결정성을 결정성으로 캡슐화하는 3층 구조의 실익이다. + +## §11. (δ) Frontend·Off-chain Operator Layer — 사람과 운영이 하는 일 + +### 11.1 Frontend — 매수인이 보는 것 + +- **온보딩 안내.** 관할 claim이 없거나 만료면 KYC/갱신으로 유도한다(_CLAIM_INVALID/_EXPIRED 대응). + +- **실패 안내 분리.** §6.4의 노출 메시지 정책에 따라, 제재 실패는 상세를 숨기고, lane 미개방은 "지원 확대 시 안내"로, claim 문제는 "확인/갱신 필요"로 각각 안내한다. + +- **Reg S 로드맵.** 비미국인에게는 현재 미지원 관할임을 알리되, 향후 확장 가능성을 중립적으로 안내한다(FAIL_JURISDICTION_NOT_ALLOWED). + +### 11.2 Off-chain Operator — 제재 목록·관할 정책의 유지 (가장 중요) + +**이 부품에서 Operator의 핵심 임무는 sanctionsPolicy를 최신으로 유지하는 것이다.** §3.13에서 본 대로 포괄제재 목록은 살아 움직인다(Syria 종료가 그 실례). A-02의 로직은 고정이지만, 그것이 참조하는 데이터가 낡으면 판정이 통째로 틀린다. + +- **제재 목록 동기화.** OFAC 프로그램 페이지·E.O.·SDN List 갱신을 정기적으로 확인해 prohibitedJurisdictions·coveredRegions를 갱신한다. 신규 지정(추가)은 지체 없이 반영해야 하고(과소 차단 = 형사 리스크), 해제(삭제)도 반영해야 한다(과잉 차단 = 합법 거래 차단). + +- **버전·감사.** sanctionsPolicy에 version·lastSyncedAt·source를 남겨, 어느 시점 어느 목록으로 판정했는지 추적 가능하게 한다(§5.4 취득 시점과 정합). + +- **관할 정책 파라미터.** allowedJurisdictions(Phase 1={US})·regsLaneEnabled(Phase 1=false)를 관리한다. Reg S 개방은 이 파라미터 전환 + 상위 요건(§3.5~§3.7) 활성으로 이뤄진다. + +- **general license 반영.** 특정 활동이 일반허가(general license)로 예외 허용되는 경우, 그 예외를 정책·경계 로직(S6)에 반영한다. 이는 법적 판단이 필요하므로 변호사 자문과 연동한다. + +### 11.3 Trust Operations — 경계 케이스 처리 + +REVIEW_JURISDICTION_UNCERTAIN(S6) 큐를 처리한다(§6.3). 이중국적·거주 변경·license 여지·look-through 진행 중 케이스에 대해 추가 증거를 받고 판단하며, 필요 시 변호사로 escalate하고, 모든 근거를 Compliance Log에 남긴다. + +### 11.4 운영 실패 모드 — 무엇을 조심해야 하나 + +| 실패 모드 | 결과 | 방어 | +| --- | --- | --- | +| 제재 목록 갱신 지연(신규 지정 미반영) | 제재역을 통과시킴 → IEEPA 위반 리스크 | 갱신 SLA·자동 동기화·알림 | +| 제재 목록 과잉(해제 미반영) | 합법 거래 차단(Syria형) | 정기 해제 반영·회귀 테스트 TC-07 | +| claim 신선도 방치 | 낡은 거주로 판정 | A-11 게이트·재검증 주기 | +| general license 미반영 | 허용 가능 거래를 차단 | 법무 검토·S6 경계 처리 | +| 거주 변경 미탐지 | 이주 후 구 관할로 판정 | Layer 3 spot-check·재검증 트리거 | + +## §12. Open Issues — 아직 확정 못한 것들 (우선순위) + +아래는 본 부품에서 남은 미해결·확인 필요 항목이다. 우선순위는 P0(데모 전 반드시)·P1(운영 전)·P2(Reg S/확장 시)로 표기한다. 법적 판단이 필요한 항목은 외부 자문 위임 대상으로 표시한다. + +| ID | 우선순위 | 이슈 | 현재 처리 | 필요 조치 | +| --- | --- | --- | --- | --- | +| OD-A02-1 | P0 | 제재 목록 동적 갱신 파이프라인 미구현 — Syria형 stale 리스크 | 원칙만 확정(§3.13·§11) | OFAC 동기화 자동화 + version/lastSyncedAt + 갱신 SLA 확정 | +| OD-A02-2 | P0 | 국적만으로 제재역 차단하는 보수 정책의 적정성(TC-05) | 현재 국적 접점도 차단 | general license·이중국적 실효 관할 고려해 정책 확정(자문 위임) | +| OD-A02-3 | P1 | U.S. person 판정을 Sumsub attestation에 의존하는 충분성 | Pattern B 신뢰 전제 | attestation 신뢰 충분성 기준 확정(TA/KYC attestation 자문 항목과 연동) | +| OD-A02-4 | P1 | 거주 변경(이주) 탐지·재판정 트리거 | Layer 3 원칙만 | 재검증 주기·트리거·D-01 카운트 정합 절차 확정 | +| OD-A02-5 | P1 | IP/VPN 우회 탐지 반영 여부(§560.204 "reason to know") | 미반영 | 우회 신호를 운영·경계(S6)에 반영할지 정책 결정(자문 위임) | +| OD-A02-6 | P2 | Reg S 역외 lane 개방 조건(regsLaneEnabled 전환) | Phase 1 유보 | §230.903/904 Category·offshore transaction·directed selling efforts 요건 통합 설계 | +| OD-A02-7 | P2 | offshore transaction "buy order 개시 시점" vs block.timestamp 정합 | 미정(§5.4) | DEX 실행 시점과 Reg S 취득 시점 개념 정합(자문 위임) | +| OD-A02-8 | P2 | general license(일반허가) 적용 자동화 | 수동(S6) | 프로그램별 general license를 정책·경계 로직에 구조화 | + +**외부 전문 자문 위임 항목(요약).** OD-A02-2(국적 기반 차단·general license), OD-A02-3(U.S. person attestation 신뢰 충분성), OD-A02-5(reason to know 우회), OD-A02-7(Reg S 취득 시점 정합)은 법적 판단이 필요하여 외부 증권·제재 전문 변호사 및 (필요 시) OFAC 가이드라인 확인 대상이다. 이들은 프로젝트의 법률 위임 패키지(외부 자문 Q 항목)에 통합해 관리한다. + +## §13. 파일명 규칙 및 산출물 + +- **본 문서**: A-02_국가거주제한.md (deep-dive walkthrough) + 동명 .docx (pandoc 변환). 산출물 경로 /mnt/user-data/outputs/. + +- **그림**: A-02_fig30.png(법조문·논리 흐름), A-02_fig50.png(런타임 판정 흐름). 문서 §3.0·§5.0에 임베드. + +- **파일명 규약**: 요소 코드(A-02) + 한글 식별명(국가거주제한). Spec Sheet 단계에서는 spec-sheets/elements/ 하위에 5-column 요약본으로 압축된다. + +- **후속 산출물 연결**: 본 walkthrough → Element Spec Sheet(5-column) 압축 → R1·R2·R3 Recipe Spec Sheet의 Conflict/Interaction 열 반영 → Pattern B(attestation)·Pattern C(monitoring) 보충 표준 → 통합 교차검증·규제 논거 문서 → 외부 자문 위임 패키지(OD-A02-2·3·5·7 포함). + +--- + +## 변경 이력 + +- **[2026-07-22 v1.0]** A-02 국가·거주 제한 부품 심층 walkthrough 최초 작성. 두 축 아키텍처(축1 증권법 Reg S/Reg D 경계·U.S. person §230.902(k) / 축2 제재법 OFAC 포괄제재·IEEPA §1702·§1705) 확립. A-01(명단 기반) vs A-02(관할 기반) 소관 분리 명시. Phase 1 = 미국인 한정·Reg S 역외 유보(deferred) 스코프 반영. 현행 포괄제재 집합(Cuba·Iran·North Korea·Crimea/DNR/LNR) 확정 및 **Syria 2025-06-30 포괄제재 종료(E.O. 14312)**를 "목록은 하드코딩 불가·동적 파라미터" 원칙의 실례로 문서화. 전 조문 1차 출처 verbatim 검증 완료 — 15 U.S.C. §77e(2026-06-14)·§77d(b), 17 CFR §230.901·§230.902(k)/(h)/(c)·§230.903·904·§240.3b-4(c), 50 U.S.C. §1702·§1705(2026-05-22)·§4305(b), 31 CFR §560.204, E.O. 13685·14065·14312, Morrison 561 U.S. 247, NSMIA §18. 판정 로직(S1 전제→S2 제재 hard block→S3·S4 증권법 lane→S5 법인 look-through→S6 경계) 및 6종 실패 코드(SANCTIONED/NOT_ALLOWED/CLAIM_INVALID/CLAIM_EXPIRED/ENTITY/REVIEW) 확정. 되돌릴 수 없는 실패(제재)와 되돌릴 수 있는 실패(lane·claim) 분리. 3-Layer Solution·Operator 제재목록 갱신 의무·9개 테스트 케이스(제재 hard block·lane 미개방·동적 목록 회귀 TC-07 포함)·8개 Open Issue(외부 자문 위임 4항목) 수록. fig30·fig50 Graphviz 렌더링(Noto Sans CJK KR, -Gdpi=150) 임베드. \ No newline at end of file diff --git a/docs/compliance/elements/A-03_accredited-investor.md b/docs/compliance/elements/A-03_accredited-investor.md index 182f686..bc825cb 100644 --- a/docs/compliance/elements/A-03_accredited-investor.md +++ b/docs/compliance/elements/A-03_accredited-investor.md @@ -666,7 +666,234 @@ Element 부품 ID 체계: --- +<<<<<<< HEAD +## §6. ④ 거절·예외 처리 — 검사에 실패하면 어떻게 되는가 + +| Code | 언제 발생하나 | 처리 | +|------|---------------|------| +| `FAIL_NO_AI_CLAIM` | accredited investor claim 없음 | onboarding / verification 안내 | +| `FAIL_UNTRUSTED_AI_CLAIM_ISSUER` | 발급기관이 Trusted Issuer Registry에 없음 | 운영자 확인 | +| `FAIL_INVALID_AI_CLAIM_SIGNATURE` | claim 서명 검증 실패 | 위조 가능성, 거래 차단 | +| `FAIL_AI_CLAIM_EXPIRED` | claim 만료 | 재검증 요청 | +| `FAIL_506C_VERIFICATION_NOT_ESTABLISHED` | Rule 506(c)에 필요한 verification basis 부족 | 거래 차단 또는 manual review | +| `FAIL_4A7_PURCHASER_NOT_AI` | §4(a)(7) resale에서 purchaser AI 요건 불충족 | 거래 차단 | +| `FAIL_AI_LOOKTHROUGH_PENDING` | entity buyer look-through 미완료 | pending 처리 | +| `FAIL_AI_CATEGORY_UNSUPPORTED` | claim.basis가 미지원 카테고리 | manual review | +| `REVIEW_AI_UNCERTAIN` | off-chain 판단 필요 | 거래 대기 + Trusted Issuer 검토 | + +--- + +## §7. ⑤ 테스트 케이스 — 스펙이 제대로 작동하는지 검증 + +> 아래 케이스가 모두 기대대로 동작해야 스펙이 완성(complete)이다. 자연인 소득·순자산 경계, entity look-through, 검증 방식, 그리고 BUIDL(AI+QP 결합·Rule 144 재판매) 시나리오를 함께 검증한다. + +| 테스트 | 결과 | +|--------|------| +| 개인, 순자산 $1.2M, primary residence 제외 계산 완료 | PASS | +| 개인, 순자산 $900K | FAIL_NO_AI_CLAIM 또는 FAIL_NOT_ACCREDITED | +| 개인, 최근 2년 소득 $250K + 올해도 같은 수준 기대 | PASS | +| 개인, 최근 1년만 $250K | FAIL_NOT_ACCREDITED | +| 부부 합산 소득 $320K, 최근 2년 충족 | PASS | +| primary residence 포함하면 $1M 초과, 제외하면 미달 | FAIL_NOT_ACCREDITED | +| issuer의 executive officer | PASS | +| entity의 모든 equity owner가 AI, look-through 완료 | PASS | +| entity buyer인데 look-through pending | FAIL_AI_LOOKTHROUGH_PENDING | +| AI claim은 있으나 Trusted Issuer가 미등록 | FAIL_UNTRUSTED_AI_CLAIM_ISSUER | +| AI claim 만료 | FAIL_AI_CLAIM_EXPIRED | +| Rule 506(c) 거래인데 단순 자기확인만 있음 | FAIL_506C_VERIFICATION_NOT_ESTABLISHED | +| §4(a)(7) resale 거래에서 buyer AI claim 없음 | FAIL_NO_AI_CLAIM | +| 고액 최소투자($1M 법인) 기반 claim, Trusted Issuer가 C&DI 256.36 정책으로 발급, 제3자 미융자 확인 | PASS (verificationBasis 인정 시) | +| §3(c)(7) 펀드가 아닌 issuer의 직원이 501(a)(11) knowledgeable employee로 주장 | FAIL_NOT_ACCREDITED (한정어 미충족) | +| issuer 쪽 bad actor 이슈 발생 | A-03 아님. E-03에서 fail | +| Rule 506(b) path 선택 시도 | 본 프로젝트 기본 path 아님. Recipe inactive 또는 manual legal review | +| R2 거래인데 resalePath = Rule 144 (buyer는 비-AI) | A-03 비활성 → A-03 사유로 fail하지 않음 (Rule 144는 buyer AI 불요) | +| BUIDL 발행: buyer AI claim PASS, 그러나 QP(A-13) claim 없음 | A-03 PASS — 그러나 **거래는 A-13에서 차단** (BUIDL은 AI+QP 둘 다 필요) | +| BUIDL 발행: $5M 청약, Securitize가 C&DI 256.36 기반 AI claim + 제3자 미융자 확인 발급, QP claim 보유 | PASS (A-03 verificationBasis 인정 + A-13 PASS) | +| BUIDL 재판매 (Manifest resale path = Rule 144) | A-03 dormant — buyer AI는 A-03 사유 아님. buyer 자격은 A-13(QP)이 판정 | +| 비-US person이 Reg S로 BUIDL 매수 | A-03 직접 관할 아님 — A-02(국적)+Reg S Recipe 소관 | + +--- + +## §9. (β) Cross-Element·Cross-Recipe Coordination — 혼자 움직이지 않는다 + +> **혼자 움직이지 않는다.** 본 부품은 다른 부품·레시피와 *누적적으로(cumulative)* 작동한다. §2 메타의 Cascade Element(A-04 KYC·A-11 Claim Freshness·A-01 Sanctions)가 함께 호출되고, 발행(R1)·재판매(R2) 레시피와 함께 켜질 수 있다. 아래는 그 경계 — 본 부품이 *직접* 책임지는 것과, *다른 부품에 넘기는* 것 — 의 정리다. (A-13 양식의 §8 (α) 증명서 패턴은 A-03에 별도 절이 없어 생략했고, 본 절은 A-13 §9.1 책임 경계에 해당한다.) + +**A-03이 직접 책임지는 것** + +- buyer에게 accredited investor claim이 있는지 +- claim이 신뢰기관에서 발급됐는지 +- claim 서명이 유효한지 +- claim이 아직 유효한지 +- Rule 506(c) path라면 reasonable verification basis가 있는지 +- §4(a)(7) resale path라면 purchaser AI 요건을 충족하는지 +- entity buyer의 경우 필요한 look-through가 끝났는지 + +**A-03 밖의 문제** + +- 이 토큰이 securities인지 +- issuer가 §5 등록의무를 전체적으로 면제받았는지 +- Form D가 제출되었는지 (→ E-01) +- Rule 506(d) bad actor disqualification이 없는지 (→ E-03) +- resale path가 §4(a)(7) / Rule 144 / Rule 144A 중 무엇인지 +- **qualified purchaser 자격** (§3(c)(7) 펀드, 예: BUIDL) (→ A-13) +- 비-US person / **Reg S** 경로 (→ A-02 + Reg S Recipe) +- §3(c)(7) 2000-investor cap·12(g) 보유자 수 (→ D-01) +- DEX가 broker-dealer 또는 ATS인지 +- AML/KYC/SAR 의무가 충족되었는지 +- custody / settlement 이슈 + +--- + +## §12. Open Issues — 변호사 follow-up 대상 + +> 본 부품의 스펙이 완전해지려면 풀어야 할 질문들이다. A-03 본문 곳곳의 미결·주의 사항을 한 표로 모았다. + +| # | 질문(무엇을 결정해야 하나) | 왜 필요한가 | Priority | 해소 경로(권고) | +| --- | --- | --- | --- | --- | +| 1 | **(Q-B1) BUIDL 재판매의 §5 면제 경로** — Rule 144인가 §4(a)(7)인가 | 경로에 따라 A-03이 재판매에서 active(§4(a)(7))/dormant(Rule 144)로 갈림. 구현 플랜은 Rule 144 가정, A-13 문서는 §4(a)(7) 사용, 공개 공시는 면제 조항 미명시 | 🔴 즉시 | 변호사 follow-up(§3.0.1·§3.12·부록 C) | +| 2 | **고액 최소투자 verificationBasis 인정 범위** — `HIGH_MINIMUM_INVESTMENT`의 C&DI 256.36 조건(제3자 미융자 확인 + AI 서면진술 + 반대사실 부지) 충족·문서화 방식 | NAL·C&DI는 직접 PASS/FAIL 규칙이 아니라 factor → Trusted Issuer 발급 정책으로 명문화 필요 | 🟡 높음 | 변호사 + Trusted Issuer 정책(§3.8·§3.9·부록 B) | +| 3 | **Entity look-through 재귀 깊이** — equity owner를 몇 단계까지 보나, partial 처리 | cascade(A-09) 설계 직결, 미정 시 미작동/무한 복잡도 | 🟡 높음 | 변호사 + A-09 | +| 4 | **AI claim 만료(expiry) 기간** — prior-verification 5년 옵션(506(c)(2)(ii)(E)) vs 보수적 기간 | A-11(Claim Freshness)과 조율, 취득시점 요건 구현 | 🟢 중간 | Decipher 자체 + A-11 | +| 5 | **미지원 501(a) 카테고리 처리** — `FAIL_AI_CATEGORY_UNSUPPORTED` 발생 시 manual review 정책 | 일부 카테고리 지원 범위·경계 | 🟢 중간 | Decipher 자체 | + +--- + +> *— 이하 부록 A~D는 A-03 고유 내용으로, A-13 양식엔 대응 슬롯이 없어 보존한다. —* + +--- + +## 부록 A. Authority Verification Table — Official URLs Only + +| Issue | Correct Authority | Direct / Supporting | A-03 반영 | Official URL | +|-------|-------------------|---------------------|-----------|--------------| +| 등록되지 않은 증권 offer/sale 금지 | Securities Act §5, 15 U.S.C. §77e | Supporting | Reg D 면제 필요성 | https://uscode.house.gov/view.xhtml?req=granuleid:USC-prelim-title15-section77e | +| private placement 기본 면제 | Securities Act §4(a)(2), 15 U.S.C. §77d(a)(2) | Supporting | Rule 506(c)의 statutory basis | https://uscode.house.gov/view.xhtml?req=granuleid:USC-prelim-title15-section77d | +| §4(a)(7) resale exemption | Securities Act §4(a)(7), 15 U.S.C. §77d(a)(7), §77d(d)(1) | Direct(resale) | resale 시 A-03 호출 | https://uscode.house.gov/view.xhtml?req=granuleid:USC-prelim-title15-section77d | +| AI 정의 | Rule 501(a), 17 C.F.R. §230.501(a) | Direct | claim.basis | https://www.ecfr.gov/current/title-17/chapter-II/part-230/section-230.501 | +| **private BDC** | Rule 501(a)(2), 17 C.F.R. §230.501(a)(2) | Direct | claim.basis = AI_PRIVATE_BDC | https://www.ecfr.gov/current/title-17/chapter-II/part-230/section-230.501 | +| **knowledgeable employee 한정** | Rule 501(a)(11), 17 C.F.R. §230.501(a)(11) | Direct | 3(c)(1)/3(c)(7) issuer 한정 | https://www.ecfr.gov/current/title-17/chapter-II/part-230/section-230.501 | +| restricted securities / resale 제한 | Rule 502(d), 17 C.F.R. §230.502(d) | Supporting | resale Recipe 필요 | https://www.ecfr.gov/current/title-17/chapter-II/part-230/section-230.502 | +| Rule 506(c) exemption | Rule 506(c), 17 C.F.R. §230.506(c) | Direct | Rule 506(c) path | https://www.ecfr.gov/current/title-17/chapter-II/part-230/section-230.506 | +| 모든 purchaser AI 요건 | Rule 506(c)(2)(i) | Direct | buyer AI claim 필수 | https://www.ecfr.gov/current/title-17/chapter-II/part-230/section-230.506 | +| reasonable verification | Rule 506(c)(2)(ii) | Direct | verificationBasis | https://www.ecfr.gov/current/title-17/chapter-II/part-230/section-230.506 | +| income verification | Rule 506(c)(2)(ii)(A) | Direct | verificationMethod = INCOME | https://www.ecfr.gov/current/title-17/chapter-II/part-230/section-230.506 | +| net worth verification | Rule 506(c)(2)(ii)(B) | Direct | verificationMethod = NET_WORTH | https://www.ecfr.gov/current/title-17/chapter-II/part-230/section-230.506 | +| third-party confirmation | Rule 506(c)(2)(ii)(C) | Direct | Trusted Issuer claim | https://www.ecfr.gov/current/title-17/chapter-II/part-230/section-230.506 | +| **506(b) 보유자 방법** | Rule 506(c)(2)(ii)(D) | Direct | PRIOR_506B_HOLDER | https://www.ecfr.gov/current/title-17/chapter-II/part-230/section-230.506 | +| prior verification 5-year | Rule 506(c)(2)(ii)(E) | Direct / policy | expiry 최대 5년 옵션 | https://www.ecfr.gov/current/title-17/chapter-II/part-230/section-230.506 | +| Rule 506(c) adopting release | SEC Release No. 33-9415 | Supporting | reasonable verification 해석 | https://www.sec.gov/files/rules/final/2013/33-9415.pdf | +| 506(c) small business guide | SEC, General Solicitation — Rule 506(c) | Supporting | 팀 설명 / UX 문구 | https://www.sec.gov/resources-small-businesses/exempt-offerings/general-solicitation-rule-506c | +| 고액 최소투자 no-action | Latham & Watkins No-Action Letter, 2025-03-12 | Supporting only | 직접 PASS/FAIL 금지. verificationPolicy 참고 | https://www.sec.gov/rules-regulations/no-action-interpretive-exemptive-letters/division-corporation-finance-no-action/latham-watkins-503c-031225 | +| **고액 최소투자 C&DI** | C&DI: Securities Act Rules, Q 256.35 & 256.36, 2025-03-12 | Supporting only | 직접 PASS/FAIL 금지. verificationPolicy 참고 | https://www.sec.gov/rules-regulations/staff-guidance/compliance-disclosure-interpretations/securities-act-rules | + +--- + +## 부록 B. BUIDL 레퍼런스 케이스 — 개요·최소투자금액·A-03 실행사항 + +> 본 프로젝트가 A-03을 설계·검증할 때 기준으로 삼는 실제 토큰은 BlackRock BUIDL이다. 이 절은 세 가지에 답한다 — ① BUIDL이 무엇이고 어떤 법을 따르는지, ② 최소투자금액과 그 근거(authorities), ③ 그래서 A-03 부품에 구체적으로 무엇을 구현·확인해야 하는지. (Manifest 적용의 세부 메커니즘은 §3.12 참조.) + +### 12.1 BUIDL이란 무엇인가 — 개요와 법적 프레임워크 + +**개요.** BUIDL(BlackRock USD Institutional Digital Liquidity Fund)은 BlackRock이 2024년 3월 Ethereum에 출시한 **토큰화 머니마켓펀드**다. 현금·미국 단기국채(T-bill)·환매조건부채권(repo)에 투자하고, 토큰 1개 = $1의 안정가치를 목표로 하며, 배당을 매일 적립해 투자자 지갑으로 분배한다. 세계 최대 규모의 토큰화 국채 펀드이며, 이후 Aptos·Arbitrum·Avalanche·Optimism·Polygon 등 다중 체인으로 확장됐다. + +**관계자.** 운용 = BlackRock Financial Management · 수탁/관리 = BNY Mellon · 토큰화·transfer agent = Securitize · placement agent = Securitize Markets LLC · 감사 = PwC. + +**법적 프레임워크.** BUIDL은 두 개의 등록 면제를 동시에 쓴다. + +| 층위 | 근거 | 효과 | +|------|------|------| +| 발행 (1933년법) | **Securities Act Rule 506(c)** (17 C.F.R. §230.506(c)) | SEC 미등록·거래소 미상장. general solicitation 허용 대신 **모든 purchaser가 AI**여야 하고 issuer가 reasonable verification 수행 | +| 펀드 구조 (ICA 1940) | **ICA §3(c)(7)** (15 U.S.C. §80a-3(c)(7)) | 투자회사 등록 면제. 단 **모든 투자자가 QP**여야 함 | +| 역외·비-US | **Reg S** | BUIDL은 **BVI 도미사일**의 역외 펀드 → 미국 밖 투자자는 Reg S 경로 | + +→ 결과적으로 BUIDL 투자자는 **accredited investor(AI)이면서 동시에 qualified purchaser(QP)**여야 한다(또는 비-US person). 지분은 restricted securities이고, 본 프로젝트 Manifest는 재판매를 **Rule 144** 경로로 둔다(§3.12). + +> 실제 BUIDL은 Securitize 자체 표준(DS Protocol)으로 발행된다. 본 프로젝트는 "BUIDL이 **ERC-3643(T-REX)으로 재구성**됐다"는 가정 위에서 A-03을 설계하며, 그 경우 **Securitize가 AI/QP claim의 Trusted Issuer**가 된다. + +### 12.2 BUIDL의 최소투자금액 — 수치와 근거(authorities) + +**최소투자금액(initial investment minimum) = $5M.** 이는 법정 문턱이 아니라 **발행자(BlackRock)가 설정한 청약 조건**이다. (최소 환매금액은 별도로 약 $250K.) + +| 사실 | 근거(authority) | 성격 | +|------|------------------|------| +| 최소투자 **$5M** | BlackRock 공식 보도자료 — *"BUIDL's initial investment minimum is $5 million"* (2024-11-13 share class 확장 보도자료; 2024-03 출시 보도자료에도 동일) | 발행자 진술 | +| **506(c)** 발행·SEC 미등록·미상장 | 동 보도자료 — *"offered solely pursuant to 506(c) under the Securities Act … will not be listed on any exchange"* + Rule 506(c), 17 C.F.R. §230.506(c) | 발행자 진술 + 연방규칙 | +| **§3(c)(7)** 펀드 면제 | 동 보도자료 — *"excepted from the definition of 'investment company' … pursuant to Section 3(c)(7)"* + ICA §3(c)(7), 15 U.S.C. §80a-3(c)(7) | 발행자 진술 + 법령 | +| 최소 환매 $250K | Securitize 발행물·BUIDL 안내 | 발행자 조건 | + +> **보도자료·청약 출처 URL.** +> - BlackRock 최초 발행 공시 (Business Wire, 2024-03-20) — *"The Fund will issue shares pursuant to Rule 506(c) … and Section 3(c)(7)…"*: `https://www.nasdaq.com/press-release/blackrock-launches-its-first-tokenized-fund-buidl-on-the-ethereum-network-2024-03-20` +> - BlackRock share class 확장 공시 (PRNewswire, 2024-11-13) — *"initial investment minimum is $5 million"*: `https://www.prnewswire.com/news-releases/blackrock-launches-new-buidl-share-classes-across-multiple-blockchains-to-expand-access-and-potential-of-buidl-ecosystem-302304035.html` +> - Securitize 청약 포털 (qualified institution 청약·whitelist): `https://securitize.io` +> - 펀드의 SEC Form D 공시(EDGAR)에서도 최소투자금액·면제근거가 확인된다. + +**왜 이 $5M이 A-03과 직접 얽히나.** $5M은 NAL/C&DI 256.36의 고액 최소투자 임계($200K 개인/$1M 법인)를 크게 상회한다. 그래서 BUIDL에서는 이 **고액 최소투자 자체가 AI 검증의 1차 경로**가 된다(`verificationBasis = HIGH_MINIMUM_INVESTMENT`). 단 C&DI 256.36 조건상 **제3자 미융자 확인 + AI 서면진술 + 반대사실 부지**가 함께 필요하다. + +> **같은 $5M, 다른 개념 주의.** BUIDL 청약 최소액 $5M(발행자 조건, 변경 가능) ≠ QP 자격의 investments $5M(법정, ICA §2(a)(51)(A)(i)). 한 투자자에게 둘 다 요구되지만 서로 다른 요건이다(§3.12(7)). + +### 12.3 그래서 A-03에 무엇을 해야 하나 — 실행 체크리스트 + +BUIDL을 정확히 처리하려면 A-03 부품과 그 주변 배선에 다음을 구현·확인한다. + +**A. claim 스키마** +- AI claim의 `verificationBasis`에 **`HIGH_MINIMUM_INVESTMENT`** 값을 정의한다(BUIDL의 1차 경로). C&DI 256.36 정책(제3자 미융자 확인 포함)을 Trusted Issuer 발급 조건으로 명문화한다. +- claim topic = `ACCREDITED_INVESTOR`, 발급자 = **Securitize(Trusted Issuer)**로 등록. + +**B. cumulative 게이트 — A-03만으로 통과시키지 말 것** +- BUIDL 발행은 **R1(506(c)) + R3(§3(c)(7))** 동시 적용 → Recipe 엔진이 **A-03(AI) AND A-13(QP)** 둘 다 PASS를 요구하도록 배선한다. **AI claim만으로 BUIDL 매수가 체결되지 않게** 한다(BUIDL에서 가장 흔한 오작동 지점). + +**C. 재판매 시 dormant 처리** +- BUIDL Manifest의 재판매 path = **Rule 144** → 재판매에서 A-03은 **dormant**(buyer AI 불요). Recipe 엔진이 Rule 144 재판매에 A-03 FAIL을 내지 않도록 한다(이때 buyer 게이트는 A-13(QP)). + +**D. Element는 일반으로 유지** +- A-03 본체는 §4(a)(7)·전체 501(a) 카테고리를 **그대로 유지**한다. BUIDL용 협소화(Rule 144 전제, AI+QP 결합 등)는 **A-03 코드가 아니라 BUIDL Manifest**에 둔다(Element = Recipe-agnostic 공유 라이브러리, §3.12 전제). + +**E. 인접 부품 배선 확인 — A-03이 떠안지 말 것** +- A-13(QP)·A-02(Reg S/비-US)·D-01(2000인 cap·§12(g))·E-03(bad actor)·A-01(sanctions)·A-04(KYC)가 BUIDL Manifest에 함께 걸려 있는지 확인한다. A-03이 이들을 암묵적으로 대신하지 않는다(§9). +- A-11(claim freshness)이 AI claim 만료를 강제하는지 확인한다(특히 prior-verification 5년·고액최소투자 basis). + +**F. 테스트·UX** +- §7의 BUIDL 케이스(AI PASS이나 QP 없음 → A-13 차단 / Rule 144 재판매 → A-03 dormant / Reg S 비-US 등)를 A-03 테스트 스위트에 포함한다. +- "AI 검증 완료 = BUIDL 매수 가능"으로 오인되지 않게 한다 — QP(A-13)도 필요함을 UX·문구에 노출(부록 C). + +--- + +## 부록 C. 안전한 표현 / 위험한 표현 (데모 가이드) + +**써도 되는 표현** + +- 본 프로젝트는 Rule 506(b)가 아니라 Rule 506(c) 기반 Reg D issuance framework를 전제로 합니다. +- A-03은 buyer가 유효한 accredited investor claim을 보유했는지 확인하는 pre-trade gate입니다. +- Rule 506(c)는 모든 purchaser가 accredited investor여야 하고 issuer가 reasonable steps to verify를 취해야 합니다. +- Rule 506(b)의 general solicitation 금지는 506(b)(1)이 인용편입하는 Rule 502(c)에서 나옵니다. +- Rule 506(d)는 buyer 자격 검사가 아니라 issuer 및 covered person의 bad actor disqualification 이슈입니다. +- 고액 최소투자금액은 2025-03 SEC C&DI·no-action letter상 검증의 한 factor이며, 자동 AI 인정 규칙이 아닙니다. +- §3(c)(7) 펀드(BUIDL 등)는 accredited investor **그리고** qualified purchaser 둘 다 필요하며, A-03은 그중 AI만 봅니다(QP는 A-13). +- BUIDL의 $5M 최소투자와 qualified purchaser의 $5M investments 기준은 **다른 개념**입니다(청약 조건 vs 자격 요건). + +**피해야 할 표현** + +- ~~우리 케이스는 Rule 506(d)로 간다.~~ → 506(d)는 path가 아니라 결격 조항. +- ~~Rule 506(b), 506(c), 506(d) 중 하나를 선택한다.~~ → 506(b)·506(c)는 offering path, 506(d)는 Rule 506 면제를 막는 결격 요건. +- ~~general solicitation 금지는 Rule 506(b)의 원문이다.~~ → 그 문장은 Rule 502(c)이고, 506(b)는 이를 편입한다. +- ~~A-03을 통과하면 모든 Reg D 문제가 해결된다.~~ → A-03은 buyer AI status만 본다. issuer bad actor(E-03), Form D(E-01), resale 제한, broker-dealer/ATS, AML/KYC/SAR은 별도. +- ~~자기확인 체크박스만 있으면 Rule 506(c) 검증이 끝난다.~~ → 506(c)는 reasonable steps to verify를 요구한다. +- ~~고액 투자($X 이상)면 자동으로 accredited investor다.~~ → C&DI 256.36·no-action letter는 factor일 뿐. +- ~~A-03(적격투자자)을 통과했으니 BUIDL을 살 수 있다.~~ → BUIDL은 qualified purchaser(A-13)도 필요. A-03은 floor일 뿐. +- ~~BUIDL은 §4(a)(7)로 재판매한다(확정).~~ / ~~BUIDL은 Rule 144로 재판매한다(확정).~~ → **둘 다 단정 금지.** BUIDL 재판매의 §5 면제 경로는 **미확정(Open Issue Q-B1)**이다 — 구현 플랜은 Rule 144를 가정하나 A-13 문서는 §4(a)(7)을 쓰고, 공개 공시는 면제 조항을 명시하지 않는다(§3.0.1·§3.12). 경로가 §4(a)(7)이면 A-03이 재판매에서 **active**, Rule 144면 **dormant**다. + +--- + +## 부록 D. 팀 문서 결론 문구 + +A-03 Accredited Investor Element는 Reg D Rule 506(c) 또는 §4(a)(7) resale 경로에서 prospective buyer가 Rule 501(a)의 accredited investor 범주에 해당하고, 필요한 경우 Rule 506(c)(2)(ii)에 따른 reasonable verification이 이루어졌는지를 거래 전에 확인하는 pre-trade gate다. 본 프로젝트의 Reg D issuance framework는 Rule 506(b)가 아니라 Rule 506(c)를 전제로 한다. Rule 506(b)는 general solicitation이 금지되는(이 금지는 506(b)(1)이 인용편입하는 Rule 502(c)에서 나온다) 전통적 비공개 사모 구조이므로 공개형 토큰화 유통 및 DEX 접근통제 시나리오와 맞지 않는다. 반면 Rule 506(d)는 buyer 자격 검사가 아니라 issuer 및 covered person의 bad actor disqualification 문제이므로 A-03이 아니라 별도 issuer-status Element(E-03)에서 처리한다. 온체인에서는 투자자의 원자료를 직접 심사하지 않고, Trusted Issuer가 off-chain에서 income, net worth, entity status, trust status, professional certification, third-party confirmation, 그리고 2025-03 SEC C&DI 256.35/256.36·no-action letter에 따른 고액 최소투자금액 기반 검증 등 관련 증빙을 검토한 뒤 발급한 signed claim을 확인한다. 따라서 A-03의 직접 PASS/FAIL 로직은 claim 존재 여부, Trusted Issuer 신뢰성, 서명 유효성, claim 만료 여부, verification basis, entity look-through 완료 여부에 한정된다. + +--- + +*문서 끝.* +======= ## §14. *변경 로그* - [2026-06-14] (canton-rwa) v2.1 patch. *citation 검증 정정 반영* (⚠️ 정정 노트로 *명시·*v1.0·v2.0의 *6 주요 *citation 오류 정정 — *Rule 501(a) 13 categories·*KE = (a)(11)·*Family Office = (a)(12)·*Family Client = (a)(13)·*Professional Credentials = (a)(10)·*Entity-based AI 4 categories ((a)(3)·(7)·(8)·(9) — *특히 (a)(9) investments-based entity 추가)·*Spousal equivalent는 *§ 230.501(j) 정의·*별도 category가 *아님·*Rule 506(c)(2)(ii) safe harbor methods는 *(A)·(B)·(C)·(D)·(E) 5종이며 *"prior three months" 요건이 *Rule 506(c) compliance의 *결정적 *시간 제약·*Decipher 1년 cap과 *gap articulation. *§3.2 §3(c)(2)(ii) safe harbor methods 전면 재작성·*frontmatter related-external-sources 정확 URL update·*eCFR 직접 인용으로 *전환). - [2026-06-13] (canton-rwa) v2.0 작성. *Accredited Investor walkthrough — *공유 산출물 form. *self-contained·*규제 맥락 우선·*친절한 해설·*Internal ID 분리·*법령 조문 인용 form 적용·*외부 공식 자료만. **§1 규제 맥락** (Securities Act 1933 4 Pillar 위치·*registration vs Reg D safe harbor·*Decipher RWA token 발행/유통 relevance·*한국 자본시장법 비교) + **§2 메타 정보** + **§3 ① 법적 근거** (§4(a)(2)·*Rule 506(c)·*Rule 501(a) 8 categories·*2020 modernization 3 categories·*Rule 506(c)(2) reasonable steps to verify safe harbor methods·*Ralston Purina·*Sub-요건 매트릭스 + A-13와의 결정적 3 차이 *상세 비교) + **§4 ② 입력 사실** + **§5 ③ 판정 로직** (5 step flow·*pseudocode 6 category branches·*"exceeds" vs "not less than" practice 결정·*비결정성 framing) + **§6 ④ 거절·예외 처리** (9 failure codes) + **§7 ⑤ 테스트 케이스** (Net Worth Pass·Net Worth Fail·Boundary $1M·Income path·Credentials path 5 cases·*주거 부동산 분리·*negative equity 처리) + **§8 (α) 패턴 B + Rule 506(c)(2)(iii) third-party verification direct fit** + **§9 (β) Cross coordination·*A-03 vs A-13 dual structure conflict resolution** + **§10 (γ) 3-Layer Solution + Rule 506(c)(2) safe harbor methods** + **§11 (δ) Frontend path 선택의 *A-03 특수성** + **§12 Open Issues 7건** + **§13 파일명 규칙**. +>>>>>>> 8a8c56fb2fa198184523ac3ed682e3cb027fcfbf diff --git a/docs/compliance/elements/A-06.md b/docs/compliance/elements/A-06.md new file mode 100644 index 0000000..e3fc2c4 --- /dev/null +++ b/docs/compliance/elements/A-06.md @@ -0,0 +1,199 @@ +# A-06 내부자판정 — 법리 검증 기준서 (원문 대조용) + +**v1.0 · 기준일 2026-07-06 · Decipher RWA DEX / Element A-06 (Affiliate / Control Person)** + +--- + +## §0. 경위와 용도 + +업로드된 `A-06_내부자판정.docx`가 작업 컨테이너에 동기화되지 않아(uploads mount 비어 있음, 약 5분 폴링 후에도 미도착) 본문 라인 대조는 아직 수행하지 못했다. 대신 검증 작업의 파일-독립적 절반 — **A-06이 딛고 서야 하는 모든 근거 조문의 2026-07-06 현재 원문 확정** — 을 먼저 완료해 이 기준서로 고정한다. 파일이 다시 도착하면 §5의 절차대로 이 기준서와 문서를 축조 대조한다. + +모든 원문은 ecfr.gov·uscode.house.gov·sec.gov에서 오늘 직접 수집했다. eCFR Title 17은 **2026-07-01 기준 현행**(최종 개정 2026-06-25 반영)이고, uscode.house.gov는 **2026-07-01 시행 법률** 기준임을 각 페이지가 명시한다. §230.144의 개정 이력상 마지막 실질 개정은 **2022년 6·7월(Form 144 전자제출화)**이며 그 이후 무변경, §230.405의 *control* 정의도 무변경이다 — "반드시 최신" 요건은 이 스탬프로 충족된다. + +--- + +## §1. 검증 완료 원문 (Layer 1 — 이 자구와 다르면 문서가 틀린 것) + +### 1.1 17 CFR §230.144(a)(1) — affiliate 정의 [ecfr.gov] + +> An *affiliate* of an issuer is a person that directly, or indirectly through one or more intermediaries, controls, or is controlled by, or is under common control with, such issuer. + +**한국어 요지:** 발행자를 직접 또는 하나 이상의 중간자를 통해 간접으로 지배하거나, 발행자에 의해 지배되거나, 발행자와 공동의 지배 아래 있는 자. + +**자구 주의 ⚠:** 144(a)(1)은 "controls**,** or is controlled by"로 *controls 뒤에 콤마가 있다.* Rule 405의 별도 *Affiliate* 정의("… controls or is controlled by, or is under common control with, the person specified")에는 그 콤마가 없고 주어도 다르다("of an issuer" vs "of … a specified person"). 두 정의를 한 블록에 섞어 쓰면 verbatim 실패다 — A-06의 §3 원문 블록은 반드시 144(a)(1) 자구만 담아야 한다. + +### 1.2 17 CFR §230.405 — *Control* 정의 [ecfr.gov] + +> *Control.* The term *control* (including the terms *controlling, controlled by* and *under common control with*) means the possession, direct or indirect, of the power to direct or cause the direction of the management and policies of a person, whether through the ownership of voting securities, by contract, or otherwise. + +**한국어 요지:** 의결권증권 소유·계약·그 밖의 방법 여하를 불문하고, 직접·간접으로 어떤 자의 경영과 정책의 방향을 지시하거나 지시를 야기할 수 있는 힘의 보유. **정량 기준이 전혀 없다** — 이것이 A-06의 "bright-line 절대 금지" 원칙의 조문상 뿌리다. + +**인용 방식 주의 ⚠:** Rule 144은 *control*을 자체 정의하지 않는다. Rule 405 서두는 그 정의들의 적용 범위를 문언상 "all terms used in §§ 230.400 to 230.494, inclusive, or in the forms for registration"으로 열고 있으므로, §230.144에 대한 적용은 *직접 편입이 아니라 확립된 해석 기준*이다. SEC 스스로 Rule 144 안내에서 이 정식을 그대로 쓴다(§1.10) — 따라서 A-06의 authority 분류는 "Rule 405 (Layer 1 정의 조문) + SEC 간행물(Layer 2 적용 확인)"의 2단 구성이 정확하고, "144(a)(1)이 405를 정의로 지정한다"는 식의 단문 서술은 부정확하다. Exchange Act Rule 12b-2에 동일 문구의 병행 정의가 있다(참조 표기용, 본 기준서에서 원문 대조는 하지 않음). + +### 1.3 17 CFR §230.144(b)(1) — 비계열(non-affiliate) 요건 [ecfr.gov] + +> (i) If the issuer of the securities is, and has been for a period of at least 90 days immediately before the sale, subject to the reporting requirements of section 13 or 15(d) of the Securities Exchange Act of 1934 (the Exchange Act), any person who is not an affiliate of the issuer at the time of the sale, and has not been an affiliate during the preceding three months, who sells restricted securities of the issuer for his or her own account shall be deemed not to be an underwriter of those securities within the meaning of section 2(a)(11) of the Act if all of the conditions of paragraphs (c)(1) and (d) of this section are met. The requirements of paragraph (c)(1) of this section shall not apply to restricted securities sold for the account of a person who is not an affiliate of the issuer at the time of the sale and has not been an affiliate during the preceding three months, provided a period of one year has elapsed since the later of the date the securities were acquired from the issuer or from an affiliate of the issuer. +> +> (ii) If the issuer of the securities is not, or has not been for a period of at least 90 days immediately before the sale, subject to the reporting requirements of section 13 or 15(d) of the Exchange Act, any person who is not an affiliate of the issuer at the time of the sale, and has not been an affiliate during the preceding three months, who sells restricted securities of the issuer for his or her own account shall be deemed not to be an underwriter of those securities within the meaning of section 2(a)(11) of the Act if the condition of paragraph (d) of this section is met. + +**한국어 요지:** 비계열 자격은 두 요건의 AND — ① 매도 시점에 affiliate가 아닐 것, ② **직전 3개월(preceding three months)** 동안 affiliate였던 적이 없을 것. 보고회사 발행분은 (c)(1)+(d) 조건부이되 취득 후 1년 경과 시 (c)(1) 면제, 비보고회사 발행분은 (d)(1년 보유)만. + +**Decipher 적용 주의 ⚠:** §3(c)(7) 사모펀드(BUIDL형)는 §13/15(d) 보고의무가 없으므로 실제 살아 있는 갈래는 **(b)(1)(ii)**다. 문서가 (i)의 "6–12개월 구간 (c)(1) 잔존 / 1년 후 전면 해제" 구조를 서술한다면 그 자체는 정확하지만(원문 그대로), 그것을 Decipher 토큰에 *적용*하는 서술이면 발행자 보고 지위 전제부터 틀린 것이다. (보유기간 세부는 C-01, 현행정보는 E-05 소관 — A-06은 원문 블록의 자구 정확성만 책임진다.) + +### 1.4 17 CFR §230.144(b)(2) — 계열 tail (90일) [ecfr.gov] + +> Any affiliate of the issuer, or any person who was an affiliate at any time during the 90 days immediately before the sale, who sells restricted securities, or any person who sells restricted or any other securities for the account of an affiliate of the issuer of such securities, or any person who sells restricted or any other securities for the account of a person who was an affiliate at any time during the 90 days immediately before the sale, shall be deemed not to be an underwriter of those securities within the meaning of section 2(a)(11) of the Act if all of the conditions of this section are met. + +**한국어 요지:** ① 현재 affiliate, ② **매도 직전 90일(90 days immediately before the sale)** 내 어느 시점이든 affiliate였던 자, ③ 그 둘의 계산으로 파는 자 — 전부에 대해 이 조의 *모든* 조건이 붙는다. 그리고 대상 증권은 "restricted **or any other** securities" — 취득 경로를 불문한다(control securities 개념의 문언 근거). + +**이중 look-back의 핵심 ⚠:** (b)(1)은 "**preceding three months**"(역월), (b)(2)는 "**90 days**"(일수)로 조문이 *의도적으로 다른 단위*를 쓴다. 역월 3개월은 89–92일로 변동한다. 하나의 "90일 tail" 숫자로 뭉개 쓰면 자구 오류이고, 온체인 게이트 구현은 두 기간을 각각 평가하거나 보수적으로 `max(직전 3역월, 90일)` 무-affiliate를 요구해야 한다. NON_AFFILIATE 판정에 이 tail sub-check가 빠지는 것이 A-06 최다 오구현 지점이라는 기존 결론은 현행 원문으로 재확인된다. + +### 1.5 17 CFR §230.144(a)(2) — *person* 합산 정의 [ecfr.gov] + +> The term *person* when used with reference to a person for whose account securities are to be sold in reliance upon this section includes, in addition to such person, all of the following persons: +> +> (i) Any relative or spouse of such person, or any relative of such spouse, any one of whom has the same home as such person; +> +> (ii) Any trust or estate in which such person or any of the persons specified in paragraph (a)(2)(i) of this section collectively own 10 percent or more of the total beneficial interest or of which any of such persons serve as trustee, executor or in any similar capacity; and +> +> (iii) Any corporation or other organization (other than the issuer) in which such person or any of the persons specified in paragraph (a)(2)(i) of this section are the beneficial owners collectively of 10 percent or more of any class of equity securities or 10 percent or more of the equity interest. + +**한국어 요지:** 매도 계산 주체를 확장한다 — 동거 친족·배우자(및 그 배우자의 동거 친족), 그들이 합산 **10% 이상(≥)** 수익지분을 갖거나 수탁자·유언집행자 등으로 있는 신탁·유산, 그들이 합산 **10% 이상(≥)** 지분을 가진 법인·단체. + +**용도 구분 ⚠:** 이 10%는 *affiliate 판정 기준이 아니다.* "누구의 매도로 세는가"라는 합산 범위 정의로, C-08(물량 합산)·(h)(Form 144 임계 계산)의 입력이자 A-06의 판정 대상 확장(affiliate 본인 외에 (a)(2) person까지 게이트에 태울지) 인터페이스다. 이 10%를 지배 기준으로 승격시키면 §3.C3 위반이다. 자구도 현행 텍스트는 "trustee, executor **or in any** similar capacity"다(구판 표기 "or similar capacity" 아님). + +### 1.6 15 U.S.C. §77b(a)(11) — underwriter와 지배관계인 확장 [uscode.house.gov] + +> The term "underwriter" means any person who has purchased from an issuer with a view to, or offers or sells for an issuer in connection with, the distribution of any security, or participates or has a direct or indirect participation in any such undertaking, or participates or has a participation in the direct or indirect underwriting of any such undertaking; but such term shall not include a person whose interest is limited to a commission from an underwriter or dealer not in excess of the usual and customary distributors' or sellers' commission. As used in this paragraph the term "issuer" shall include, in addition to an issuer, any person directly or indirectly controlling or controlled by the issuer, or any person under direct or indirect common control with the issuer. + +**한국어 요지:** 마지막 문장이 A-06 전체의 법정법(statute) 뿌리다 — §2(a)(11) 목적상 "issuer"에는 지배관계인이 포함되므로, **affiliate로부터** 유통 목적으로 매수하거나 **affiliate를 위해** 파는 자도 underwriter가 될 수 있다. Rule 144은 이 리스크에 대한 safe harbor이고, (b)(2)가 affiliate 매도에 전 조건을 붙이는 이유가 여기서 나온다. + +### 1.7 [대조축 1] ICA §2(a)(3) — "affiliated person" (15 U.S.C. §80a-2(a)(3)) [uscode.house.gov] + +> "Affiliated person" of another person means (A) any person directly or indirectly owning, controlling, or holding with power to vote, 5 per centum or more of the outstanding voting securities of such other person; (B) any person 5 per centum or more of whose outstanding voting securities are directly or indirectly owned, controlled, or held with power to vote, by such other person; (C) any person directly or indirectly controlling, controlled by, or under common control with, such other person; (D) any officer, director, partner, copartner, or employee of such other person; (E) if such other person is an investment company, any investment adviser thereof or any member of an advisory board thereof; and (F) if such other person is an unincorporated investment company not having a board of directors, the depositor thereof. + +**왜 여기 있는가:** R3(§3(c)(7)) 동거 프로젝트라 이 정의가 A-06으로 새어 들어올 위험이 실재한다. ICA 축은 (A)(B) **≥5% 자동**, (D) **임원·이사·파트너·직원 자동**, (E) 투자자문사·자문위원 자동 — Rule 144/405 축과 정반대의 bright-line 체계다. 특히 (D): ICA에서는 직함만으로 affiliated person이 되지만, **Rule 144에서는 이사·임원이라는 사실만으로 affiliate가 되지 않는다**(사실·정황 판단; SEC 간행물도 "such as"의 예시로만 든다 — §1.10). 두 축의 교차 오염이 A-06 문서의 제1 실질 위험이다. + +### 1.8 [대조축 2] ICA §2(a)(9) — 25% 지배 추정 (15 U.S.C. §80a-2(a)(9), 발췌) [uscode.house.gov] + +> Any person who owns beneficially, either directly or through one or more controlled companies, more than 25 per centum of the voting securities of a company shall be presumed to control such company. Any person who does not so own more than 25 per centum of the voting securities of any company shall be presumed not to control such company. A natural person shall be presumed not to be a controlled person within the meaning of this subchapter. Any such presumption may be rebutted by evidence, but except as hereinafter provided, shall continue until a determination to the contrary made by the Commission by order either on its own motion or on application by an interested person. + +**왜 여기 있는가:** ICA의 control은 "**25% 초과(>)** 추정 / 25% 이하 부추정 / 반증 가능"의 정량 추정 구조를 조문에 내장한다(같은 항의 정의부는 "controlling influence" 기준). Securities Act Rule 405에는 이런 추정이 **없다**. A-06 문서가 "25% 추정"을 Rule 144 축의 규칙으로 서술하면 오류, ICA와의 대조 해설로 서술하면 정확 — 어느 쪽인지가 대조 포인트다. + +### 1.9 [대조축 3] Exchange Act §16(a)(1) — >10% insider와 dormancy (15 U.S.C. §78p(a)(1), 발췌) [uscode.house.gov] + +> Every person who is directly or indirectly the beneficial owner of more than 10 percent of any class of any equity security (other than an exempted security) which is registered pursuant to section 78l of this title, or who is a director or an officer of the issuer of such security …, shall file the statements required by this subsection with the Commission. + +**왜 여기 있는가:** "내부자(insider)"라는 A-06의 한국어 표제가 §16 개념과 섞이기 쉽다. 두 가지를 고정한다 — ① §16의 지분선은 "**more than 10 percent**"(**초과**, ≥ 아님)이고, ② §16은 **Exchange Act §12 등록 클래스**에만 걸린다. Decipher/BUIDL형 토큰은 §12 미등록(D-01이 2,000명 미만을 지키는 이유가 바로 §12(g) 회피)이므로 **§16은 이 자산군에 dormant**다. 문서가 §16 지위·Form 3/4/5 의무를 이 토큰의 살아 있는 규제처럼 서술하면 오류이고, >10%를 *운영 스크리닝 휴리스틱*(REVIEW 큐 입력)으로만 쓰면 정합이다. + +### 1.10 SEC 공식 안내 — control의 질적 정식과 예시 구조 (Layer 2) [sec.gov] + +SEC 간행물 *Rule 144: Selling Restricted and Control Securities*: + +> An affiliate is a person, such as an executive officer, a director or large shareholder, in a relationship of control with the issuer. Control means the power to direct the management and policies of the company in question, whether through the ownership of voting securities, by contract, or otherwise. + +**의미:** SEC 스스로 Rule 144 맥락에서 Rule 405의 control 정식을 그대로 쓰고, 임원·이사·대주주를 **"such as"의 예시**로만 든다 — 자동 카테고리도, 지분율 기준도 아니다. A-06의 "추정은 운영, 판정은 사실·정황" 구조의 Layer 2 근거로 이 간행물을 인용하는 것이 정확하다. 특정 C&DI 번호를 이 명제의 근거로 다는 것은 본 기준서에서 검증하지 못했으므로, 업로드 문서에 C&DI 번호 인용이 있으면 그 번호 자체를 별도 검증 대상으로 올린다(§5). + +### 1.11 Cascade 참조 스팟 — A-06=true가 켜는 조항들의 임계 자구 [ecfr.gov] + +**(e)(1) 물량 한도 chapeau (→ C-08):** + +> … the amount of securities sold, together with all sales of securities of the same class sold for the account of such person within the preceding three months, shall not exceed the greatest of: + +(i)은 "One percent of the shares or other units of the class outstanding as shown by the most recent report or statement published by the issuer", (ii)는 national securities exchange 및 registered securities association 자동호가시스템 보고 거래량, (iii)은 §242.600상 *effective transaction reporting plan*·*effective national market system plan* 보고 거래량 — Giwa 체인 DEX는 (ii)(iii) 정의상 0이므로 상한이 (i) 1%로 수렴한다는 C-08 결론이 현행 자구로 재확인된다. "shall not exceed"이므로 **위반 부등식은 초과(>)**, 상한 도달(=)은 적법. + +**(h)(1) Form 144 (→ E-06):** + +> If the issuer is, and has been for a period of at least 90 days immediately before the sale, subject to the reporting requirements of section 13 or 15(d) of the Exchange Act and the amount of securities to be sold in reliance upon this rule during any period of three months exceeds 5,000 shares or other units or has an aggregate sale price in excess of $50,000, a notice on Form 144 (§ 239.144 of this chapter) shall be filed electronically with the Commission. + +임계는 "**exceeds** 5,000" · "**in excess of** $50,000" — 둘 다 **초과(>)**. 전자제출("filed electronically")은 2022년 개정 반영 자구다. (h)(2) 비보고 발행자 갈래는 종이 3부 제출로 남아 있다 — Decipher 자산군(비보고 발행자)에는 문언상 (h)(2)가 대응하므로, 문서가 "전자제출 의무"를 이 자산군에 그대로 얹었다면 갈래 오귀속이다. + +**(c)·(f)·(g) (→ E-05·C-09):** (c)(2) 비보고 발행자의 현행정보는 §240.15c2-11(b)(5)(i)(A)–(N)·(P) 정보의 공중 이용가능성으로 충족한다(E-05의 난제). (f)(1)은 brokers' transactions·market maker 직접거래·riskless principal 3방식, (g)(3)(iv)는 ATS 호가 게시 요건 — C-09 소관이므로 여기서는 존재와 위치만 고정한다. + +--- + +## §2. 연산자·기간 판정표 (회귀 테스트 소스) + +| 조항 | 임계 문언 (verbatim 핵심) | 연산자·단위 | 비고 | +| --- | --- | --- | --- | +| 144(a)(2)(ii)·(iii) | "10 percent or more" | **≥ 10%** | 합산 person 정의(지배 기준 아님) | +| 144(b)(1)(i)·(ii) | "has not been an affiliate during the preceding three months" | **직전 3역월** | 비계열 자격의 look-back | +| 144(b)(2) | "at any time during the 90 days immediately before the sale" | **직전 90일** | 계열 tail — (b)(1)과 단위 상이 | +| 144(b)(1)(i) 후단 | "provided a period of one year has elapsed" | **1년 경과 시 (c)(1) 면제** | 보고회사 갈래 한정 | +| 144(e)(1) | "shall not exceed the greatest of" | **위반 = 초과(>)** | 도달(=)은 적법 | +| 144(h)(1)·(2) | "exceeds 5,000 shares" / "in excess of $50,000" | **> 5,000주 / > $50,000** | 3개월 합산 기준 | +| Rule 405 *Control* | "power to direct or cause the direction …" | **정량 기준 없음** | bright-line 부재의 근거 | +| ICA §2(a)(3)(A)·(B) | "5 per centum or more" | **≥ 5%** | ICA 축 — 자동 affiliated person | +| ICA §2(a)(3)(D) | "any officer, director, partner, copartner, or employee" | **직함 자동** | Rule 144 축으로 이식 금지 | +| ICA §2(a)(9) | "more than 25 per centum … shall be presumed" | **> 25% 추정(반증 가능)** | Rule 144 축에 추정 없음 | +| Exchange Act §16(a)(1) | "more than 10 percent … registered pursuant to section 78l" | **> 10% + §12 등록 전제** | Decipher 토큰엔 dormant | + +--- + +## §3. A-06 문서 대조 체크리스트 (C1–C14) + +**C1 — (a)(1) 자구.** §3 원문 블록이 §1.1과 문자 단위 일치하는가. 특히 "controls**,** or is controlled by"의 콤마와 "such issuer" 종결. Rule 405 *Affiliate* 정의와의 혼입 여부(§1.1 자구 주의). + +**C2 — control 출처 서술.** "144은 control 무정의 → Rule 405 정의(Layer 1) + SEC 간행물의 144 맥락 적용(Layer 2)"의 2단 구조인가. Rule 405 서두의 적용범위 문언(§§230.400–494)을 무시한 단정 서술이 없는가. + +**C3 — bright-line 금지.** 어떤 지분율(5%·10%·25% 등)도 Rule 144 축의 PASS/FAIL 규칙으로 코딩되어 있지 않은가. 수치는 오직 스크리닝·REVIEW 라우팅 입력으로만 등장하는가. + +**C4 — 이사·임원 처리.** Rule 144 축에서 "자동 affiliate" 서술이 없는가. 실무상 추정(운영 정책)과 법적 판정(사실·정황)의 분리가 명시돼 있는가. ICA §2(a)(3)(D)의 직함 자동 규정과의 축 분리 해설이 있는가. + +**C5 — 이중 look-back.** (b)(1) "preceding three months"와 (b)(2) "90 days"가 *별개 자구·별개 단위*로 정확히 인용되고, 게이트 구현이 두 기간을 모두 만족하도록(또는 max로) 설계돼 있는가. 단일 "90일"로의 통합 서술이 없는가. + +**C6 — NON_AFFILIATE tail sub-check.** 비계열 판정 로직에 "매도 시점 비-affiliate" AND "look-back 무-affiliate"의 두 원자 검증이 모두 있는가(최다 오구현 지점). 상태 전이(affiliate → 비계열) 시 tail 만료 전 R2 비계열 경로 차단이 걸리는가. + +**C7 — (a)(2) 인터페이스.** person 합산이 ① A-06 판정 대상 확장, ② C-08 물량 합산, ③ (h) 임계 계산의 세 용처로 구분 명기돼 있는가. ≥10% 연산자와 "or in any similar capacity" 자구. + +**C8 — control securities.** affiliate 보유분은 restricted 여부와 무관하게 144 조건 대상이라는 (b)(2) "restricted or any other securities" 문언이 반영돼 있는가. (Decipher 전 토큰이 어차피 restricted라는 사실이 이 법리를 생략할 이유가 되지 않는다 — 문서의 일반 규칙 서술 정확성 문제.) + +**C9 — §2(a)(11) 말미 문장.** 원문 블록이 §1.6과 일치하고, "affiliate를 위한 매도인·중개인의 underwriter 리스크"라는 인과가 이 문장에서 도출돼 있는가. + +**C10 — §16 dormancy.** §16·Form 3/4/5가 언급된다면 ① ">10%"(초과) 연산자, ② §12 등록 전제, ③ Decipher 자산군 dormant 처리가 모두 있는가. + +**C11 — ICA 오염 검사.** 5%·25%·직함 자동 등 ICA §2(a)(3)·(a)(9) 요소가 Rule 144 판정식에 스며든 곳이 없는가. R3 문서군(A-13·A-09·D-01)과의 cross-reference에서 "affiliate"라는 단어가 두 법의 어느 쪽 개념인지 매 등장마다 특정되는가. + +**C12 — Cascade 목록.** A-06=true → E-05(144(c)) + C-08(144(e)) + C-09(144(f)·(g)) + E-06(144(h))의 4연쇄가 정확하고, (h)는 보고/비보고 갈래(전자/종이)가 구분돼 있는가. C-08 참조에서 (e)(1)(ii)(iii) 0-수렴 논거가 §1.11 자구와 일치하는가. + +**C13 — 소스 규율.** 인용 URL이 전부 승인 소스(uscode.house.gov·ecfr.gov·sec.gov·govinfo.gov 등)인가. Cornell LII·Justia 링크가 하나도 없는가. + +**C14 — 현행성 스탬프.** 문서의 기준일·개정 이력 서술이 "§230.144 최종 개정 2022-06/07(전자 Form 144), 이후 무변경, 2026-07-01 현행 확인"과 모순되지 않는가. 2020년 제안(시장연동증권 보유기간)을 살아 있는 개정처럼 쓴 곳이 없는가. + +--- + +## §4. 우선 확인 오류 패턴 (대조 시 가장 먼저 볼 곳) + +**패턴 1 — 두 look-back의 융합.** 실무 문헌 대부분이 "90-day tail" 한 단어로 쓰지만 조문은 (b)(1) 역월 3개월 / (b)(2) 90일의 이원 구조다. 문서가 하나의 숫자로 통합했다면 §3 원문 블록은 자구 오류, §5 판정식은 경계일(89–92일 차이) 오판정 리스크다. 수정 방향: 원문 이원 인용 + 구현은 두 조건 동시 충족. + +**패턴 2 — 예시의 규칙 승격.** "임원·이사·10% 주주 = affiliate"는 SEC 간행물의 *예시*("such as")와 실무 추정을 법 규칙으로 승격시킨 오류다. 수정 방향: 예시·추정은 운영 스크리닝(§6/§11 레이어)으로 내리고, 판정은 Rule 405 질적 기준 + 증명서형(Pattern B) claim + 경계 REVIEW로. + +**패턴 3 — 축 교차 오염.** 같은 프로젝트 안에 ICA의 ≥5%/직함 자동/>25% 추정 체계가 살아 있으므로(R3), A-06에 그 수치가 "참고"를 넘어 판정식으로 들어오기 쉽다. 수정 방향: §1.7–1.9 대조표를 문서에 명시적 "이식 금지" 절로 반영. + +**패턴 4 — dormant 규제의 활성 서술.** §16 의무(단기매매차익 반환·Form 3/4/5)나 (h)(1) 전자제출을 §12 미등록·비보고 발행자군에 살아 있는 의무처럼 쓰는 것. 수정 방향: 각 조항의 전제(§12 등록 / §13·15(d) 보고 지위)를 판정식의 선결 게이트로 명기. + +--- + +## §5. 재개 절차 — 파일 재업로드 후 + +1. **Verbatim diff:** 문서 §3의 각 "핵심 원문" 블록을 §1의 확정 원문과 문자 단위 대조(콤마·단복수·괄호 포함). 불일치는 전부 원문 쪽으로 교정. +2. **연산자 감사:** §2 표의 11행을 문서 전체(판정식·테스트케이스·figure 라벨 포함)에 대해 grep 수준으로 대조 — 특히 ≥10%(a)(2) vs >10%(§16) vs ≥5%/>25%(ICA)의 상호 오기. +3. **체크리스트 C1–C14 순차 판정,** 각 항 PASS/FAIL/N-A 기록. +4. **인용 검증:** 문서 내 모든 URL·release·C&DI 번호를 승인 소스에서 개별 확인(특히 C&DI 번호는 본 기준서 미검증 항목). +5. **Cascade·테스트 정합:** C-08(§3 zero-ADTV·> cap)·D-01(§12(g) 전제)·A-12(red flag 연동) 기존 문서와의 상호참조 일치 확인, 오구현 회귀 테스트(tail sub-check 누락 케이스) 존재 확인. +6. 수정본을 `.md` 정본 + pandoc 빌드 `.docx` 쌍으로 `/mnt/user-data/outputs/`에 산출. + +--- + +## §6. 출처 (전부 2026-07-06 접속·승인 소스) + +| 자료 | URL | 현행성 표시 | +| --- | --- | --- | +| 17 CFR §230.144 전문 | https://www.ecfr.gov/current/title-17/chapter-II/part-230/section-230.144 | Title 17 current as of 2026-07-01 · 최종 개정 반영 2026-06-25 · §144 자체 최종 개정 2022-06/07 | +| 17 CFR §230.405 (*Control*·*Affiliate* 등) | https://www.ecfr.gov/current/title-17/section-230.405 | 동일 · *Control* 정의 무변경 | +| 15 U.S.C. §77b(a)(11) | https://uscode.house.gov/view.xhtml?req=(title:15 section:77b edition:prelim) | prelim, 2026-07 시행 기준 | +| 15 U.S.C. §80a-2(a)(3)·(a)(9) | https://uscode.house.gov/view.xhtml?req=(title:15 section:80a-2 edition:prelim) | "laws in effect on July 1, 2026" 명시 | +| 15 U.S.C. §78p(a)(1) | https://uscode.house.gov/view.xhtml?req=(title:15 section:78p edition:prelim) | prelim 현행 | +| SEC, *Rule 144: Selling Restricted and Control Securities* | https://www.sec.gov/reports/rule-144-selling-restricted-control-securities | SEC 공식 간행물 (Layer 2) | + +*작성: Decipher 리걸 파트 검증 파이프라인 · 본 기준서는 A-06 본문이 아니라 그 대조 표준이다.* \ No newline at end of file diff --git a/docs/compliance/elements/A-08.md b/docs/compliance/elements/A-08.md new file mode 100644 index 0000000..625cac8 --- /dev/null +++ b/docs/compliance/elements/A-08.md @@ -0,0 +1,742 @@ +# ELE.A-08_법인자격산정 + +# A-08 법인 자격 산정 (매수인 측) / Buyer-side Entity-Level Eligibility — 부품 심층 인수인계 문서 (Walkthrough) + +> **이 문서는 무엇인가.** Decipher RWA DEX의 컴플라이언스 부품 중 **A-08(법인 자격 산정 · 매수인 측)** 의 법적 근거·판정 로직·코드 변환을 개발팀이 그대로 구현할 수 있게 정리한 인수인계 문서다. A-08은 **매수인이 법인(entity)일 때** 그 매수인 법인이 해당 거래에서 요구되는 자격(R1이면 적격투자자 AI, R3이면 적격매수자 QP)의 *entity-level 요건*(카테고리 분류 + 자산·투자 임계값 + "취득 목적 설립 아님" + 직접 자격)을 충족하는지 판정하고, 충족 경로가 **구성원 look-through를 요구하면 A-09로 위임**하는 *분기·라우팅* 부품이다. +> +> **자체완결 원칙.** 인용은 1차 공식 자료(uscode.house.gov·ecfr.gov·sec.gov·govinfo.gov)만 쓴다. A-03(적격투자자)·A-13(QP)이 이미 확정한 *카테고리 정의*는 재수록하지 않고 교차참조하며, A-08은 그 정의 위에서 작동하는 *법인 판정 기계*만 다룬다. A-09(look-through)는 A-08이 호출하는 재귀 하위 부품이다. +> +> **검사 대상은 매수인 법인이다.** A-08의 "법인/entity"는 언제나 **매수인 측 법인**을 가리킨다 — 발행자(issuer) 자격 실사가 아니다. 발행자 관계인(affiliate·control person) 판정은 **A-06(내부자 판정)** 의 소관이며, A-08과 구분된다. + +**출처 기준 (Version 1.0, 2026-07-01).** 본 부품의 미국 증권법 인용은 다음 1차 출처를 기준으로 한다 — 15 U.S.C. §80a-2(a)(51)·§80a-3(c)(7)은 uscode.house.gov 현행본, 17 CFR §230.501·§230.506·§270.2a51-1·2a51-2·2a51-3은 eCFR 현행본(Title 17, 2026-06-08 최종 개정), JOBS Act §201(b)(2)(Pub. L. 112-106)는 govinfo.gov, SEC Release IC-22597(62 FR 17512, 1997-04-09)·No. 33-10824(85 FR 64234, 2020 AI 정의 확대)는 sec.gov다. Rule 501(a) 법인 카테고리 (a)(12)·(a)(13)은 2020년 확대 신설분이며, Rule 2a51-1은 2017-01-03 이후 변경 없음. 제정법 출처는 uscode.house.gov로 통일했으며 govinfo.gov 딥링크도 동일한 1차 출처다. + +> **테스트 토큰 전제 (중요).** 본 문서는 실제 BlackRock BUIDL의 발행 표준·transfer architecture·현재 운영 조건을 단정하지 않는다. 본 프로젝트는 BUIDL-like §3(c)(7) private fund interest를 ERC-3643 테스트 토큰으로 모델링하여, 매수인 법인의 AI/QP entity-level 자격 판정을 검증하는 것이다. 이하 'BUIDL'·'ERC-3643' 관련 서술은 모두 이 모델링 전제 하의 것이다. + +--- + +## §1 규제 맥락 (Context First) + +### 1.1 두 개의 축, 그리고 A-08의 자리 + +미국 증권규제에는 A-08이 걸치는 두 개의 독립된 축이 있다 — **① 증권 발행의 등록/면제**(Securities Act 1933, Reg D Rule 506(c))와 **② 펀드의 투자회사 등록/면제**(Investment Company Act 1940 §3(c)(7)). BUIDL-like 토큰은 이 둘을 동시에 탄다: 발행은 Rule 506(c)(모든 매수인 AI), 펀드 구조는 §3(c)(7)(모든 보유자 QP). 매수인이 법인이면 두 축 각각에서 그 법인이 자격을 갖췄는지 판정해야 하는데, 그 *법인 전용 판정 기계*가 A-08이다. + +자연인 자격(A-03 AI·A-13 QP)이 단일 인격을 보는 데 비해, 법인은 **두 겹**을 본다 — 법인 *자체*가 직접 자격을 갖는가(예: 등록 BD, 자산 `>` $5M, 재량 $25M 운용), 아니면 *구성원을 통해서만* 자격을 얻는가(예: 전원 AI 보유, 가족회사, 전원 QP). A-08은 이 두 겹 중 **첫 겹(entity-level 분류·임계값·급조 판정)** 을 판정하고, 둘째 겹(구성원 추적)이 필요하면 A-09에 넘긴다. + +### 1.2 왜 "법인 매수인"이 따로 어려운가 — anti-circumvention + +법인은 자격 우회의 통로가 될 수 있다. 무자격자 여럿이 회사·신탁 껍데기를 만들어 그 뒤에 숨거나, 이 거래만을 위해 회사를 *급조*(formed for the specific purpose)해 자산 요건을 형식적으로 맞추는 식이다. 미국법은 이를 두 겹으로 막는다 — **① 급조 회사 배제**(취득 목적 설립 회사는 원칙적으로 자격 불인정), **② look-through**(지분을 자연인까지 추적해 구성원 자격 확인). A-08 설계 부담의 대부분이 이 anti-circumvention 논리에서 나오며, formed-for-purpose 게이트와 A-09 라우팅이 그 구조물이다. + +### 1.3 왜 한 부품이 AI(R1)와 QP(R3)를 함께 다루나 + +AI(적격투자자)와 QP(적격매수자)는 서로 다른 기준이지만(순자산/자산 vs 투자자산, $1M·$5M vs $5M·$25M), *법인일 때의 판정 절차*는 구조가 같다 — 카테고리로 분류 → 임계값 비교(포함성 주의) → 급조 여부 → 필요 시 구성원 look-through. A-08은 이 공통 절차를 한 기계로 구현하고, "이번 거래에서 AI를 볼지 QP를 볼지"는 **활성화된 Recipe**에 따라 분기한다(§5.4). 어느 카테고리 *정의*를 쓸지는 A-03/A-13이 제공한다. + +### 1.4 A-03·A-13과의 분업 (왜 A-08이 따로 있나) + +A-03(적격투자자)과 A-13(QP)은 *"무엇이 자격을 만드는가"* 라는 **카테고리 정의**를 담당한다 — 자연인 매수인이면 그 둘이 직접 판정한다. A-08은 매수인이 **법인일 때만** 켜지는 *entity 분기 처리기*다. + +| 부품 | 담당 | 자연인 매수인 | 법인 매수인 | +|---|---|---|---| +| A-03 / A-13 | 카테고리 *정의* (claim.basis 메뉴) | **직접 판정** | 카테고리 *기준*만 제공 | +| **A-08** | **법인 entity-level *판정 기계*** | 비활성(dormant) | **활성 — 분류·임계값·formed-for-purpose·라우팅** | +| A-09 | 지분 *재귀 look-through* | 종착(자연인) | A-08이 호출 시 실행 | +| A-06 | 발행자 *affiliate/control* 판정 | (별개 축) | (별개 축 — A-08 아님) | + +**쉽게 말하면.** A-03/A-13이 "법전의 자격 조항"이라면, A-08은 "매수인이 회사일 때 그 회사를 어느 조항 칸에 넣고, 자산 숫자를 재고, 급조 회사인지 따지고, 주주를 더 봐야 하는지를 결정하는 분류 창구"다. 주주를 실제로 타고 내려가는 일(재귀)은 A-09가, 발행자 지배관계인 판정은 A-06이 한다. + +### 1.5 Existential Risk — 왜 법인 판정이 치명적인가 + +§3(c)(7) 펀드는 **모든** 보유자가 취득 시점에 QP여야 면제가 성립한다(15 U.S.C. §80a-3(c)(7)(A)). 법인 매수인 하나가 잘못 통과하면 — 예컨대 QP가 아닌 구성원을 가린 법인이 들어오면 — 펀드 전체의 투자회사 등록 면제가 무너진다(fund-level existential consequence). 그래서 법인 판정의 *형식 충족(자산 숫자)* 만으로는 부족하고, **취득 목적 설립 여부**와 **구성원 look-through**가 핵심 안전장치가 된다. 반대로 자격 있는 기관 매수인을 문턱에서 오차단하면 정당한 유동성을 잃는다 — 그래서 QIB 간주 경로(§3.10) 같은 실제 경로를 빠짐없이 담아야 한다. + +### 1.6 한국법 비교 (참고) + +자본시장법상 **전문투자자**(§9⑤, 시행령 §10)도 법인 유형별로 자산·전문성 요건을 두지만, 미국 AI/QP의 **"취득 목적 설립 금지(anti-circumvention)"** 와 **재귀 look-through**처럼 *지분 구조를 자연인까지 추적해 차단*하는 장치는 약하다. A-08의 설계 부담 대부분은 이 미국 특유의 anti-circumvention 논리에서 나온다. + +--- + +## §2 메타 정보 (Internal Identifier Box) + +| 항목 | 값 | +|---|---| +| **부품 ID** | A-08 | +| **부품 이름** | 법인 자격 산정 (매수인 측) / Buyer-side Entity-Level Eligibility | +| **카테고리** | A — 신원·자격 (매수인 측) | +| **검사 대상(한 줄)** | "이 *매수인 법인*이 해당 거래에서 요구되는 자격(R1=AI · R3=QP)의 entity-level 요건(카테고리 + 임계값 + 취득목적 설립 아님 + 직접 자격)을 충족하는가, 그리고 구성원 look-through가 필요한가" | +| **활성 Recipe** | **R1 (Reg D 506(c) Issuance)** — 조건부(법인 매수인 + R1 실제 활성 시): AI 법인 카테고리 · **R3 (ICA §3(c)(7) Fund)** — 조건부(법인 매수인): QP 법인 카테고리. **R1·R3 동시 실제 활성 시 AND** (§5.4) | +| **활성 조건** | 매수인이 *법인*일 때만 (자연인 매수인 시 dormant). AI 게이트는 그 거래가 실제로 R1(506(c) offering·§4(a)(7) resale 등 buyer-AI 요구 경로)일 때만 켜짐 — 과거 발행 이력으로 자동 소환 아님(§5.4) | +| **Cascade Element** | **A-09**(지분 look-through, 라우팅 시) · A-03/A-13(카테고리 기준 제공) · **A-06**(look-through 중 발행자 affiliate 발견 시, 별개 축) · A-04(신원 중복, 분리 카운트 연동) · A-11(증명 만료) · B-01(manifest 정합) | +| **Timing / Stateful** | pre-trade / STATELESS (counter 미보유; 입력 claim만 판정) | +| **검증 패턴** | (B) 증명서 확인형 — entity-level 사실은 off-chain 검증 후 claim으로 유입(법적 토대 = Rule 2a51-1(h)·Rule 506(c)(2)(ii), §8·§3.11) | +| **성숙도** | R-1 단계 — A-13·A-03 cascade 의존 부품 (Version 1.0) | + +--- + +## §3 ① 법적 근거 (Layer 1 → 2 → 3) + +**읽는 법.** 법적 근거는 세 겹이다 — **Layer 1**(조문)은 의회가 만든 법률 텍스트(statute), **Layer 2**(규칙)는 SEC가 그것을 실무 수준으로 구체화한 연방규칙(rule), **Layer 3**(해석)은 SEC 발행문서·No-Action Letter·C&DI가 모호한 부분을 메운 해석이다. 아래 **표 1의 종류 칸이 그대로 Layer에 대응**한다. 본 절은 조문이 작동하는 **논리 흐름 순서**로 배열돼 §3.1~§3.17 번호를 유지하며(중요도순 아님), 각 항목이 어느 Layer인지는 표 1로 확인한다. + +### 3.0 법조문 관계 플로우차트 (개발자용) + +아래 그림은 A-08 판정 로직을 하나의 큰 흐름으로 정리한 것이다 — 매수인이 법인인가 → **(핵심) 이 거래에서 '실제로' 켜지는 게이트(AI/QP)** → 카테고리 분류 → 임계값(AI `>` $5M strict / QP `≥` $5M·$25M inclusive / QIB 간주) → 급조 회사면 **A-09 look-through**(구성원 전원 자격 확인; 발행자 affiliate는 A-06) → 켜진 게이트 결합(둘 다면 AND) → PASS/FAIL. 특히 **과거 506(c)로 발행된 §3(c)(7) 토큰의 Rule 144 2차 이전에 buyer-AI를 자동 재부과하지 않는다**는 점을 노드로 명시한다. + +![그림 3.0 — A-08 법인 자격 산정 개발자용 판정 흐름 (게이트 활성은 토큰의 과거 발행 방식이 아니라 '지금 이 거래'의 성격으로 결정)](A-08_flow_dev.png) + +**범례.** + +- **파랑** = 핵심 조문·게이트(Direct) — 게이트 활성·카테고리 분류·A-09 look-through +- **회색** = 분기·판정 노드 +- **초록** = 통과(PASS)·예외 카브아웃(자연인 DORMANT 등) +- **빨강** = 탈락(FAIL) +- **주황** = 주의·참고 — Rule 144 2차 게이트·정확히 $5M 경계·affiliate → A-06 + +### 3.0.1 실제 BUIDL은 어떻게 적용되나 + +**(재확인) 본 서술은 실제 BlackRock BUIDL의 발행 표준·transfer architecture를 단정하지 않는다 — BUIDL-like §3(c)(7) private fund interest를 ERC-3643 테스트 토큰으로 모델링한 것이다.** BUIDL은 발행 Rule 506(c)·펀드 구조 ICA §3(c)(7)·최소 청약 $5M이고, ERC-3643(T-REX) 가정 하에서 Securitize가 자격 claim의 Trusted Issuer가 된다. + +**A-08 관점 — 법인 매수인이 대부분이다.** BUIDL의 전형적 매수인은 운용사·기관·SPV 등 **법인**이다. 이들이 QP가 되는 실제 경로는 (iv) $25M 직접 산정보다 **(g)(1) QIB 간주**(§3.10)가 많고, 가족회사(ii)·신탁(iii)도 구조상 가능하다. 발행(R1) 단계에서는 같은 법인이 AI 법인 카테고리((a)(1)(3)(8)(9) 등)에도 들어야 하며, R1·R3가 동시에 실제 활성인 발행에서는 두 자격을 **AND**로 본다. 반면 발행 뒤 보유자가 DEX에서 토큰을 되파는 **Rule 144 2차 이전**에서는 fund exemption 유지를 위한 **buyer QP 게이트가 기본**이고, buyer-AI는 §4(a)(7) 같은 별도 경로를 택한 경우에만 추가된다(§5.4). + +**같은 $5M, 다른 개념 주의.** BUIDL 청약 최소액 $5M은 발행자가 정한 조건(변경 가능)이고, QP 자격의 investments $5M(가족회사 (ii))·AI (a)(9)의 investments $5M은 법정 요건이며 서로 다르다. 청약 $5M을 냈다고 자격 요건이 자동 충족되는 게 아니다. + +### 3.0.2 조문 순서·중요성 한눈에 보기 (표 1·표 2) + +**표 1 — Authority Verification Table (Official URLs Only)** + +| 종류 | Authority | 내용 | A-08 관련성 | Direct/Conditional/Supporting | Official URL | +|---|---|---|---|---|---| +| Statute | Securities Act §4(a)(2), 15 U.S.C. §77d(a)(2) | private placement 기본 면제 | R1 발행 면제의 statutory basis | Supporting | uscode.house.gov | +| SEC Rule | Rule 506(c), 17 C.F.R. §230.506(c) | 공모 제한 없는 발행 + 전 매수인 AI + reasonable verification | R1 활성 트리거(매수인 AI 요건) | Supporting | ecfr.gov | +| Statute | ICA §3(c)(7)(A), 15 U.S.C. §80a-3(c)(7) | 투자회사 등록 면제(전 보유자 QP · 비자발적 이전 예외) | R3 활성 트리거(보유자 QP 요건) | Supporting | uscode.house.gov | +| Statute | JOBS Act §201(b)(2), Pub. L. 112-106 | 506(c) 일반청약 ≠ public offering | R1·R3 발행단계 공존 다리(§9.6·§12) | Supporting | govinfo.gov | +| SEC Rule | Rule 501(a)(1)(2)(3)(7)(8)(9)(12)(13), 17 C.F.R. §230.501(a) | AI 법인 카테고리 정의 | **R1 법인 분류·임계값 직접 판정** | **Direct** | ecfr.gov | +| SEC Rule | Rule 2a51-1(b)(c)(d)(e)(f), 17 C.F.R. §270.2a51-1 | "investments" 정의·투자목적·평가·차감 | investments 기준 카테고리 산정 | **Conditional** | ecfr.gov | +| SEC Rule | Rule 2a51-1(g)(3), 17 C.F.R. §270.2a51-1 | 자회사·모회사 investments 합산 | **QP (iv) $25M 산정 전용** | Conditional | ecfr.gov | +| SEC Rule | Rule 501(e), 17 C.F.R. §230.501(e) | purchaser 수 계산·anti-circumvention | R1 급조 처리의 *보조*(직접 근거 아님) | Supporting | ecfr.gov | +| Statute | ICA §2(a)(51)(A)(ii)(iii)(iv), 15 U.S.C. §80a-2(a)(51)(A) | QP 법인 clause 정의 | **R3 법인 분류·임계값 직접 판정** | **Direct** | uscode.house.gov | +| SEC Rule | Rule 2a51-1(g)(1), 17 C.F.R. §270.2a51-1 | QIB 간주 QP | **R3 기관 매수인 주 경로(조건부)** | **Direct** | ecfr.gov | +| SEC Rule | Rule 2a51-1(h), 17 C.F.R. §270.2a51-1 | reasonable belief 안전항 | 패턴 B(증명서) 법적 토대(QP측) | **Direct** | ecfr.gov | +| Statute | ICA §2(a)(51)(C), 15 U.S.C. §80a-2(a)(51)(C) | excepted IC — 1996 pre-amendment consent | 전환·fund-of-funds 매수인일 때만 발동 | Conditional | uscode.house.gov | +| SEC Rule | Rule 2a51-2, 17 C.F.R. §270.2a51-2 | beneficial owner 산정·간접소유 | 펀드·전환 매수인 look-through 산정 | Conditional | ecfr.gov | +| SEC Rule | Rule 2a51-3(a)(b), 17 C.F.R. §270.2a51-3 | 목적형성 회사 look-through((ii)(iv)) | **R3 formed-for-purpose → look-through 트리거** | **Direct** | ecfr.gov | +| SEC Release | Release No. 33-10824 (85 FR 64234) | 2020 AI 정의 확대 | (a)(12)·(13) 신설 배경 | Background | sec.gov | +| SEC Release | Release No. IC-22597 (62 FR 17512) | QP 규칙 채택 | 2a51-1/2/3 look-through 취지 | Background | sec.gov | + +> **범례.** **핵심(Direct)** — Rule 501(a) AI 법인 카테고리·§2(a)(51)(A) QP 법인 clause·Rule 2a51-1(g)(1) QIB·Rule 2a51-1(h)·Rule 2a51-3. **조건부(Conditional)** — Rule 2a51-1(b)(c)(d)(e)(f)·(g)(3)(investments/(iv) 산정에서만)·§2(a)(51)(C)·Rule 2a51-2(펀드·전환 매수인에서만). **보조(Supporting)** — §4(a)(2)·Rule 506(c)·§3(c)(7)·JOBS §201(b)(2)·**Rule 501(e)**(purchaser 수 계산·anti-circumvention 보조 — 급조 entity의 자격 배제는 (a)(3)(7)(9)(12) 각 조항의 "not formed for the specific purpose" 요건으로 판정하고 (e)는 직접 근거로 쓰지 않음). **배경(Background)** — Release 33-10824·IC-22597. + +**표 2 — 조문 순서·중요성 한눈에 보기** + +| 순서 | 조문 | 중요성 | A-08이 그걸로 하는 일 | +|---|---|---|---| +| §3.1 | §4(a)(2) | 보조 | 안 함 — R1 발행 면제의 배경 | +| §3.2 | Rule 506(c) | 보조 | 안 함 — 전 매수인 AI 요건이 A-08 R1 활성을 트리거 | +| §3.3 | §3(c)(7)(A) | 보조 | 안 함 — 전 보유자 QP 요건이 A-08 R3 활성을 트리거 | +| §3.4 | JOBS §201(b)(2) | 보조 | 안 함 — 506(c)↔§3(c)(7) 발행단계 공존 전제 | +| §3.5 | Rule 501(a) | **핵심** | AI 법인 카테고리 분류 + 자산/investments 임계값 직접 판정 | +| §3.6 | Rule 2a51-1(b)(c)(d)(e)(f) | 조건부 | investments 정의·투자목적·평가·차감 기준 차용 | +| §3.7 | Rule 2a51-1(g)(3) | 조건부 | QP (iv) $25M 산정 시 자회사·모회사 합산 | +| §3.8 | Rule 501(e) | 보조 | purchaser 수 계산·anti-circumvention 보조 (R1 급조 배제의 직접 근거는 (a)(3)(7)(9)(12)) | +| §3.9 | §2(a)(51)(A) | **핵심** | QP 법인 카테고리((ii)(iii)(iv)) 분류 + 임계값 직접 판정 | +| §3.10 | Rule 2a51-1(g)(1) | **핵심** | QIB 매수인을 QP로 간주(조건부) | +| §3.11 | Rule 2a51-1(h) | **핵심** | 증명서(claim) 신뢰의 법적 토대(reasonable belief) | +| §3.12 | §2(a)(51)(C) | 조건부 | 전환·fund-of-funds 매수인의 1996 consent 확인 | +| §3.13 | Rule 2a51-2 | 조건부 | 펀드·전환 매수인 beneficial owner 산정 | +| §3.14 | Rule 2a51-3 | **핵심** | R3 취득목적 회사((ii)(iv)) look-through(A-09) 트리거 | +| §3.15 | 판례·발행문서 | 보조 | 해석 자료(IC-22597·33-10824) | +| §3.16 | (매트릭스) | — | Sub-요건 분해 매트릭스 | +| §3.17 | (총정리) | — | ERC-3643·claim.basis 매핑 한 표 | + +### 3.1 Securities Act §4(a)(2) — private placement 기본 면제 (R1 framework) + +- **조항**: Securities Act of 1933 §4(a)(2), 15 U.S.C. §77d(a)(2) — uscode.house.gov +- **핵심 원문** (15 U.S.C. §77d(a)): + + > The provisions of section 77e of this title shall not apply to— ... (2) transactions by an issuer not involving any public offering. + +- **한국어.** 본편 제77e조(§5)의 규정은 다음에는 적용되지 아니한다 — … (2) 어떠한 공모(public offering)도 수반하지 아니하는, 발행자에 의한 거래. +- **쉽게 말하면.** 사모(공개 모집이 아닌 발행)면 SEC 등록이 면제된다. Rule 506(c)가 이 면제를 구체화한 safe harbor이고, A-08은 이 R1 트랙에서 *법인 매수인*의 자격을 검사한다. +- **PASS/FAIL 반영.** 보조(Supporting) ✕(간접) — A-08은 §4(a)(2) 자체를 판정하지 않는다. R1 발행 면제가 성립한다는 *전제*일 뿐. +- **ERC-3643 변환.** 직접 claim 매핑 없음. `manifest.activeRecipes`에 R1 포함 여부로만 반영. + +### 3.2 Rule 506(c) — 모든 매수인 AI 요건 (A-08 R1 활성 트리거) + +- **조항**: 17 C.F.R. §230.506(c) — ecfr.gov +- **핵심 원문** (17 C.F.R. §230.506(c), 발췌): + + > (c) ... (2) Specific conditions— (i) Nature of purchasers. All purchasers of securities sold in any offering under paragraph (c) of this section are accredited investors. (ii) Verification of accredited investor status. The issuer shall take reasonable steps to verify that purchasers of securities sold in any offering under paragraph (c) of this section are accredited investors. + +- **한국어.** (c) … (2) 개별 요건 — (i) 매수인의 성격. 본조 (c)항에 따른 발행(offering)에서 매도되는 증권의 모든 매수인은 적격투자자(accredited investor)이다. (ii) 적격투자자 지위의 검증. 발행자는 본조 (c)항에 따른 발행에서 매도되는 증권의 매수인이 적격투자자임을 검증하기 위하여 합리적인 조치(reasonable steps)를 취하여야 한다. +- **쉽게 말하면.** 506(c)는 일반 광고를 허용하는 대신 *모든 매수인이 AI*일 것을 요구한다. 매수인이 법인이면 "그 법인이 AI 법인 카테고리에 드는가"를 누군가 판정해야 하는데, 그 판정자가 A-08이다. 이 요건은 **그 offering에** 붙는 것이지, 과거 이 방식으로 발행됐다는 이유로 이후 모든 2차 거래에 자동 재부과되지 않는다(§5.4). +- **PASS/FAIL 반영.** 보조(Supporting) — A-08은 (c)(2)(i)의 "매수인 AI" 요건을 법인에 대해 집행한다. (c)(2)(ii) reasonable-steps는 패턴 B(증명서)의 AI측 법적 토대(§8). +- **ERC-3643 변환.** R1 활성 시 `require(entityClassifiedAsAI == true)` 게이트의 상위 근거. `claim.basis ∈ {AI 법인 카테고리}`. + +### 3.3 ICA §3(c)(7)(A) — 펀드 면제: 모든 보유자 QP (A-08 R3 활성 트리거) + +- **조항**: ICA of 1940 §3(c)(7)(A), 15 U.S.C. §80a-3(c)(7) — uscode.house.gov +- **핵심 원문** (15 U.S.C. §80a-3(c)(7)(A), 전문): + + > Any issuer, the outstanding securities of which are owned exclusively by persons who, at the time of acquisition of such securities, are qualified purchasers, and which is not making and does not at that time propose to make a public offering of such securities. Securities that are owned by persons who received the securities from a qualified purchaser as a gift or bequest, or in a case in which the transfer was caused by legal separation, divorce, death, or other involuntary event, shall be deemed to be owned by a qualified purchaser, subject to such rules, regulations, and orders as the Commission may prescribe as necessary or appropriate in the public interest or for the protection of investors. + +- **한국어.** 그 미상환 증권 전부를, 그 증권의 취득 시점에 적격매수자(qualified purchaser)인 자만이 배타적으로 보유하고, 그 증권에 관하여 공모를 하고 있지 아니하며 그 시점에 공모할 것을 제안하지도 아니하는 발행자. 적격매수자로부터 증여 또는 유증으로 증권을 받은 자, 또는 법적 별거·이혼·사망 기타 비자발적 사건으로 이전이 발생한 경우에 증권을 받은 자가 보유하는 증권은, 위원회가 공익 또는 투자자 보호를 위하여 필요하거나 적절하다고 정하는 규칙·규정·명령에 따라, 적격매수자가 보유하는 것으로 본다. +- **쉽게 말하면.** §3(c)(7) 펀드는 "보유자가 전부 QP"라는 조건으로 투자회사 등록을 면제받는다. 단 하나라도 비QP가 들어오면 면제가 깨진다. 둘째 문장은 상속·이혼 등 *비자발적 이전* 예외로, 그런 이전 때문에 면제가 곧바로 깨지지 않게 한다. 매수인이 법인일 때 "그 법인이 QP 법인 카테고리에 드는가"를 판정하는 A-08이 R3의 핵심 안전장치다. +- **PASS/FAIL 반영.** 보조(Supporting) — A-08은 *법인 매수인의 QP 자격*을 집행한다. "전 보유자 QP" fund-level 불변식이 A-08을 R3에서 활성화한다. 비자발적 이전 예외는 `forcedTransfer()`/`recovery()` 경로. +- **ERC-3643 변환.** R3 활성 시 `require(entityClassifiedAsQP == true)`. 비자발적 이전 = 일반 canTransfer 게이트와 분리된 `forcedTransfer()`/`recovery()`. **"at the time of acquisition"** 은 §5.5 취득시점·OD-1과 연결. + +### 3.4 JOBS Act §201(b)(2) — 506(c) 일반청약과 "public offering"의 단절 (발행단계 공존 다리) + +- **조항**: JOBS Act §201(b)(2), Pub. L. 112-106 — govinfo.gov +- **핵심 원문**: + + > Offers and sales exempt under section 230.506 of title 17, Code of Federal Regulations (as revised pursuant to section 201 of the Jumpstart Our Business Startups Act) shall not be deemed public offerings under the Federal securities laws as a result of general advertising or general solicitation. + +- **한국어.** (JOBS법 제201조에 따라 개정된) 연방규정집 제17편 제230.506조에 따라 면제되는 offer 및 sale은, 일반광고 또는 일반청약(general advertising or general solicitation)을 이유로 연방증권법상 공모(public offering)로 보지 아니한다. +- **쉽게 말하면.** A-08은 R1(506(c) 일반청약 허용)과 R3(§3(c)(7) "공모 금지")에 동시에 걸리는데, 표면상 모순이다. §201(b)(2)가 이를 푼다 — 506(c)로 대놓고 광고하며 QP에게 발행해도 그 *발행 행위*는 공모가 아니므로 §3(c)(7) 발행단계 조건이 성립한다. **단 2차 거래는 §201(b)(2) 밖** — DEX 상시 호가가 별도 공모를 유발하는지는 미결(§9.6·§12). +- **PASS/FAIL 반영.** 보조(Supporting) ✕(간접) — A-08 판정에 직접 안 쓰임. R1·R3 발행단계 공존의 법적 전제. +- **ERC-3643 변환.** 온체인 구현 없음. 발행 UI의 일반청약 허용 근거일 뿐, transfer·claim 로직과 무관. + +### 3.5 Rule 501(a) — Accredited Investor (법인 카테고리) + +- **조항**: 17 C.F.R. §230.501(a)(1)·(2)·(3)·(7)·(8)·(9)·(12)·(13) — ecfr.gov +- **핵심 원문** (17 C.F.R. §230.501(a), 발췌): + + > (2) Any private business development company as defined in section 202(a)(22) of the Investment Advisers Act of 1940; + > + > (3) Any organization described in section 501(c)(3) of the Internal Revenue Code, corporation, Massachusetts or similar business trust, partnership, or limited liability company, not formed for the specific purpose of acquiring the securities offered, with total assets in excess of $5,000,000; + > + > (7) Any trust, with total assets in excess of $5,000,000, not formed for the specific purpose of acquiring the securities offered, whose purchase is directed by a sophisticated person as described in §230.506(b)(2)(ii); + > + > (8) Any entity in which all of the equity owners are accredited investors; + > *Note 1 to paragraph (a)(8):* It is permissible to look through various forms of equity ownership to natural persons in determining the accredited investor status of entities under this paragraph (a)(8). ... + > + > (9) Any entity, of a type not listed in paragraph (a)(1), (2), (3), (7), or (8), not formed for the specific purpose of acquiring the securities offered, owning investments in excess of $5,000,000; + > *Note 1 to paragraph (a)(9):* For the purposes of this paragraph (a)(9), "investments" is defined in rule 2a51-1(b) under the Investment Company Act of 1940 (17 CFR 270.2a51-1(b)). + +- **한국어.** (2) 1940년 투자자문업법 제202(a)(22)조에 정의된 private business development company(사모 사업개발회사); (3) 국세법 제501(c)(3)조에 규정된 조직, 회사(corporation), 매사추세츠형 또는 유사 사업신탁, 조합(partnership), 또는 유한책임회사(LLC)로서, 매도되는 증권의 취득을 특정 목적으로 하여 설립되지 아니하였고, 총자산(total assets)이 $5,000,000을 초과하는 자; (7) 총자산이 $5,000,000을 초과하고, 매도되는 증권의 취득을 특정 목적으로 하여 설립되지 아니하였으며, 그 매수가 §230.506(b)(2)(ii)에 규정된 sophisticated person에 의하여 지휘되는 신탁; (8) 그 지분권자(equity owners) 전원이 적격투자자인 entity; *(a)(8) 주해 1:* (a)(8)에 따른 entity의 적격투자자 지위를 판정함에 있어, 다양한 형태의 지분소유를 통하여 자연인까지 look-through 하는 것이 허용된다. … (9) (a)(1)·(2)·(3)·(7)·(8)에 열거되지 아니한 유형의 entity로서, 매도되는 증권의 취득을 특정 목적으로 하여 설립되지 아니하였고, investments를 $5,000,000 초과 보유하는 자; *(a)(9) 주해 1:* 본 (a)(9)의 목적상 "investments"는 1940년 투자회사법상 rule 2a51-1(b)(17 CFR 270.2a51-1(b))에 정의된다. +- **쉽게 말하면.** AI 법인 칸은 — ③자산 큰 일반 회사, ⑦자산 큰 신탁(전문가가 결정), ⑧주인이 전부 AI인 회사, ⑨나머지 유형 중 투자자산 큰 회사, 그리고 ①금융기관·⑫⑬ family office/client. ③⑨는 *돈*, ⑦은 *돈+전문가*, ⑧은 *주인의 자격*이다. ③⑦⑨에는 공통으로 **"급조 회사 아님"** 단서가 붙는다. +- **PASS/FAIL 반영.** 직접(Direct) ○ — A-08이 *직접 임계값을 재는* AI 법인 카테고리는 (a)(3)·(7)·(9)다. (a)(8)은 look-through 강제, (a)(1)·(2)·(12)·(13)은 지위/유형 분류만 한다(세부 정의는 A-03 참조). **주의: (a)(3)·(7)·(9) 모두 "in excess of" = `>`(strict)** — §2(a)(51) QP의 `≥`와 정반대 경계(§3.9·§5.3). (a)(2) private BDC는 임계값·급조 게이트가 없는 지위형((a)(1)과 동류). +- **ERC-3643 변환.** `claim.basis ∈ {AI_FINANCIAL_INSTITUTION(a1), AI_PRIVATE_BUSINESS_DEVELOPMENT_COMPANY(a2), AI_ENTITY_ASSETS_5M(a3), AI_TRUST(a7), AI_ALL_EQUITY_OWNERS(a8), AI_ENTITY_INVESTMENTS_5M(a9), AI_FAMILY_OFFICE(a12), AI_FAMILY_CLIENT(a13)}`, `thresholdInclusive=false`(a3/a7/a9), `formedForSpecificPurpose` 필드 필수(a3/a7/a9/a12). + +### 3.6 Rule 2a51-1(b)·(c)·(d)·(e)·(f) — "Investments" 정의·투자목적·평가·차감 + +- **조항**: 17 C.F.R. §270.2a51-1(b)·(c)·(d)·(e)·(f) — ecfr.gov +- **핵심 원문** (발췌): + + > (b) *Types of Investments.* ... the term Investments means: (1) Securities ... other than securities of an issuer that controls, is controlled by, or is under common control with, the Prospective Qualified Purchaser ... unless the issuer ... is: (i) An Investment Vehicle; (ii) A Public Company; or (iii) A company with shareholders' equity of not less than $50 million ...; (2) Real estate held for investment purposes; ... (7) Cash and cash equivalents ... held for investment purposes. + > + > (c) *Investment Purposes.* For purposes of this section: (1) Real estate shall not be considered to be held for investment purposes by a Prospective Qualified Purchaser if it is used by the Prospective Qualified Purchaser or a Related Person for personal purposes or as a place of business, or in connection with the conduct of the trade or business of the Prospective Qualified Purchaser or a Related Person, provided that real estate owned by a Prospective Qualified Purchaser who is engaged primarily in the business of investing, trading or developing real estate in connection with such business may be deemed to be held for investment purposes ... + > + > (d) *Valuation.* ... the aggregate amount of Investments ... shall be the Investments' fair market value on the most recent practicable date or their cost ... + > + > (e) *Deductions.* ... there shall be deducted ... the amount of any outstanding indebtedness incurred to acquire ... the Investments owned by such person. + > + > (f) *Deductions: Family Companies.* In determining whether a Family Company is a qualified purchaser, in addition to the amounts specified in paragraph (e) ..., there shall be deducted ... any outstanding indebtedness incurred by an owner of the Family Company to acquire such Investments. + +- **한국어.** (b) 투자의 종류. 법 제2(a)(51)조의 목적상 … "Investments"란 다음을 의미한다 — (1) 증권. 다만 Prospective Qualified Purchaser를 지배하거나, 그에 의하여 지배되거나, 그와 공통의 지배 하에 있는 발행자의 증권은 제외한다. 다만 그 증권의 발행자가 (i) Investment Vehicle, (ii) Public Company, 또는 (iii) 자기자본(shareholders' equity)이 $50,000,000 이상인 회사인 경우에는 그러하지 아니하다; (2) 투자 목적으로 보유하는 부동산; … (7) 투자 목적으로 보유하는 현금 및 현금성 자산. (c) 투자 목적. 본조의 목적상: (1) 부동산은, Prospective Qualified Purchaser 또는 Related Person이 개인적 용도로 또는 사업장소로, 또는 Prospective Qualified Purchaser 또는 Related Person의 trade·business의 수행과 관련하여 사용하는 경우, 그 Prospective Qualified Purchaser가 투자 목적으로 보유하는 것으로 보지 아니한다. 다만 주로 부동산의 투자·거래·개발을 업으로 하는 Prospective Qualified Purchaser가 그 사업과 관련하여 소유하는 부동산은 투자 목적으로 보유하는 것으로 볼 수 있다 …. (d) 평가. … Investments의 총액은 실무상 가능한 가장 최근 일자의 공정시장가치 또는 그 취득원가로 한다. (e) 공제. … 그러한 자가 보유하는 Investments를 취득하기 위하여 부담한 미상환 채무액을 공제한다. (f) 공제: 가족회사(Family Companies). 가족회사가 적격매수자인지 판정함에 있어, (e)항에 규정된 금액에 더하여, 그러한 Investments를 취득하기 위하여 가족회사의 소유자가 부담한 미상환 채무를 공제한다. +- **쉽게 말하면.** "투자자산"이 무엇인지, 무엇이 *투자 목적* 보유로 인정되는지, 어떻게 값을 매기고 빚을 빼는지의 계산 규칙이다. 특히 (c) — 개인 거주·사업장·영업용으로 쓰는 부동산은 investments에서 빠진다(부동산 투자·개발을 업으로 하면 예외). AI (a)(9)와 QP (i)(ii)(iv) 모두 이 정의·투자목적 기준을 자산 계산에 쓴다. 따라서 부동산·현금성 자산·commodity가 섞인 경우, Trusted Issuer가 *어느 자산을 투자목적으로 인정해* thresholdAmount를 냈는지가 claim에 드러나야 한다. +- **PASS/FAIL 반영.** 조건부(Conditional) — investments 기준 카테고리((a)(9)·QP (ii)(iv))에서만 발동. A-08은 산정 자체를 하지 않고 검증기관이 (b)(c)(d)(e)(f) 적용 후 계산한 `thresholdAmount`를 신뢰한다(패턴 B). +- **ERC-3643 변환.** `investmentsComputation = {typesPerSubsecB, investmentPurposeConfirmed, personalUseOrBusinessUseExcluded, fairValueOrCost, deductAcquisitionDebt, familyCompanyOwnerDebtDeduct}` — 전부 off-chain 계산 후 `thresholdAmount`로 claim에 실림(§8). claim 필드 `investmentPurposeConfirmed`·`personalUseOrBusinessUseExcluded` 추가(§4.2). + +### 3.7 Rule 2a51-1(g)(3) — 자회사·모회사 investments 합산 (QP (iv) 전용) + +- **조항**: 17 C.F.R. §270.2a51-1(g)(3) — ecfr.gov +- **핵심 원문** (17 C.F.R. §270.2a51-1(g)(3)): + + > (3) *Investments by Subsidiaries.* For purposes of determining the amount of Investments owned by a company under section 2(a)(51)(A)(iv) of the Act [15 U.S.C. 80a-2(a)(51)(A)(iv)], there may be included Investments owned by majority-owned subsidiaries of the company and Investments owned by a company ("Parent Company") of which the company is a majority-owned subsidiary, or by a majority-owned subsidiary of the company and other majority-owned subsidiaries of the Parent Company. + +- **한국어.** (3) 자회사에 의한 투자(Investments by Subsidiaries). 법 제2(a)(51)(A)(iv)조에 따라 어느 회사가 보유하는 Investments의 금액을 판정하는 목적상, 그 회사의 majority-owned 자회사가 보유하는 Investments, 그 회사가 majority-owned 자회사인 회사("모회사(Parent Company)")가 보유하는 Investments, 또는 그 회사의 majority-owned 자회사와 모회사의 다른 majority-owned 자회사가 보유하는 Investments를 포함시킬 수 있다. +- **쉽게 말하면.** 큰손($25M) 판정에서 기업집단(자회사·모회사)의 투자를 합쳐 셀 수 있다는 회계적 합산 규칙이다. **(주의) 이는 A-06의 발행자 지배관계인(control person)과 전혀 다른 개념이다** — 여기서는 매수인 법인의 *기업집단 자산 합산*일 뿐이다. (구 버전은 이를 "affiliate hook"·"(g)(2)"로 잘못 불렀다; (g)(2)는 배우자 합산, 자회사 합산은 (g)(3)이다.) +- **PASS/FAIL 반영.** 조건부(Conditional) — **QP §2(a)(51)(A)(iv) $25M 산정에서만** 적용된다. **AI (a)(9)의 $5M 테스트에는 적용되지 않는다**((a)(9)는 2a51-1(b) 정의만 차용하고 (g) 특칙은 차용하지 않음). A-08은 합산 결과가 반영된 `thresholdAmount`를 신뢰한다. +- **ERC-3643 변환.** `subsidiaryParentAggregation` (QP (iv) 한정) — off-chain 검증기관이 합산해 `thresholdAmount`로 claim에 실음(on-chain 재계산 불가, §8). + +### 3.8 Rule 501(e)(2) — purchaser 수 계산 (anti-circumvention 보조 규칙) + +- **조항**: 17 C.F.R. §230.501(e) "Calculation of number of purchasers" — (e)(2), ecfr.gov +- **핵심 원문** (17 C.F.R. §230.501(e)(2)): + + > A corporation, partnership or other entity shall be counted as one purchaser. If, however, that entity is organized for the specific purpose of acquiring the securities offered and is not an accredited investor under paragraph (a)(8) of this section, then each beneficial owner of equity securities or equity interests in the entity shall count as a separate purchaser ... + +- **한국어.** 회사·조합 기타 entity는 1인의 매수인으로 센다. 다만 그 entity가 매도되는 증권의 취득을 특정 목적으로 하여 조직되었고 본조 (a)(8)에 따른 적격투자자가 아닌 경우에는, 그 entity의 지분증권 또는 지분에 대한 각 beneficial owner를 별도의 매수인으로 센다 … +- **쉽게 말하면.** **주의 — 이 조항은 "매수인 수를 어떻게 세는가"의 규칙(§230.506(b)의 100인 한도 계산 목적)이지, "매수인이 AI인가"를 직접 정하는 조항이 아니다.** 급조 entity가 AI 직접 path로 통과하지 못하는 *실체적* 근거는 (e)(2)가 아니라 **(a)(3)·(7)·(9)·(12) 각 조항 자체의 "not formed for the specific purpose" 요건**이다(§3.5). (e)(2)는 그 위에서 "급조 entity가 (a)(8)도 아니면 구성원을 따로 센다"는 *anti-circumvention 보조*로 읽는다 — A-04(신원 중복)·D-01(보유자 수)와 연동. +- **PASS/FAIL 반영.** 보조(Supporting) — A-08의 R1 급조 처리는 (a)(3)(7)(9)(12)의 FFP 요건으로 직접 판정하고((a)(8) 재분류만 구제, §5.2 2d), (e)(2)는 그 판정을 뒷받침하는 카운팅·anti-circumvention 규칙으로만 쓴다. 직접 PASS/FAIL 근거로 인용하지 않는다. +- **ERC-3643 변환.** 직접 claim 매핑 없음. R1 급조 로직은 §5.2 2d(직접 path FAIL → (a)(8) 재분류)로 구현하고, (e)(2)는 D-01 보유자 수 카운팅·운영 검토(§11)의 근거로만 참조. + +### 3.9 ICA §2(a)(51)(A) — Qualified Purchaser (법인 clause) + +- **조항**: 15 U.S.C. §80a-2(a)(51)(A)(ii)·(iii)·(iv) — uscode.house.gov +- **핵심 원문** (15 U.S.C. §80a-2(a)(51)(A)): + + > (51)(A) "Qualified purchaser" means— + > (i) any natural person ... who owns not less than $5,000,000 in investments, as defined by the Commission; + > (ii) any company that owns not less than $5,000,000 in investments and that is owned directly or indirectly by or for 2 or more natural persons who are related as siblings or spouse (including former spouses), or direct lineal descendants by birth or adoption, spouses of such persons, the estates of such persons, or foundations, charitable organizations, or trusts established by or for the benefit of such persons; + > (iii) any trust that is not covered by clause (ii) and that was not formed for the specific purpose of acquiring the securities offered, as to which the trustee or other person authorized to make decisions with respect to the trust, and each settlor or other person who has contributed assets to the trust, is a person described in clause (i), (ii), or (iv); or + > (iv) any person, acting for its own account or the accounts of other qualified purchasers, who in the aggregate owns and invests on a discretionary basis, not less than $25,000,000 in investments. + +- **한국어.** (51)(A) "적격매수자(qualified purchaser)"란 다음을 말한다 — (i) investments를 (위원회가 정하는 바에 따라) $5,000,000 이상 보유하는 자연인 …; (ii) investments를 $5,000,000 이상 보유하고, 형제자매 또는 배우자(전 배우자 포함)의 관계에 있는 2인 이상의 자연인, 또는 출생·입양에 의한 직계비속, 그러한 자의 배우자, 그러한 자의 유산(estate), 또는 그러한 자를 위하여 또는 그 이익을 위하여 설립된 재단·자선단체·신탁에 의하여 또는 그를 위하여 직접 또는 간접으로 소유되는 회사; (iii) (ii)에 해당하지 아니하고 매도되는 증권의 취득을 특정 목적으로 하여 설립되지 아니한 신탁으로서, 그 신탁에 관하여 결정을 할 권한이 있는 수탁자 기타의 자, 그리고 그 신탁에 자산을 출연한 각 위탁자(settlor) 기타의 자가 (i)·(ii)·(iv)에 규정된 자인 신탁; 또는 (iv) 자기의 계정 또는 다른 적격매수자의 계정을 위하여 행위하고, 총계로 investments를 $25,000,000 이상 재량으로(on a discretionary basis) 소유·운용하는 자. +- **쉽게 말하면.** 회사가 QP가 되는 길은 ①가족이 모인 $5M+ 회사(ii), ②*자체 $5M 문턱은 없고*, 취득목적 설립이 아니며 결정권자(수탁자)·각 출연자(settlor)가 전부 QP인 신탁(iii), ③재량으로 $25M+ 굴리는 큰손(iv), 셋. ①은 *돈 크기 + 가족관계*, ③은 *돈 크기 + 재량운용*, ②는 오로지 *사람(수탁자·출연자)의 자격*이 관건이다(신탁 자체 자산은 묻지 않는다). **정확히 $5M을 가진 '아무 법인'이 QP인 게 아니다** — (ii) 가족회사 요건을 갖춰야 $5M로 QP가 되고, 일반 법인은 (iv) $25M이 필요하다. 참고로 (iv)의 문언은 "기관"이 아니라 *any person* 이라, 자연인·법인을 가리지 않고 $25M 재량 운용 요건만 충족하면 된다(실무상 대부분 기관). +- **PASS/FAIL 반영.** 직접(Direct) ○ — QP 법인 경로 3개 분류 + 임계값 판정. **주의: §2(a)(51) 전부 "not less than" = `≥`(inclusive)** — Rule 501(a) AI의 `>`(strict)와 정반대. **정확히 $5,000,000인 QP family company**는 (ii)(`≥`)는 *통과*하나 AI(a)(9)(`>`)는 *탈락*한다(§5.3·§7 T4). +- **ERC-3643 변환.** `claim.basis ∈ {QP_FAMILY_COMPANY(ii), QP_TRUST(iii), QP_INSTITUTIONAL(iv)}`, `thresholdBasis=INVESTMENTS`, `thresholdInclusive=true`, `thresholdAmount ∈ {5_000_000, 25_000_000}`. + +### 3.10 Rule 2a51-1(g)(1) — QIB 간주 QP (기관 매수인 주 경로) + +- **조항**: 17 C.F.R. §270.2a51-1(g)(1) — ecfr.gov +- **핵심 원문** (17 C.F.R. §270.2a51-1(g)(1)): + + > Any Prospective Qualified Purchaser who is, or who a Relying Person reasonably believes is, a qualified institutional buyer as defined in paragraph (a) of § 230.144A of this chapter, acting for its own account, the account of another qualified institutional buyer, or the account of a qualified purchaser, shall be deemed to be a qualified purchaser provided: (i) That a dealer described in paragraph (a)(1)(ii) of § 230.144A of this chapter shall own and invest on a discretionary basis at least $25 million in securities of issuers that are not affiliated persons of the dealer; and (ii) That a plan referred to in paragraph (a)(1)(i)(D) or (a)(1)(i)(E) of § 230.144A of this chapter, or a trust fund referred to in paragraph (a)(1)(i)(F) of § 230.144A of this chapter that holds the assets of such a plan, will not be deemed to be acting for its own account if investment decisions with respect to the plan are made by the beneficiaries of the plan ... + +- **한국어.** §230.144A(a)에 정의된 적격기관매수자(qualified institutional buyer)인 자, 또는 Relying Person이 그렇다고 합리적으로 믿는 자로서, 자기의 계정, 다른 적격기관매수자의 계정, 또는 적격매수자의 계정을 위하여 행위하는 자는 적격매수자로 본다. 다만 (i) §230.144A(a)(1)(ii)에 규정된 dealer는 그 dealer의 계열자(affiliated persons)가 아닌 발행자의 증권을 재량으로 $25,000,000 이상 소유·운용하여야 하고; (ii) §230.144A(a)(1)(i)(D) 또는 (a)(1)(i)(E)에 규정된 plan, 또는 그러한 plan의 자산을 보유하는 §230.144A(a)(1)(i)(F)에 규정된 신탁기금은, 그 plan에 관한 투자 결정이 plan의 수익자에 의하여 이루어지는 경우에는 자기의 계정을 위하여 행위하는 것으로 보지 아니한다 … +- **쉽게 말하면.** 기관 매수인의 실제 주 경로다 — (iv)의 $25M investments를 직접 산정하는 대신, QIB(대체로 비계열 증권 $100M 이상 보유·운용 기관)이면 **QP로 간주**될 수 있다. **주의: "QIB이면 무조건 QP"가 아니다** — QIB status + account capacity(자기·다른 QIB·QP 계정) + dealer/plan carve-out 조건을 함께 충족할 때 *deemed* 된다. A-08이 이 경로를 누락하면 정당한 기관 매수인을 (iv) 문턱에서 오차단한다. +- **PASS/FAIL 반영.** 직접(Direct) ○ — QIB 확인 시 (iv) $25M 산정을 건너뛰고 QP 통과. 조건(account capacity·carve-out)은 검증기관이 함께 확인. +- **ERC-3643 변환.** `claim.basis = QP_QIB`, `qibStatusConfirmed = true`(account capacity·dealer/plan carve-out 반영). §5.2 로직에서 investments 임계값 비교 skip. + +### 3.11 Rule 2a51-1(h) — Reasonable Belief (증명서 신뢰의 법적 토대) + +- **조항**: 17 C.F.R. §270.2a51-1(h) — ecfr.gov +- **핵심 원문** (17 C.F.R. §270.2a51-1(h)): + + > *Reasonable Belief.* The term "qualified purchaser" as used in section 3(c)(7) of the Act means any person that meets the definition of qualified purchaser in section 2(a)(51)(A) of the Act and the rules thereunder, or that a Relying Person reasonably believes meets such definition. + +- **한국어.** 합리적 믿음(Reasonable Belief). 법 제3(c)(7)조에서 사용되는 "qualified purchaser"란, 법 제2(a)(51)(A)조 및 그 하위 규칙상 적격매수자의 정의를 충족하는 자, 또는 Relying Person이 그 정의를 충족한다고 합리적으로 믿는 자를 말한다. +- **쉽게 말하면.** A-08은 패턴 B(증명서 확인형)인데, 그 *법적 근거*가 바로 이 (h)다 — off-chain 검증기관(Trusted Issuer = Relying Person)이 서명한 QP claim을 온체인이 신뢰하는 구조가 (h)에 의해 성립한다. +- **PASS/FAIL 반영.** 직접(Direct) — 패턴 B(§8)·3-Layer L2(§10)의 법적 토대(QP측). 단 (h)는 QP/§3(c)(7) 문맥 조항이므로 R3에만 적용되고, R1(AI)측 증명서 신뢰는 Rule 506(c)(2)(ii) reasonable-steps가 별도 근거(§8). +- **ERC-3643 변환.** 온체인 구현 없음 — claim 신뢰 모델(Trusted Issuer 서명 claim 수용)의 법적 정당화. + +### 3.12 ICA §2(a)(51)(C) — Excepted Investment Company (전환·fund-of-funds consent) + +- **조항**: 15 U.S.C. §80a-2(a)(51)(C) — uscode.house.gov +- **핵심 원문** (15 U.S.C. §80a-2(a)(51)(C), 진본): + + > The term "qualified purchaser" does not include a company that, but for the exceptions provided for in paragraph (1) or (7) of section 80a-3(c) of this title, would be an investment company (hereafter in this paragraph referred to as an "excepted investment company"), unless all beneficial owners of its outstanding securities (other than short-term paper), determined in accordance with section 80a-3(c)(1)(A) of this title, that acquired such securities on or before April 30, 1996 (hereafter in this paragraph referred to as "pre-amendment beneficial owners"), and all pre-amendment beneficial owners of the outstanding securities (other than short-term paper) of any excepted investment company that, directly or indirectly, owns any outstanding securities of such excepted investment company, have consented to its treatment as a qualified purchaser. + +- **한국어.** "적격매수자"에는, 법 제80a-3(c)조 (1)항 또는 (7)항의 예외가 없었다면 투자회사에 해당하였을 회사(이하 이 항에서 "excepted investment company")는 포함되지 아니한다. 다만 그 미상환 증권(단기증권 제외)의 beneficial owner로서 법 제80a-3(c)(1)(A)조에 따라 산정되고 1996년 4월 30일 당일 또는 그 이전에 그 증권을 취득한 자 전원(이하 이 항에서 "pre-amendment beneficial owners"), 그리고 그러한 excepted investment company의 미상환 증권(단기증권 제외)을 직접 또는 간접으로 보유하는 excepted investment company의 pre-amendment beneficial owner 전원이, 그 회사를 적격매수자로 취급하는 것에 동의(consent)한 경우에는 그러하지 아니하다. +- **쉽게 말하면.** 이것은 *전환·fund-of-funds 매수인*을 위한 **1996 pre-amendment consent 게이트**다 — "특정 시점 이후 취득자는 자동 QP"라는 규정이 *아니다*(구 버전에 있던 "post-1996 보유자는 QP" 문구는 조문에 없어 삭제). 신규 §3(c)(7) 펀드(BUIDL)는 첫날부터 전원 QP라 이 경로는 대개 N/A이며, *매수인이 그 자체로 excepted investment company*(fund-of-funds)이거나 전환 펀드일 때만 발동한다. +- **PASS/FAIL 반영.** 조건부(Conditional) — 매수인이 펀드·전환펀드일 때만(1996 consent 요건). 일반 자연인·법인 매수엔 온체인 영향 없음. **"구성원 전원 QP면 회사도 QP" 치유 근거는 (C)가 아니라 Rule 2a51-3(b)** (§3.14). +- **ERC-3643 변환.** 전환·fund-of-funds 한정: `preAmendmentConsentVerified = true` 확인 후 `lookThroughStatus = COMPLETED`로 claim 발급(A-09·Rule 2a51-2 사슬, §3.13). + +### 3.13 Rule 2a51-2 — Beneficial Owner 산정 (펀드·전환 매수인 look-through) + +- **조항**: 17 C.F.R. §270.2a51-2(a) — ecfr.gov +- **핵심 원문** (17 C.F.R. §270.2a51-2(a)): + + > Except as set forth in this section, for purposes of sections 2(a)(51)(C) and 3(c)(7)(B)(ii) of the Act, the beneficial owners of securities of an excepted investment company (as defined in section 2(a)(51)(C) of the Act) shall be determined in accordance with section 3(c)(1) of the Act. + +- **한국어.** 본조에 달리 정한 경우를 제외하고, 법 제2(a)(51)(C)조 및 제3(c)(7)(B)(ii)조의 목적상, excepted investment company(법 제2(a)(51)(C)조에 정의된)의 증권의 beneficial owner는 법 제3(c)(1)조에 따라 산정한다. +- **쉽게 말하면.** look-through에서 *"누구를 몇으로 세는가"* 의 방법을 정하는 규칙이다. 정확한 권위 사슬은 — **① Rule 2a51-3(a)(요건: 급조 회사면 전원 QP) → ② §3(c)(1)·Rule 3c-1(누구를 beneficial owner로 세나) → ③ Rule 2a51-2(펀드층·간접소유·전환 consent 산정)**. **주의: 2a51-2는 만능 look-through 근거가 아니다** — *매수인이 그 자체로 §3(c)(1)/§3(c)(7) 펀드*일 때 연결된다. formed-for-purpose 회사의 직접 trigger는 2a51-3, trust look-through는 §2(a)(51)(A)(iii) 자체다. +- **PASS/FAIL 반영.** 조건부(Conditional) — 펀드·전환 매수인의 beneficial owner 산정·간접소유 판정 단계에서만 발동. A-08은 라우팅만 하고 산정은 검증기관·A-09. +- **ERC-3643 변환.** off-chain beneficial owner 산정(§3(c)(1) 방식) + 간접소유 판정 → `lookThroughStatus`. 전환펀드면 1996 consent 확인 후 claim 발급. + +### 3.14 Rule 2a51-3 — 목적형성 회사 look-through ((ii)·(iv) 한정) + +- **조항**: 17 C.F.R. §270.2a51-3(a)·(b) — ecfr.gov +- **핵심 원문** (17 C.F.R. §270.2a51-3): + + > (a) For purposes of section 2(a)(51)(A) (ii) and (iv) of the Act, a company shall not be deemed to be a qualified purchaser if it was formed for the specific purpose of acquiring the securities offered by a company excluded from the definition of investment company by section 3(c)(7) of the Act unless each beneficial owner of the company's securities is a qualified purchaser. (b) For purposes of section 2(a)(51) of the Act, a company may be deemed to be a qualified purchaser if each beneficial owner of the company's securities is a qualified purchaser. + +- **한국어.** (a) 법 제2(a)(51)(A)(ii) 및 (iv)조의 목적상, 어느 회사가 법 제3(c)(7)조에 의하여 투자회사의 정의에서 제외되는 회사가 매도하는 증권의 취득을 특정 목적으로 하여 설립된 경우, 그 회사의 각 beneficial owner가 적격매수자가 아닌 한 그 회사를 적격매수자로 보지 아니한다. (b) 법 제2(a)(51)조의 목적상, 어느 회사의 각 beneficial owner가 적격매수자인 경우 그 회사를 적격매수자로 볼 수 있다. +- **쉽게 말하면.** R3 측 anti-circumvention 집행으로, R1의 Rule 501(e)(2)와 대칭이다. **적용 대상은 (ii)·(iv) 회사 두 갈래뿐** — (a) 급조 회사면 look-through 강제, (b) 비급조인데 자체 자산 부족이면 "전원 QP면 인정"이라는 구제. **신탁 (iii)의 look-through는 2a51-3이 아니라 statute §2(a)(51)(A)(iii) 자체**가 규정하며, 급조 신탁은 (iii) 자체가 탈락이라 회사가 받는 "전원 QP 치유"가 **없다**. 자연인은 "형성" 대상이 아니라 급조 판단 미적용. +- **PASS/FAIL 반영.** 직접(Direct) ○ — A-08은 이 분기를 감지해 *라우팅만* 하고(전원-QP 확인은 A-09), 결과를 결합한다. (b)의 "전원 QP" 통과는 별도 claim.basis가 아니라 하위 카테고리 + `lookThroughStatus=COMPLETED`로 표현한다. +- **ERC-3643 변환.** `if (entityType==COMPANY && claim.basis∈{QP_FAMILY_COMPANY,QP_INSTITUTIONAL} && formedForSpecificPurpose) → require lookThroughStatus==COMPLETED (A-09)`. (b) 경로도 `lookThroughStatus==COMPLETED`로 귀속. + +### 3.15 판례·발행문서 (Layer 3) + +- **SEC Release IC-22597, 62 FR 17512 (1997)** — NSMIA(1996)가 §3(c)(7)·§2(a)(51)을 신설하자 SEC가 시행을 위해 채택한 규칙 묶음(2a51-1·2·3·3c-1·5·6)의 adopting release. investments 산정·look-through를 *off-chain 기준*으로 설계한 취지의 근거. sec.gov. +- **SEC Release No. 33-10824, 85 FR 64234 (2020)** — AI 정의 확대 release. (a)(12) family office·(a)(13) family client 신설 배경. sec.gov. +- **활용 원칙.** 이 자료들은 해석 보조로만 인용하며, 직접 PASS/FAIL 규칙으로 코딩하지 않는다. + +### 3.16 Sub-요건 분해 매트릭스 + +> 각 법인 카테고리를 *원자 검증 단위*로 분해한다. 열: 임계값(기준·금액·포함성) / formed-for-purpose gate / look-through 필요 / 추가 직접요건. + +| claim.basis (조항) | 임계값 (기준·포함성) | formed-for-purpose gate | look-through(A-09) | 추가 직접요건 | +|---|---|---|---|---| +| **R1 — AI 법인** | | | | | +| AI_FINANCIAL_INSTITUTION (a)(1) | 유형별(일부 plan은 자산 `>` $5M) | — | — | 등록/인가 사실 | +| AI_PRIVATE_BUSINESS_DEVELOPMENT_COMPANY (a)(2) | — (지위형) | — | — | private BDC 지위(IAA §202(a)(22)) | +| AI_ENTITY_ASSETS_5M (a)(3) | 총자산 **`>` $5M** (excl) | **요건(조문 내재)** | 급조면 **직접 path 불가** → (a)(8) 재분류만 구제 | — | +| AI_TRUST (a)(7) | 총자산 **`>` $5M** (excl) | **요건(조문 내재)** | 급조면 **직접 path 불가** → (a)(8) 재분류만 구제 | sophisticated person 지휘 | +| AI_ALL_EQUITY_OWNERS (a)(8) | — | 없음(급조여도 가능) | **필수** | 전 지분권자 AI | +| AI_ENTITY_INVESTMENTS_5M (a)(9) | investments **`>` $5M** (excl) | **요건(조문 내재)** | 급조면 **직접 path 불가** → (a)(8) 재분류만 구제 | 2a51-1(b)(c) 자산범위·투자목적 | +| AI_FAMILY_OFFICE (a)(12) | AUM **`>` $5M** (excl) | **요건(조문 내재)** | 급조면 **직접 path 불가** → (a)(8) 재분류만 구제 | knowledgeable 지휘 | +| AI_FAMILY_CLIENT (a)(13) | — | — | (family office 경유) | (a)(12) office의 client | +| **R3 — QP 법인** | | | | | +| QP_FAMILY_COMPANY (ii) | investments **`≥` $5M** (incl) | **적용(2a51-3a)** | 급조 시 **필수(전원 QP)** | 2인+ 가족관계 | +| QP_TRUST (iii) | — | **내재(statute (iii))** | per-person → A-13 | 수탁자·출연자 전원 QP((iii) 신탁 불인정) | +| QP_INSTITUTIONAL (iv) | investments **`≥` $25M** (incl) | **적용(2a51-3a)** | 급조 시 **필수(전원 QP)** | 재량 운용 + (g)(3) 합산(선택) | +| QP_QIB (g)(1) | — (금액 산정 skip) | — | — | QIB status + account capacity + dealer/plan carve-out | + +**해설.** **R1(AI)과 R3(QP)의 급조 처리가 다르다는 점이 핵심이다.** R1의 AI 직접 자산 path((a)(3)(7)(9)(12))는 조문 자체가 "not formed for the specific purpose"를 요건으로 하므로, 급조 entity는 그 직접 path로는 **통과할 수 없고** — 오직 (a)(8)(전원 지분권자 AI)로 제출되어 A-09가 전원 AI를 확인한 경우에만 살아난다(Rule 501(e)는 purchaser 수 계산·anti-circumvention 보조일 뿐, 직접 근거 아님). 반면 R3의 (ii)(iv) 회사는 Rule 2a51-3(a)가 "각 beneficial owner가 QP면 인정"이라는 look-through 구제를 조문에 내장하므로, 급조여도 전원 QP 확인 시 통과한다. 결과적으로 A-08의 출력은 *"PASS / FAIL / A-09 위임"* 세 갈래로 수렴하되, **급조 R1 직접 path는 A-09 완료만으로 통과시키지 않는다.** + +### 3.17 ERC-3643·claim.basis 총정리 + +| 조문(§3.X) | claim.basis 코드 | thresholdBasis · 연산자 | FFP gate | look-through | +|---|---|---|---|---| +| §3.5 (a)(1) | `AI_FINANCIAL_INSTITUTION` | 유형별 | — | — | +| §3.5 (a)(2) | `AI_PRIVATE_BUSINESS_DEVELOPMENT_COMPANY` | — (지위형) | — | — | +| §3.5 (a)(3) | `AI_ENTITY_ASSETS_5M` | ASSETS · `>` | 요건(조문 내재) | 급조→직접 path 불가·(a)(8) 재분류만 | +| §3.5 (a)(7) | `AI_TRUST` | ASSETS · `>` | 요건(조문 내재) | 급조→직접 path 불가·(a)(8) 재분류만 | +| §3.5 (a)(8) | `AI_ALL_EQUITY_OWNERS` | — | 없음 | **필수** | +| §3.5·§3.6 (a)(9) | `AI_ENTITY_INVESTMENTS_5M` | INVESTMENTS · `>` | 요건(조문 내재) | 급조→직접 path 불가·(a)(8) 재분류만 | +| §3.5 (a)(12) | `AI_FAMILY_OFFICE` | AUM · `>` | 요건(조문 내재) | 급조→직접 path 불가·(a)(8) 재분류만 | +| §3.5 (a)(13) | `AI_FAMILY_CLIENT` | — | — | (office 경유) | +| §3.9 (ii) | `QP_FAMILY_COMPANY` | INVESTMENTS · `≥` | 적용(2a51-3a) | 급조 시 | +| §3.9 (iii) | `QP_TRUST` | — | 내재(statute) | per-person → A-13 | +| §3.9·§3.7 (iv) | `QP_INSTITUTIONAL` | INVESTMENTS · `≥` | 적용(2a51-3a) | 급조 시 + (g)(3) 합산 | +| §3.10 (g)(1) | `QP_QIB` | — (skip) | — | — | + +> **공통 필드.** 모든 카테고리는 `entityType`·`activeRecipes`·`lookThroughStatus`(A-09 공유)·`beneficialOwnerBasis`(§3(c)(1)/2a51-2)·만료(A-11)를 함께 싣는다. 포함성 연산자(`>` vs `≥`)는 *시스템 상수*로 카테고리에 고정한다(§5.3 결정적 권고). 폐기: `QP_ENTITY_25M`(→`QP_INSTITUTIONAL`), `QP_ALL_BENEFICIAL_OWNERS`(→ 하위 카테고리 + `lookThroughStatus=COMPLETED`). + +--- + +## §4 ② 입력 사실 (Inputs) + +> A-08은 어떤 데이터로 판정하나. entity-level 사실은 *off-chain 검증기관*(Trusted Issuer)이 확인해 매수인 ONCHAINID claim으로 실어 보낸다(패턴 B, 법적 토대 Rule 2a51-1(h)·506(c)(2)(ii)). A-08은 claim 필드만 읽고 재계산하지 않는다. + +### 4.1 본 부품이 판정하려면 어떤 증거가 필요한가 + +법인 매수인 1건을 판정하려면 — ① 그 법인의 **유형**(회사/신탁/조합/LLC/펀드), ② 어느 **자격 카테고리**로 통과를 주장하는지(claim.basis), ③ 그 카테고리의 **임계값 충족 여부**(검증기관이 2a51-1 적용 후 산출한 금액), ④ **급조(취득목적 설립) 여부**, ⑤ look-through가 필요하면 **구성원 명세**와 그 확인 상태, ⑥ 카테고리별 **추가 사실**(가족관계·재량운용·QIB 지위·sophisticated/knowledgeable 지휘)이 있어야 한다. 이 여섯 묶음이 아래 claim 필드로 들어온다. + +### 4.2 DEX가 읽는 claim 필드 + +| 필드 | 타입 | 의미 | 출처 | +|---|---|---|---| +| `entityType` | enum | NATURAL / CORPORATION / TRUST / PARTNERSHIP / LLC / FUND_3C1 / FUND_3C7 ... | 검증기관 | +| `claim.basis` | enum | §3.16·§3.17 카테고리 코드 | 검증기관 | +| `activeRecipes` | bitset | 이 거래에서 실제 켜진 Recipe (R1 / R3 / 양쪽) — 거래 맥락 계산(§5.4) | Manifest + 거래 컨텍스트 | +| `thresholdBasis` | enum | ASSETS / INVESTMENTS / AUM | claim.basis 종속 | +| `thresholdAmount` | uint | 검증기관 계산값(2a51-1(b)(c)(d)(e)(f)·(g)(3) 적용 후) | 검증기관 | +| `thresholdInclusive` | bool | `≥`(QP) / `>`(AI) | claim.basis 종속(시스템 상수) | +| `investmentPurposeConfirmed` | bool | investments가 Rule 2a51-1(c) 투자목적 기준 충족 (부동산·commodity 포함 시) | 검증기관 | +| `personalUseOrBusinessUseExcluded` | bool | 개인용도·사업장·영업용 부동산 등 제외 확인 (2a51-1(c)) | 검증기관 | +| `formedForSpecificPurpose` | bool | 취득 목적 설립 여부 | 검증기관 | +| `qibStatusConfirmed` | bool | QIB 지위 + account capacity + dealer/plan carve-out (QP_QIB) | 검증기관 | +| `equityOwners[]` / `beneficialOwners[]` | ref[] | look-through 대상 구성원 핸들 | 검증기관 → A-09 | +| `beneficialOwnerBasis` | enum | 구성원 산정 방식: §3(c)(1)/3c-1 (일반) / Rule 2a51-2 (펀드·간접) | 검증기관 | +| `lookThroughStatus` | enum | COMPLETED / PENDING / FAILED | **A-09 공유 hook** | +| `familyRelationshipConfirmed` | bool | (ii) 2인+ 가족관계 | 검증기관 | +| `sophisticatedPersonConfirmed` | bool | (a)(7) 신탁 지휘자 | 검증기관 | +| `knowledgeablePersonConfirmed` | bool | (a)(12) family office 지휘자 | 검증기관 | +| `discretionaryBasis` | bool | (iv) 재량 운용 | 검증기관 | +| `preAmendmentConsentVerified` | bool | (C) 전환·fund-of-funds 1996 consent | 검증기관(조건부) | + +### 4.3 수집 경로 (5단계 흐름) + +1. **Frontend 자기신고** — 법인 매수인이 유형·주장 카테고리를 선택(경로 안내용, 증거 아님). +2. **증거 패키지 제출** — 감사 재무제표·계좌명세·설립문서·지분원장·신탁증서·QIB 증빙 등. +3. **Trusted Issuer 실사** — 2a51-1(b)(c)(d)(e)(f)·(g)(3) 적용해 `thresholdAmount` 산출, 급조 여부·가족관계·재량·QIB 확인, 필요 시 구성원 명세 구성. +4. **claim 발급** — 서명된 claim을 매수인 ONCHAINID에 발급(§3.11 reasonable belief). +5. **온체인 A-08** — claim 필드만 읽어 §5 로직으로 PASS/FAIL/DELEGATE 판정. + +### 4.4 갈래별 증거 예시 + +- **직접 자산형**(a3·a7·a9·ii·iv): 감사 재무제표/계좌 명세 → 검증기관이 2a51-1 적용해 `thresholdAmount` 산출. *DEX는 숫자만 비교*. +- **간주형**(QP_QIB): Rule 144A QIB 증빙(증권 보유 규모)·계정 성격·dealer/plan 여부 → `qibStatusConfirmed`. *금액 비교 skip*. +- **look-through형**(a8·iii·2a51-3b·급조 ii/iv): 지분 원장 → `equityOwners[]`/`beneficialOwners[]` + `beneficialOwnerBasis` 채워 A-09 호출. +- **사실 직위형**(a1·a12·a13): 등록·인가·family office 지정 → boolean claim. +- **formed-for-purpose**: 설립일·설립목적 진술 → 검증기관 boolean(§12 OD-2: DEX 2차거래 재확인 한계). + +--- + +## §5 ③ 판정 로직 (Decision Logic) + +> entity 매수인 1건이 A-08을 통과하는 전체 흐름. 출력은 `PASS` / `FAIL(reasonCode)` / `DELEGATE→A-09` 세 갈래. **핵심 순서: (0) 자연인이면 dormant → (1) 이 거래의 실제 활성 Recipe 계산 → (2) Recipe별 카테고리 판정(QIB skip·임계값 포함성·급조 look-through) → (3) 결합(둘 다 켜졌으면 AND).** + +### 5.1 전체 흐름 (사람 말로) + +매수인이 자연인이면 A-08은 쉰다(A-03/A-13가 직접 판정). 법인이면 먼저 **이 거래에서 실제로 어떤 게이트가 켜지는지**를 거래 맥락으로 정한다 — 발행(506(c))·§4(a)(7) resale이면 AI 게이트, §3(c)(7) 취득이면 QP 게이트, 둘 다면 둘 다. *토큰이 과거에 506(c)로 발행됐다는 사실만으로 AI 게이트를 자동으로 켜지 않는다*(§5.4). 그다음 켜진 게이트마다 그 법인을 카테고리에 넣고, QIB면 금액 산정을 건너뛰고, 자산형이면 포함성(AI `>` / QP `≥`)에 맞춰 임계값을 비교하고, 급조 회사면 A-09에 구성원 확인을 넘긴다. 마지막에 켜진 게이트 결과를 결합한다 — 둘 다 켜졌으면 **둘 다 통과해야**(AND) PASS다. + +### 5.2 Pseudocode + 단계별 해설 + +``` +function A08_check(claim, ctx) -> (verdict, reasonCode): + # 0. 활성 조건 — 자연인이면 dormant + if claim.entityType == NATURAL: + return PASS_DORMANT # A-03/A-13가 직접 판정 + + # 1. 이 거래의 '실제' 활성 Recipe 집합 (거래 맥락 계산 — §5.4) + active = ctx.activeRecipesForThisTransaction() + # R1 in active <=> primary issuance | 이 거래 자체가 506(c) offering | §4(a)(7) resale + # R3 in active <=> §3(c)(7) fund interest 취득 + # NOTE: 토큰의 과거 발행 프레임워크로 R1을 자동 소환하지 않는다. + # Rule 144 secondary transfer of a §3(c)(7) token -> 기본 R3(QP)만. + if active is empty: + return PASS_DORMANT # A-08이 볼 게이트 없음 + + results = [] + for recipe in active: # R1·R3 각각 독립 판정 후 결합 + cat = claim.basis_for(recipe) # R1->AI 법인 카테고리 / R3->QP 법인 카테고리 + if cat not in allowedCategories(recipe): + return FAIL(ENTITY_CATEGORY_MISMATCH) + + # 2a. 간주형 — QIB deemed QP (금액 산정 skip). R3(QP)에서만. + if cat == QP_QIB: + if not claim.qibStatusConfirmed: # QIB + account capacity + dealer/plan carve-out + return FAIL(ENTITY_QIB_UNCONFIRMED) + results.append(PASS); continue + + # 2b. look-through형 — 구성원 자격으로만 성립 + if cat == QP_TRUST: # §2(a)(51)(A)(iii) — statute look-through + # (iii)는 "not formed for the specific purpose"가 statute 요건 → 급조면 치유 없이 FAIL. + # (Rule 2a51-3의 "전원 QP 치유"는 (ii)(iv) 회사 대상이지 (iii) 신탁에는 적용되지 않음.) + if claim.formedForSpecificPurpose: + return FAIL(ENTITY_FORMED_FOR_PURPOSE) # QP_TRUST 급조 = 통과 불가(look-through로 치유 안 됨) + if claim.lookThroughStatus != COMPLETED: + return DELEGATE_A09 # 수탁자·각 출연자 전원 QP 확인(A-09) + results.append(PASS); continue + if cat == AI_ALL_EQUITY_OWNERS: # (a)(8) — "not formed for..." 요건 없음(급조 rescue 경로) + if claim.lookThroughStatus != COMPLETED: + return DELEGATE_A09 # 전 지분권자 AI 확인(A-09, beneficialOwnerBasis 전달) + results.append(PASS); continue + + # 2c. 직접 자산형 — 임계값 비교 (포함성 분기!) + if cat.hasThreshold: + ok = claim.thresholdInclusive + ? (claim.thresholdAmount >= cat.amount) # QP: >= (not less than) + : (claim.thresholdAmount > cat.amount) # AI: > (in excess of, strict) + if not ok: + return FAIL(ENTITY_THRESHOLD_NOT_MET) + + # 2d. formed-for-purpose (anti-circumvention) — R1과 R3의 처리가 다르다. + if claim.formedForSpecificPurpose: + if recipe == R1: + # (a)(3)(7)(9)(12) 직접 path는 조문 자체가 "not formed for the specific + # purpose"를 요건으로 한다 → 급조 entity는 이 직접 path로는 통과 불가. + # 유일한 구제: (a)(8) AI_ALL_EQUITY_OWNERS로 제출되어 A-09가 전원 AI 확인. + # (Rule 501(e)(2)는 purchaser 수 계산·anti-circumvention 보조일 뿐, 직접 근거 아님.) + if cat != AI_ALL_EQUITY_OWNERS: + return FAIL(ENTITY_FORMED_FOR_PURPOSE) # 직접 자산 path 불가 → (a)(8) 재분류 필요 + # cat == AI_ALL_EQUITY_OWNERS 이면 위 2b에서 이미 lookThroughStatus 확인됨 + elif recipe == R3: + # Rule 2a51-3(a): (ii)(iv) 급조 회사는 각 beneficial owner가 QP여야(look-through 구제 내장) + if cat in {QP_FAMILY_COMPANY, QP_INSTITUTIONAL} and claim.lookThroughStatus != COMPLETED: + return DELEGATE_A09 + + # 2e. 카테고리 추가 직접요건 + if cat == AI_TRUST and not claim.sophisticatedPersonConfirmed: return FAIL(ENTITY_DIRECT_REQ_MISSING) + if cat == AI_FAMILY_OFFICE and not claim.knowledgeablePersonConfirmed: return FAIL(ENTITY_DIRECT_REQ_MISSING) + if cat == QP_FAMILY_COMPANY and not claim.familyRelationshipConfirmed: return FAIL(ENTITY_DIRECT_REQ_MISSING) + if cat == QP_INSTITUTIONAL and not claim.discretionaryBasis: return FAIL(ENTITY_DIRECT_REQ_MISSING) + + results.append(PASS) + + # 3. 결합 — 켜진 게이트가 둘이면 AND (둘 다 PASS여야) + return all(results == PASS) ? PASS : FAIL(ENTITY_AND_GATE_FAIL) +``` + +**단계 해설.** (0) 자연인 배제. (1) *거래 맥락*에서 활성 Recipe 계산 — 이 한 줄이 A-08 설계의 핵심이다(§5.4). (2a) QIB는 금액 없이 통과(조건 충족 시). (2b) look-through형은 A-09 위임 — 단 **QP_TRUST(iii)는 급조(formed-for-purpose)면 look-through로 치유되지 않고 즉시 FAIL**(2a51-3의 "전원 QP 치유"는 (ii)(iv) 회사 전용, (iii) 미적용); (a)(8)은 "not formed for..." 요건이 없어 급조여도 전원 AI면 통과. (2c) 포함성 분기 — 단일 `>=`로 처리하면 AI 경계가 틀린다. **(2d) 급조(formed-for-purpose) 처리는 R1과 R3가 다르다** — R1의 AI 직접 자산 path((a)(3)(7)(9)(12))는 조문 자체가 "not formed for the specific purpose"를 요건으로 하므로 급조면 그 직접 path로는 **통과 불가(FAIL)** 이고, 오직 (a)(8) 전원-AI entity로 재분류되어 A-09가 전원 AI를 확인한 경우에만 살아난다; 반면 R3의 (ii)(iv) 회사는 Rule 2a51-3(a)가 "각 beneficial owner가 QP면 인정"이라는 look-through 구제를 조문에 내장하므로 급조여도 전원 QP 확인 시 통과한다. (2e) 카테고리별 추가 사실. (3) 둘 다 켜졌으면 AND. + +### 5.3 Threshold 매트릭스 (포함성 명시 — 경계 사양의 핵심) + +| 카테고리 | 기준 | 금액 | 비교 | 정확히 경계값일 때 | +|---|---|---|---|---| +| AI (a)(3)·(7)·(9) | 자산/investments | $5,000,000 | **`>` (strict)** | $5,000,000 → **FAIL** | +| AI (a)(12) | AUM | $5,000,000 | **`>` (strict)** | $5,000,000 → **FAIL** | +| QP (ii) family company | investments | $5,000,000 | **`≥` (inclusive)** | $5,000,000 → **PASS** | +| QP (iv) institutional | investments | $25,000,000 | **`≥` (inclusive)** | $25,000,000 → **PASS** | +| QP_QIB (g)(1) | — | — | 금액 비교 없음 | (조건 충족 시 PASS) | + +> **결정적 권고.** 개발팀은 임계값 상수를 *카테고리에 비교연산자까지 묶어* 정의할 것(`{amount, op}`). 단일 `>=`로 일괄 처리하면 AI 경계가 1센트 단위로 틀린다 — 정당 거래 오통과/오차단의 직접 원인. + +### 5.4 Recipe 활성화 매트릭스 (거래 맥락 — 핵심 설계) + +**원칙.** R1(buyer-AI)·R3(buyer-QP)가 각각 *이 거래에서 실제로 요구되는지*를 거래 성격으로 판단한다. Rule 506(c)는 *그 offering*의 요건이지 토큰의 영구 속성이 아니므로, 과거 506(c)로 발행됐다는 사실만으로 이후 모든 이전에 buyer-AI를 자동 재부과하지 않는다. + +| 거래 상황 | 필요한 buyer gate | R1(A-03/AI) | R3(QP) | +|---|---|---|---| +| Rule 506(c) primary issuance | AI | 활성 | (해당 없음) | +| §3(c)(7) fund interest 취득(발행) | QP | — | 활성 | +| Rule 506(c) + §3(c)(7) primary offering | AI + QP | 활성 | 활성 (AND) | +| §4(a)(7) resale path | buyer AI | 활성 | (경로 종속) | +| Rule 144 resale path | seller Rule 144 요건이 핵심(buyer AI 아님) | 비활성 | (§3(c)(7) 토큰이면 활성) | +| §3(c)(7) fund token secondary transfer (BUIDL-like) | 기본 buyer QP | 비활성(별도 AI-요구 path 선택 시에만 활성) | 활성 | + +**귀결.** `activeRecipes`는 위 표대로 *거래 컨텍스트*에서 계산한다. R1·R3가 **둘 다 실제 활성**인 거래에서만 AND가 성립하며, 그 경우에만 정확히 $5M QP family company가 AI(a)(9) `>` 미달로 전체 FAIL이 된다(§7 T4). Rule 144로 §3(c)(7) 토큰을 2차 이전할 때는 buyer QP만 보고 buyer-AI를 자동으로 켜지 않는다. + +### 5.5 취득 시점 (when) + +- **R1(AI)** — Rule 501(a) chapeau: 자격은 *"at the time of the sale of the securities to that person"* 기준. +- **R3(QP)** — §3(c)(7)(A): 보유자가 *"at the time of acquisition"* QP일 것. + +두 기준 모두 *판매/취득 순간*의 스냅샷이며 신용 만료가 아니다(A-11 freshness 철학과 동일). **단, DEX에서 어느 on-chain 이벤트가 법적 "sale/acquisition"인지가 미결**(§12 OD-1, A-11 §5.4 acquisition registry와 동일 쟁점). + +### 5.6 비결정성 → 결정성 + +- **포함성 분기**(§5.3): 시스템 상수로 고정 → 결정적. +- **"formed for the specific purpose"**: 본질상 *주관적 의도* 판단 → A-08은 직접 판정하지 않고 검증기관 boolean 신뢰(패턴 B). DEX 2차거래에서 재확인 불가 → spot-check 정책 필요(§12 OD-2). +- **investments 산정**(2a51-1): off-chain 계산 위임 → `thresholdAmount` 단일 값으로 결정화. +- **QIB 지위**: Rule 144A 요건 충족을 검증기관이 확인 → `qibStatusConfirmed` boolean으로 결정화. + +--- + +## §6 ④ 거절·예외 처리 (Failure Handling) + +### 6.1 전체 흐름 (사람 말로) + +A-08은 거절할 때 *사유 카테고리*만 매수인에게 보이고, *필드 단위 진단*은 운영 로그에만 남긴다. look-through가 진행 중(PENDING)이면 거절이 아니라 *대기*로 처리해 A-09 완료 후 재판정한다. 급조 회사이면서 구성원 수가 임계(D-01 cap 근접)면 자동 결과와 별개로 운영 검토 큐에 적재한다. + +### 6.2 Failure codes + +| Failure code | 발생 조건 | 매수인 대면 메시지 | 내부(운영) 메시지 | +|---|---|---|---| +| `ENTITY_CATEGORY_MISMATCH` | claim.basis가 활성 Recipe 카테고리 집합 밖 | "선택하신 법인 자격 유형이 이 거래에 적용되지 않습니다." | basis=X, activeRecipes=Y 불일치 | +| `ENTITY_THRESHOLD_NOT_MET` | 자산/investments 임계값 미달(포함성 적용 후) | "법인 자격 요건(자산/투자 규모)이 확인되지 않았습니다." | amount=A vs req B op `>`/`≥` | +| `ENTITY_QIB_UNCONFIRMED` | QP_QIB인데 QIB 지위·account·carve-out 미확인 | "기관투자자(QIB) 자격이 확인되지 않았습니다." | qibStatusConfirmed=false | +| `ENTITY_FORMED_FOR_PURPOSE` | **R1**: 급조 entity가 AI 직접 자산 path((a)(3)(7)(9)(12))로 제출 → 직접 path 불가. **R3**: QP_TRUST(iii)가 취득목적 설립 → 통과 불가 — §2(a)(51)(A)(iii)의 "not formed for the specific purpose" 요건이며, Rule 2a51-3의 "전원 QP 치유"는 (ii)(iv) 회사만 대상이라 (iii) 신탁은 look-through로 치유되지 않음 | "급조(취득목적 설립) 법인·신탁은 이 자격 유형으로 통과할 수 없습니다. (적격투자자 측은 전원-AI 구성((a)(8)) 확인이 필요합니다.)" | R1: FFP=true·cat≠(a)(8) → (a)(8) 재분류 안내 / R3: QP_TRUST·FFP=true → 통과 불가(치유 없음) | +| `ENTITY_LOOKTHROUGH_REQUIRED` | look-through형((a)(8)·(iii)·급조 (ii)(iv))인데 status=PENDING | "구성원 자격 확인이 진행 중입니다." | A-09 위임(재호출) | +| `ENTITY_LOOKTHROUGH_FAILED` | A-09가 비자격 구성원 발견 | "구성원 중 자격 요건 미충족이 있습니다." | A-09 FAILED + 비자격 노드 | +| `ENTITY_DIRECT_REQ_MISSING` | sophisticated/knowledgeable/가족/재량 미확인 | "법인 유형별 추가 요건이 확인되지 않았습니다." | 누락 필드 ID | +| `ENTITY_AND_GATE_FAIL` | R1·R3 동시 활성인데 한쪽 탈락 | "이 거래의 두 자격 요건 중 하나가 미충족입니다." | 탈락 Recipe·원인 code | + +### 6.3 Manual Review Path (REVIEW_ENTITY_UNCERTAIN) + +경계 판단(급조 여부 모호, QIB carve-out 해석, (a)(12) knowledge 기준)이면 자동 FAIL 대신 `REVIEW_ENTITY_UNCERTAIN` 반환 → 거래 suspend(거절 아닌 대기) → Trust Operations 큐 → 추가 증거·경계 법적 판단·(필요 시) 변호사 escalate → 결정 + (통과 시) 새 claim / (탈락 시) 명시적 FAIL code. 모든 결정·근거를 Compliance Log에 기록. + +### 6.4 Error message — 매수인 노출용 vs 내부 기록용 분리 + +**거절 메시지 분리 원칙** — 매수인에겐 사유 카테고리만(무엇이 부족한지 힌트), 운영엔 필드 단위 진단(어느 claim 필드가 왜 실패했는지). 이는 정보 노출 최소화(우회 시도 차단)와 audit trail 확보를 동시에 만족한다. + +--- + +## §7 ⑤ 테스트 케이스 (Pass / Fail / Boundary / Cascade / QIB / Secondary) + +| # | 시나리오 | 입력 요지 | 기대 출력 | +|---|---|---|---| +| T1 (Pass·직접) | R3, 가족회사 investments $10M, 비급조 | basis=QP_FAMILY_COMPANY, amt=10M, family=true, FFP=false | **PASS** (≥) | +| T2 (Pass·QP inst) | R3, $25M 재량 운용 법인 | basis=QP_INSTITUTIONAL, amt=25M, discretionary=true | **PASS** (≥) | +| T3 (Fail·임계) | R1, 법인 investments $4.9M | basis=AI_ENTITY_INVESTMENTS_5M, amt=4.9M | **FAIL** ENTITY_THRESHOLD_NOT_MET | +| **T4 (Boundary·조건부)** | **정확히 $5,000,000 QP family company** | amt=5,000,000, family=true | 아래 상세 | +| T5 (QIB) | R3, QIB 기관(자기계정, carve-out 충족) | basis=QP_QIB, qibStatusConfirmed=true | **PASS** (금액 산정 skip) | +| T6 (Cascade·급조) | R3, 가족회사가 취득목적 설립 | basis=QP_FAMILY_COMPANY, FFP=true, lookThrough=PENDING | **DELEGATE→A-09** (2a51-3a) | +| T7 (Cascade·전원 AI) | R1, 전 지분권자 AI 주장 | basis=AI_ALL_EQUITY_OWNERS, lookThrough=PENDING | **DELEGATE→A-09** (a8) | +| T8 (Fail·look-through) | A-09가 비AI 자연인 발견 | lookThrough=FAILED | **FAIL** ENTITY_LOOKTHROUGH_FAILED | +| T9 (Secondary·R1 미소환) | 과거 506(c) 발행 §3(c)(7) 토큰의 Rule 144 2차 이전, 매수인 QP family co $5M | active={R3}, basis=QP_FAMILY_COMPANY, amt=5M | **PASS** (buyer QP만; buyer-AI 자동 재부과 안 함) | +| **T10 (FFP·R1 직접 path 불가)** | R1, 총자산 $8M이나 이 거래 취득목적으로 설립된 LLC를 (a)(3)로 제출 | active={R1}, basis=AI_ENTITY_ASSETS_5M, amt=8M, FFP=true | **FAIL** ENTITY_FORMED_FOR_PURPOSE — 자산 충분해도 직접 path 불가, (a)(8) 재분류 필요 | +| T11 (FFP·(a)(8) 구제) | 위 LLC를 (a)(8)로 재제출, 전 지분권자 AI | active={R1}, basis=AI_ALL_EQUITY_OWNERS, FFP=true, lookThrough=COMPLETED | **PASS** — 급조여도 (a)(8) + A-09 전원 AI 확인 | +| T12 (a2 PBDC) | R1, private business development company | active={R1}, basis=AI_PRIVATE_BUSINESS_DEVELOPMENT_COMPANY | **PASS** (지위형, 임계값·급조 게이트 없음) | + +**T4 상세 — 정확히 $5M QP Family Company (핵심 경계, 조건부).** *주의: 정확히 $5M을 가진 '아무 법인'이 아니라 §2(a)(51)(A)(ii) 가족회사여야 이 케이스에 해당한다*(일반 법인은 (iv) $25M 필요). + +- **R3만 실제 활성**(예: §3(c)(7) 취득·Rule 144 2차): (ii) "not less than $5,000,000"(`≥`) 충족 → **PASS**. +- **R1·R3 둘 다 실제 활성**(예: Rule 506(c) + §3(c)(7) primary offering, 또는 §4(a)(7) resale로 buyer-AI가 켜진 거래): QP (ii) `≥`는 PASS이나 AI (a)(9) "in excess of $5,000,000"(`>`)는 정확히 $5M에서 **FAIL** → AND이므로 **전체 FAIL**(ENTITY_AND_GATE_FAIL). +- **핵심.** 이 FAIL은 *R1이 실제로 켜진 거래*로 한정된다. 과거 506(c) 발행 이력만으로 Rule 144 2차 이전에 AI를 자동 재부과해 전체 FAIL을 내면 안 된다(§5.4). 이 두 케이스(R3-only PASS / R1+R3 전체 FAIL)를 모두 회귀 테스트에 고정한다. + +> **왜 T4가 핵심인가.** §2(a)(51) "not less than"(`≥`)과 Rule 501(a) "in excess of"(`>`)의 경계 충돌이 *정확히 $5M*에서 드러난다. 정답은 "거래 맥락에 따라 다르다" — 무조건 전체 FAIL(과잉 차단)도, 무조건 PASS(과소 차단)도 오류다. A-13 §9.3·§9.4 reconciliation과 정합한다. + +--- + +## §8 (α) 증명서 확인형 패턴 (Pattern B) + +A-08은 **패턴 B(증명서 확인형)** 다 — entity-level 사실(자산 규모·설립목적·가족관계·재량 운용·QIB 지위)은 *체인이 직접 계산할 수 없고*, off-chain 검증기관이 2a51-1 등을 적용해 산출한 결과를 *claim으로 신뢰*한다. A-08이 체인에서 보는 것은 *claim의 존재·서명 유효성·만료(A-11)·basis 정합성·임계값 비교·lookThroughStatus·qibStatusConfirmed* 에 한정된다. + +### 8.1 검증 3패턴 중 A-08의 자리 + +| 패턴 | 설명 | A-08 | +|---|---|---| +| A. 온체인 자체판정 | 체인 데이터만으로 결정(예: 보유자 수 카운트) | 아님 | +| **B. 증명서 확인형** | off-chain 사실을 검증기관이 확인해 서명 claim으로 실음 → 체인은 claim을 신뢰 | **해당** | +| C. 운영 개입형 | 사람이 직접 판단·개입 | 부분(§6.3 REVIEW·§11) | + +### 8.2 왜 A-08이 패턴 B인가 + +법인의 자산 규모·투자자산 산정(2a51-1 적용)·설립 목적·가족관계·재량 운용·QIB 지위는 *체인 밖의 사실*이라 온체인 재계산이 불가능하다. 따라서 검증기관(Trusted Issuer)이 실사해 서명한 claim을 신뢰하고, 체인은 형식 판정(§5)만 한다. + +### 8.3 법적 토대 — 왜 claim 신뢰가 정당한가 (두 축) + +- **QP측(R3) — Rule 2a51-1(h) reasonable belief.** §3(c)(7)상 QP에는 Relying Person(펀드·그 대리인=Trusted Issuer)이 정의 충족을 *합리적으로 믿는* 자도 포함된다(§3.11). 즉 검증기관이 실사 후 서명한 QP claim을 신뢰하는 구조가 (h)에 의해 법적으로 성립한다. +- **AI측(R1) — Rule 506(c)(2)(ii) reasonable steps.** 506(c)는 발행자가 매수인의 AI 지위를 *합리적으로 검증*할 것을 요구한다(§3.2). 검증기관의 실사·claim 발급이 이 reasonable steps의 구현이다. +- **귀결.** 두 축 모두 "합리적 확인"을 법적 기준으로 두므로, A-08의 claim-신뢰 모델(L2 Trusted Issuer)은 두 Recipe 모두에서 정당화된다. 책임 분배는 §10. + +--- + +## §9 (β) Cross-Element·Cross-Recipe 조율 + +### 9.1 책임 경계 (A-08이 하는 것 / 넘기는 것) + +A-08은 *법인 매수인의 entity-level 형식 판정*(분류·임계값·급조·라우팅·결합)만 한다. **넘기는 것** — 구성원 재귀 추적은 A-09, 자연인 종착 판정은 A-03/A-13, 발행자 지배관계인은 A-06, investments 산정의 진위는 L2 검증기관, 보유자 수·분리카운트는 D-01, 신원 중복은 A-04, claim 만료는 A-11, manifest 정합은 B-01. + +### 9.2 Element Cascade Map + +``` + ┌─────────── A-03 (AI 카테고리 정의) ─── 기준 제공 + [법인 매수인] ──▶ A-08 ┤ + ├─────────── A-13 (QP 카테고리 정의) ─── 기준 제공 + │ + ├── (look-through 필요) ──▶ A-09 (재귀 지분 추적) + │ └─ 자연인 종착 ──▶ A-03/A-13 per-person + │ └─ (발행자 지배관계인 발견) ──▶ A-06 (내부자/affiliate, 별개 축) + ├── (formed-for-purpose) ──▶ A-04 (신원 중복) · D-01 (분리 카운트 보유자 수) + └── (모든 경로) ──▶ A-11 (claim 만료) · B-01 (manifest 정합) +``` + +**상호 재귀 종료.** A-08→A-09→(자연인)→A-03/A-13. A-09는 entity 구성원을 만나면 다시 A-08을 호출할 수 있어 *상호 재귀*가 되며, **반드시 자연인에서 종료**해야 한다(A-09 depth-3 cap + cycle 검출). **주의:** look-through 중 발견되는 *발행자 affiliate/control person*은 A-08이 아니라 **A-06** 소관이다(별개 축). (g)(3) 자회사 합산은 이 affiliate 축과 무관한 매수인 기업집단 자산 합산이다(§3.7). + +### 9.3 Recipe Orchestration (거래 맥락 활성) + +A-08은 R1·R3 각각에 **조건부**로 붙는다 — 매수인이 법인이고 그 Recipe가 *이 거래에서 실제 활성*일 때만. 활성 판단은 §5.4 표대로 거래 컨텍스트(발행/resale path/2차 이전)에서 계산하며, 토큰의 과거 발행 프레임워크로 R1을 자동 소환하지 않는다. R1·R3가 둘 다 실제 활성이면 A-08 내부에서 AI·QP를 분리 평가 후 AND로 결합한다(§5.2 루프). + +### 9.4 Conflict Resolution — R1 AI-entity vs R3 QP-entity + +R1·R3가 **둘 다 실제 활성**이면 법인은 AI 법인 카테고리와 QP 법인 카테고리를 **둘 다** 통과해야 한다(AND). 두 체계의 임계값 포함성(`>` vs `≥`)·formed-for-purpose 처리 방식(**R1은 Rule 501(a)(3)·(7)·(9)·(12)의 직접 "not formed for the specific purpose" 요건 + Rule 501(e) 보조**(카운팅·anti-circumvention), **R3는 Rule 2a51-3(a) 및 §2(a)(51)(A)(iii)** — (ii)(iv) 회사는 2a51-3 look-through 구제, (iii) 신탁은 statute 요건이라 급조 시 치유 없음)·look-through 트리거가 달라, A-08은 Recipe별 분리 평가 후 AND 합성한다. 충돌 해소 원칙: *실제 활성 게이트만 결합*하고, 활성 게이트 중 더 엄격한 것이 지배한다(예: 둘 다 켜진 $5M에서 AI `>`가 QP `≥`를 흡수해 전체 FAIL). 이 원칙은 **A-13 §9.3(Recipe orchestration)·§9.4(Conflict resolution rule)** 와 일치한다 — A-13 §9.4 경우 1("R1+R3 동시 활성이면 둘 다 통과해야 허용")의 *"동시 활성"* 전제를 A-08이 거래 맥락으로 구체화한 것이다. + +### 9.5 Manifest 무결성 (B-01) + +`activeRecipes`·`claim.basis`·`thresholdInclusive` 등 A-08 입력의 정합성은 B-01(manifest)이 보증한다 — 예: R1이 활성인데 AI 카테고리 상수 테이블이 비어 있거나, 포함성 연산자가 카테고리와 어긋나면 manifest 단계에서 잡는다. A-08은 정합한 manifest를 전제로 판정한다. + +### 9.6 [해설] R1+R3 공존과 §201(b)(2), 그리고 2차 거래 미결 + +R1(506(c) 일반청약)과 R3(§3(c)(7) 공모 금지)가 한 토큰에 공존하는 것은 표면상 모순이지만, **JOBS Act §201(b)(2)** 가 "506(c) 일반청약은 public offering이 아니다"라고 정해 *발행 단계*에서 둘을 양립시킨다(§3.4). **단 §201(b)(2)는 발행(offer·sale)에 관한 것이고 2차 거래는 그 문언 밖이다.** DEX의 상시 양방향 호가·상장이 별도의 "distribution/공모"를 구성하는지는 미결이며(§12 OD-1, A-13 §12 OD-1과 동일 쟁점), 이는 A-08의 activeRecipes 계산(§5.4)에서 "2차 이전 시 어떤 게이트가 켜지는가"와 직접 연결된다. + +--- + +## §10 (γ) 3-Layer Solution (책임 분배) + +| Layer | 주체 | 역할 | A-08 적용 | +|---|---|---|---| +| L1 Self-Attest | 법인 매수인 | 유형·자산·설립목적·구성원·QIB 지위 자기 진술 | claim 1차 입력(증거 아님) | +| L2 Trusted Issuer | 검증기관 | 2a51-1 계산·formed-for-purpose 확인·가족/재량/QIB 검증 후 ONCHAINID claim 발급 | **A-08이 신뢰하는 단일 진실원**(법적 토대 §8.3) | +| L3 Spot-Check | 운영층(Operator) | 표본 재검·red flag(A-12) 적용·(g)(3) 합산 근거 심사·경계 escalate | §6.3 REVIEW · §11 운영 큐 | + +**책임 경계.** entity-level 사실의 *진위*는 L2가, *형식 판정*은 A-08(체인)이, *예외·표본·경계*는 L3가 진다. A-08은 L2 claim의 *내용*을 재계산하지 않는다(패턴 B 원칙). L2의 실사 충분성(어떤 서류로 급조 여부·(g)(3) 합산·QIB를 확인하는가)은 검증기관 **발급 기준서**가 정의한다(§12 OD-3). + +**Escalation.** L1 자기진술만으로는 통과 불가 → 반드시 L2 claim 필요. L2가 판단 곤란(경계 사안)이면 L3로 escalate → 필요 시 변호사 검토 → 결정·근거 로깅. + +--- + +## §11 (δ) Frontend·Off-chain Operator Layer + +### 11.1 왜 별도 레이어가 필요한가 + +entity-level 사실은 체인 밖에 있고(패턴 B), 자격 판정에는 사람의 실사·경계 판단이 개입한다. 따라서 온체인 A-08(형식 판정) 위에 Frontend(수집·안내)와 Operator(실사·예외)가 필요하다. + +### 11.2 Frontend — 법인 매수인 자기신고·안내 + +법인 매수인이 유형을 선택하고 주장 카테고리를 고르면, Frontend가 필요한 증거 목록과 검증기관 연결을 안내한다. 거절 시 §6.4의 *매수인 대면 메시지*만 노출하고 필드 진단은 감춘다. + +### 11.3 Off-chain Operator — Trusted Issuer 실사 + +검증기관이 증거를 받아 2a51-1(b)(c)(d)(e)(f)·(g)(3)를 적용해 `thresholdAmount`를 산출하고, 급조 여부·가족관계·재량·QIB 지위를 확인해 서명 claim을 발급한다(L2). 필요 시 구성원 명세를 구성해 A-09 look-through를 준비한다. + +### 11.4 Manual Review Queue + +`formed-for-purpose=true` + look-through 결과 / (g)(3) 합산($25M) 케이스 / D-01 cap 근접 / QIB carve-out 해석 / (a)(12) knowledge 판단 케이스를 검토 큐에 적재한다. Reject-logging으로 거절 시도 audit trail을 보존한다(revert 시 event 소실 보완). + +### 11.5 아키텍처 함의 + +A-08은 *stateless 형식 판정기*로 얇게 유지하고, 무거운 실사·경계 판단은 off-chain(L2·L3)에 둔다. 이로써 온체인 로직은 결정적·감사 가능하고, 규제 해석 변화는 검증기관 기준서·운영 정책 수준에서 흡수된다. + +--- + +## §12 Open Issues (우선순위) + +| ID | 우선 | 쟁점 | 비고 | +|---|---|---|---| +| **OD-1** | 최우선 | 어느 on-chain 이벤트가 법적 "sale(501a)/acquisition(3c7)"인가 — entity 임계값 freshness·activeRecipes 기준 시점. DEX 2차거래가 별도 공모를 구성하는지(§201(b)(2) 밖) | A-11 §5.4 acquisition registry·**A-13 §12 OD-1**과 동일 쟁점, 공동 설계 | +| **OD-2** | 최우선 | DEX 2차거래에서 "formed for the specific purpose" 재확인 불가 — spot-check 정책 필요 | A-12(모름 항변)·2a51-3(a) 집행과 연동 | +| **OD-3** | 높음 | Rule 2a51-1(g)(3) majority-owned subsidiary/parent 합산의 *증거 충분성* 기준 (QP (iv) 전용) | 검증기관 **발급 기준서** 항목으로 정의 | +| **OD-4** | 높음 | (a)(12) family office "knowledge and experience" · QIB account-capacity carve-out 등 주관 기준의 machine 판정 한계 | claim boolean 수용 + L3 spot-check 대상 | +| **OD-5** | 중간 | R1+R3 AND 게이트를 *거래 맥락 실제 활성*으로 한정하는 정책의 최종 확정 (Rule 144 2차에 buyer-AI 자동 재부과 금지 포함) | §5.4·§7 T4 · **A-13 §9.3·§9.4** reconciliation과 정합 — 확인 | +| **OD-6** | 중간 | 전환·fund-of-funds 매수인의 §2(a)(51)(C) 1996 consent를 DEX가 어떻게 증빙받는가 (신규 §3(c)(7) 펀드는 대개 N/A) | Rule 2a51-2 산정 사슬·검증기관 기준서 | + +--- + +## §13 파일명 규칙 + +- 정본(소스): `A-08_법인자격산정.md` +- 공유용: `A-08_법인자격산정.docx` (pandoc + CJK 후처리 빌드) +- 보조 다이어그램: `A-08_flow_dev.png` (Graphviz, 개발자용 판정 흐름) +- 위치: `산출물/elements/` \ No newline at end of file diff --git a/docs/compliance/elements/A-09_equity-owner-lookthrough.md b/docs/compliance/elements/A-09_equity-owner-lookthrough.md new file mode 100644 index 0000000..c50ecc2 --- /dev/null +++ b/docs/compliance/elements/A-09_equity-owner-lookthrough.md @@ -0,0 +1,1145 @@ +# ELE.A-09_equity-owner-lookthrough + +# A-09 지분 소유자 재귀 Look-Through / Equity Owner Look-Through — 부품 심층 인수인계 문서 (Walkthrough) + +> **이 문서는 무엇인가.** Decipher RWA DEX의 컴플라이언스 부품 중 하나인 지분 소유자 재귀 look-through 부품(내부 식별자 A-09)을, 미국 펀드·증권 규제를 처음 보는 사람도 이해할 수 있도록 풀어 쓴 인수인계 문서다. 개발자·법무팀·외부 자문 변호사·학회원이 각자 작업의 base로 그대로 쓸 수 있도록 --- ① 이 규제가 어디서 왔고 왜 존재하는지, ② 어떤 사실을 입력받아 ③ 어떤 로직으로 판정하고 ④ 실패하면 어떻게 처리하며 ⑤ 어떤 테스트로 검증하는지를, 기술 요소마다 풀이를 함께 붙여 설명한다. +> +> **A-09의 한 줄 정의.** 매수인이 사람이 아니라 **회사·신탁일 때**, 그 법인을 하나의 '블랙박스'로 보지 않고 **그 소유 구조를 추적해**, 요구되는 각 소유자가 자격(R3=QP 또는 R1=AI)을 충족하는지를 거래 직전에 판정하는 **공유 재귀 엔진**이다. 종착점은 *독립적으로 자격이 확인된 owner node* 다 --- 소유자가 자연인이면 A-13/A-03에 위임하고, entity이면 A-08/A-13(A-03)로 **그 entity 자체가 QP/AI인지 먼저 확인**하며, 그 자격이 구성원에 의존하거나 formed-for-purpose 등 look-through trigger가 있을 때에만 A-09가 다시 재귀한다(자연인까지 내려가는 것은 필요한 경우의 보수적 구현). A-08(법인 자격 산정)·A-13(QP)·A-03(AI)이 entity 매수인에 대해 "구성원까지 봐야 한다"고 판단하면 A-09를 호출한다(상호 재귀). +> +> **자체완결 원칙.** 이 문서는 다른 내부 문서를 열지 않아도 단독으로 이해되도록 작성했다. 인용은 미국 연방법·연방규칙·SEC 발행문서 등 외부 공식 자료만 사용한다. + +## 출처·버전 노트 + +- **인용 기준 일자**: 2026-07-01 조회. eCFR Title 17은 2026-06-08 최종 개정, 2026-06-17 기준 현행본 표시. + +- **ICA §2(a)(51)·§3(c)(7)·§3(c)(1)** --- 15 U.S.C. §80a-2(a)(51)·§80a-3(c)(7)·§80a-3(c)(1), uscode.house.gov prelim edition. govinfo.gov/link/uscode/15/80a-2 딥링크도 동일 1차 출처. + +- **Rule 2a51-1 / 2a51-2 / 2a51-3 / 3c-1** (17 C.F.R. §270.2a51-1·-2·-3·§270.3c-1) --- 1997년 채택본(62 FR 17512·17528, 1997-04-09). ecfr.gov 현행본. + +- **Rule 501(a)(8)** (17 C.F.R. §230.501(a)(8) + Note 1) --- ecfr.gov 현행본. + +- **SEC Release IC-22597** (62 FR 17512, 1997-04-09) --- sec.gov. Rule 2a51-1·2·3·3c-1·5·6의 adopting release. + +- **v1.2 정정 요지** (A-08/A-13 v1 최종본 대조): + (1) **§2(a)(51)(A)(iii) 신탁 원문 정정** --- 종전 판의 신탁 말미 "...are qualified purchasers"를 **현행 uscode 진본 "...is a person described in clause (i), (ii), or (iv)"** 로 교체. 즉 신탁의 수탁자·각 출연자는 **(i)·(ii)·(iv)** 로만 QP 자격을 얻어야 하며 **(iii) 신탁으로는 인정되지 않는다**(신탁 겹치기 차단). + (2) **급조 신탁 = 치유 없는 FAIL** --- Rule 2a51-3의 "전원 QP면 치유"는 **(ii)·(iv) 회사 전용**이다. (iii) 신탁은 "not formed for the specific purpose"가 statute 요건이라 **급조면 (iii) 자체 탈락**이고 회사식 구제가 없다(§3.3·§5.2·§6.2). + (3) **자연인 (i)에는 급조 개념 미적용** --- "형성(formed)"되는 대상이 아니므로 급조 판단 자체가 없다. + (4) **권위 사슬 명시** --- look-through의 "요건 → 세는 법" 사슬은 **① Rule 2a51-3(a)[급조 회사 (ii)(iv) 요건] → ② §3(c)(1)·Rule 3c-1[누구를 beneficial owner로 세나] → ③ Rule 2a51-2[펀드층·간접소유·전환 consent]** 다. **2a51-2는 만능 look-through 근거가 아니라**, 매수인이 그 자체로 펀드(excepted investment company)일 때 연결된다(§3.6·§3.7). + (5) **claim.basis 정합** --- QP 갈래는 QP_FAMILY_COMPANY·QP_TRUST·QP_INSTITUTIONAL(iv)·QP_QIB, AI 갈래는 AI_ALL_EQUITY_OWNERS. "전원 QP/AI 통과"는 별도 basis가 아니라 **하위 카테고리 + lookThroughStatus=COMPLETED** 로 표현(A-08 §3.17과 일관). + (6) **R1+R3 AND는 R1이 그 거래에서 실제 활성일 때만** --- 과거 506(c) 발행 이력만으로 Rule 144 2차 이전에 buyer-AI look-through를 자동 재부과하지 않는다(§5.4·§9.3, A-13 §9.3·§9.4·A-08 §5.4와 정합). + (7) 개발자용 플로우차트 3종(그림 3.0 법조문 관계 / 그림 3.1.1 매수인 유형별 트리거 분기 / 그림 5.0 재귀 판정 로직)을 신탁/회사 구제 비대칭 반영해 재작도. + +## §1 규제 맥락 (Context First) + +### 1.1 두 개의 축, 그리고 A-09의 자리 + +미국 증권규제에는 A-09가 걸치는 두 개의 독립된 축이 있다 --- **① 증권 발행의 등록/면제**(Securities Act 1933, Reg D Rule 506(c) --- 매수인 전원 AI)와 **② 펀드의 투자회사 등록/면제**(Investment Company Act 1940 §3(c)(7) --- 보유자 전원 QP). BUIDL-like 토큰은 이 둘을 동시에 탄다. 매수인이 자연인이면 A-03(AI)·A-13(QP)이 그 사람 하나만 보면 끝이다. 그러나 매수인이 **법인·신탁**이면 "이 껍데기 뒤의 소유자들이 자격이 되는가"라는 별개의 질문이 생기고, 소유자 중에 또 법인이 있으면 그것도 뚫어야 하므로 이 질문은 **재귀적**이다. + +이 재귀 추적을 A-13·A-03·A-08 본체에서 매번 반복하지 않도록 **하나의 원자적 부품으로 분리**한 것이 A-09다. A-09는 *지분 구조를 타고 내려가며 각 소유자의 자격을 확인하는 엔진*이며(entity 소유자가 자체로 QP/AI이면 그 지점에서 종료, 필요한 경우에만 자연인까지 재귀), 자연인에 닿으면 그 사람의 자격 판정을 다시 A-13(QP)/A-03(AI)에 위임한다. 요컨대 **A-08이 "이 법인을 어느 조항 칸에 넣고 look-through가 필요한가"를 판정(라우팅)하면, A-09가 "그 look-through를 실제로 수행"한다.** + +### 1.2 왜 look-through가 필요한가 — anti-circumvention·도관(conduit) 차단 + +법인은 자격 우회의 통로가 될 수 있다. 무자격자 여럿이 회사·신탁 껍데기를 만들어 그 뒤에 숨거나, 이 거래만을 위해 회사를 *급조*(formed for the specific purpose)해 형식을 맞추는 식이다. 미국법은 이를 두 겹으로 막는다 --- **① 급조 회사·신탁 배제**(취득 목적 설립 주체는 원칙적으로 자격 불인정), **② look-through**(각 소유자가 자격을 갖추는지 확인 --- 필요한 경우 자연인까지 추적). look-through 개념의 뿌리는 ICA §3(c)(1)(A)의 "Look-Through Provision"이고, SEC는 그 목적을 채택 릴리스에서 명시했다. + +```text +To prevent circumvention of the 100-investor limit, section 3(c)(1)(A) +(the "Look-Through Provision") requires, in some instances, that a fund +seeking to rely on section 3(c)(1) "look through" certain companies +(e.g., corporations, partnerships and other investors that are not +natural persons) that hold its voting securities and count the company's +security holders as beneficial owners of the fund's securities. + — SEC Release IC-22597, §I.B (62 FR 17512, Apr. 9, 1997) +``` + +핵심 우려는 **도관(conduit)** 이다 --- 투자자가 "*a conduit that was created to enable a Section 3(c)(1) Fund to have indirectly more than 100 investors*"(IC-22597 n.19)일 수 있다는 것. QP 맥락에서도 같은 논리가 Rule 2a51-3(회사)과 statute §2(a)(51)(A)(iii)(신탁)으로 이식됐다. A-09 설계 부담의 대부분이 이 anti-circumvention 논리에서 나오며, 급조 판정·자연인 종착·전원-충족 AND-gate가 그 구조물이다. + +### 1.3 왜 한 부품이 QP(R3)와 AI(R1) look-through를 함께 다루나 + +QP(적격매수자)와 AI(적격투자자)는 서로 다른 기준이지만(투자자산 $5M·$25M vs 순자산/자산 $1M·$5M), *법인일 때 소유자를 타고 내려가는 절차*는 구조가 같다 --- 소유자 순회 → 자연인이면 개별 위임, 법인이면 한 겹 더 재귀 → 요구되는 소유자 전원이 자격이면 통과. A-09는 이 공통 재귀를 한 엔진으로 구현하고, "이번 거래에서 QP를 볼지 AI를 볼지"는 **활성 Recipe**와 A-08이 넘긴 카테고리에 따라 분기한다. 어느 카테고리 *정의*로 leaf를 판정할지는 A-13/A-03이 제공한다. + +다만 **두 축의 급조 처리가 다르다는 점**이 A-09가 반드시 기억해야 할 비대칭이다(§3.3·§5.2에서 상술) --- R3(QP) 쪽 (ii)(iv) 회사는 Rule 2a51-3(a)가 "급조여도 전원 QP면 통과"라는 구제를 조문에 내장하지만, R1(AI) 쪽 직접 자산 path((a)(3)(7)(9)(12))는 조문 자체가 "not formed for the specific purpose"를 요건으로 해 **급조 entity는 그 path로 통과 불가**이고 오직 (a)(8)(전원 지분권자 AI)로만 살아난다. 그리고 R3 신탁(iii)은 급조면 아예 치유가 없다. + +### 1.4 A-03·A-13·A-08과의 분업 (왜 A-09가 따로 있나) + +A-03(AI)·A-13(QP)은 *"무엇이 자격을 만드는가"* 라는 **카테고리 정의**를, A-08은 *"이 법인을 어느 칸에 넣고 look-through가 필요한가"* 라는 **entity-level 라우팅**을 담당한다. A-09는 그중 look-through가 필요할 때 켜지는 **재귀 실행 엔진**이다. + + --------------------------------------------------------------------------------------------------- + 부품 담당 자연인 매수인 법인·신탁 매수인 + ----------------- --------------------------- -------------------- -------------------------------- + A-03 / A-13 카테고리 *정의* **직접 판정** 카테고리 *기준*만 제공 + (claim.basis 메뉴) (leaf 위임 수신) + + A-08 entity-level *분류·임계값· 비활성(dormant) **활성 --- 분류·급조 판정 후 + 급조·라우팅·결합* look-through 필요 시 A-09 호출** + + **A-09** **지분 *재귀 look-through 종착(자격 확인된 노드 → **활성 --- 소유자 그래프를 + 실행 엔진*** A-13/A-03 위임) 필요 시 자연인까지 재귀 추적·AND 집계** + + A-06 발행자 *affiliate/control* (별개 축) (별개 축 --- look-through 중 + 판정 발견돼도 A-09 아님, A-06) + --------------------------------------------------------------------------------------------------- + +**쉽게 말하면.** A-03/A-13이 "법전의 자격 조항"이고 A-08이 "매수인이 회사일 때 어느 칸에 넣고 주주를 더 봐야 하는지 결정하는 분류 창구"라면, A-09는 **그 주주를 실제로 타고 내려가는 재귀 엔진**이다. 양파(법인) 안에 또 양파(법인)가 있으면 계속 까고, 진짜 알맹이(사람)가 나오면 A-13/A-03에게 "이 사람 자격 돼?"라고 묻는다. look-through 중에 발견되는 *발행자 지배관계인(affiliate)* 판정은 A-06 소관이지 A-09가 아니다(별개 축). + +### 1.5 Existential Risk — 왜 한 껍데기 안의 한 명이 펀드 전체를 무너뜨리나 + +§3(c)(7) 펀드는 **모든** 보유자가 취득 시점에 QP여야 면제가 성립한다(15 U.S.C. §80a-3(c)(7)(A)). 법인 매수인 하나가 잘못 통과하면 --- 예컨대 3겹 신탁·회사 뒤에 숨은 비-QP 한 명을 놓치면 --- 펀드 전체의 투자회사 등록 면제가 무너진다(fund-level existential consequence). 그래서 A-09의 재귀는 *요구되는 각 소유자가 독립적으로 자격이 확인될 때까지* 내려가야 하며(entity가 자체 자격이면 그 노드에서 종료, 필요한 경우 자연인까지), 전원-충족이 요구되는 구조에서는 **한 명이라도 비자격이면 전체를 차단**한다. 이 "한 명이 전체를 무너뜨린다"는 성질이 A-09를 자격형 부품 중에서도 특히 조심스럽게 만든다. 다만 이 위험을 *절대적 객관 보장 의무*로 오해하면 안 된다 --- Rule 2a51-1(h)는 §3(c)(7)상 QP에 Relying Person(펀드·그 대리인 = Trusted Issuer)이 *합리적으로 QP라고 믿는* 자까지 포함하므로, A-09의 법적 목적은 모든 사실을 온체인에서 절대 보장하는 것이 아니라 Trusted Issuer의 서명된 `ownershipGraph`·leaf claim으로 그 *합리적 믿음의 구조적 근거*를 남기는 데 있다(§8.3). 반대로 자격 있는 정상 구조를 데이터 미비만으로 오차단하면 정당한 유동성을 잃으므로, A-09는 *판단 불가*(미식별·깊이 초과)를 자동 FAIL이 아니라 **사람 검토(REVIEW)** 로 보낸다(§6.2). + +### 1.6 한국법 비교 (참고) + +한국법에도 껍데기를 뚫는 발상은 있다 --- 자금세탁방지 맥락의 **실질소유자(beneficial owner) 확인** 의무가 대표적으로, 법인 고객의 25% 이상 지분 보유 자연인을 끝까지 식별하도록 한다(특정금융정보법·시행령). 다만 이는 *KYC·제재* 목적의 관통이고, 미국식 look-through는 *투자자 자격(QP/AI) 판정* 목적이라는 점에서 결이 다르다 --- 특히 미국의 **"취득 목적 설립 금지(anti-circumvention)"** 와 **자격 임계값까지 결합한 재귀 look-through**처럼 지분 구조를 (필요한 경우 자연인까지) 추적해 *자격형 게이트*를 세우는 장치는 한국 자본시장법 전문투자자 체계에 아직 정립되어 있지 않다. A-09 설계 부담 대부분은 이 미국 특유의 anti-circumvention 논리에서 나온다(자세한 매핑은 별도 과제). + +## §2 메타 정보 (Internal Identifier Box) + + ----------------------------------------------------------------------- + 항목 값 + ----------------------------------- ----------------------------------- + **부품 ID** A-09 + + **부품 이름** 지분 소유자 재귀 Look-Through / + Equity Owner Look-Through + + **카테고리** A --- 신원·자격 (매수인 측, 공유 + 재귀 엔진) + + **검사 대상(한 줄)** "법인·신탁 매수인의 지분 구조를 + 각 소유자 자격 확인(필요 시 자연인까지)해, *요구되는 + 소유자 전원*이 그 거래에서 요구되는 + 자격(R3=QP · R1=AI)을 충족하는가" + + **활성 Recipe** **R3 (ICA §3(c)(7) Fund)** --- + 조건부(법인·신탁 매수인 + + look-through 필요) · **R1 (Reg D + 506(c) Issuance)** --- + 조건부(법인 매수인 + (a)(8) 전원-AI + 경로 + R1 실제 활성). **R1·R3 동시 + 실제 활성 시 각 track look-through를 + AND** (§5.4·§9.3) + + **활성 조건** A-08/A-13/A-03이 **entity 매수인**에 + 대해 look-through가 필요하다고 판정해 + 호출할 때만(자연인 매수인 시 + dormant). R1 track은 그 거래가 + 실제로 buyer-AI를 요구할 때만 --- + 과거 발행 이력으로 자동 소환 + 아님(§5.4) + + **Cascade Element** **A-13 / A-03**(자연인 leaf 개별 + 자격 위임 --- 상호 재귀) · + **A-08**(소유자 중 중첩 entity의 + 재분류) · **A-06**(look-through 중 + 발행자 affiliate 발견 시, 별개 축) · + A-04(신원 중복, 분리 카운트 연동) · + A-11(claim 만료) · B-01(manifest + 정합) + + **Timing / Stateful** pre-trade / 판정 로직 STATELESS + (같은 입력이면 같은 결과; + ownershipGraph 자체는 off-chain + 상태로 Trusted Issuer가 관리) + + **검증 패턴** \(B\) 증명서 확인형 --- A-09는 새 + oracle을 더하지 않고, *서명된 지분 + 구조 claim* + *자연인 leaf 위임 + claim*을 재귀적으로 조합(AND)한다. + 법적 토대 = Rule 2a51-1(h) + reasonable belief(QP) · Rule + 506(c)(2)(ii) reasonable + steps(AI) (§8) + + **핵심 훅** lookThroughStatus = COMPLETED \| + PENDING \| FAILED --- A-08·A-13·A-03의 + PASS 게이트가 entity 매수인에 한해 + 이 값을 AND 조건으로 건다 + + **성숙도** 🟡 재귀 깊이(MAX_DEPTH)·partial + ownership 처리 미확정(§12) --- + 법조문·판정 골격은 확정. A-13 Open + Issue(look-through depth)와 직결 + + **파일·위치** A-09_equity-owner-lookthrough.md · + 산출물/elements/ + ----------------------------------------------------------------------- + +> **쉽게 말하면.** A-09는 "혼자 판단하는 부품"이 아니라 **A-08·A-13·A-03의 보조 재귀 엔진**이다. A-13이 "이 매수인이 QP인가?"를 묻다가 매수인이 가족회사·신탁이면 A-08이 "그럼 그 뒤 사람들을 봐야 한다"고 A-09를 부른다. A-09는 껍데기를 한 겹씩 벗겨 자연인에 닿을 때까지 내려가고, 닿으면 다시 A-13/A-03에 "이 사람 자격 돼?"를 묻는다. 그 결과를 모아 **전원 통과면 `COMPLETED`**, 한 명이라도 막히면 **`FAILED`**, 데이터가 모자라면 **`PENDING`**(사람 검토)을 돌려준다. + + +## §3 ① 법적 근거 (Layer 1 → 2 → 3) + +**읽는 법.** 법적 근거는 세 겹이다 --- **Layer 1**(조문)은 의회가 만든 법률 텍스트(statute), **Layer 2**(규칙)는 SEC가 그것을 실무 수준으로 구체화한 연방규칙(rule), **Layer 3**(해석)은 SEC 발행문서·No-Action Letter·판례가 모호한 부분을 메운 해석이다. 아래 **§3.0.2 표 1의 종류 칸이 그대로 Layer에 대응**한다 --- Statute = Layer 1, SEC Rule = Layer 2, SEC Release·Case = Layer 3. 본 절은 조문이 작동하는 **논리 흐름 순서**로 배열돼 §3.1\~§3.11 번호를 유지하며(중요도순 아님), 각 항목이 어느 Layer인지는 표 1로 확인한다. 각 조문 블록은 6-필드(조항 → 핵심 원문 → 한국어 → 쉬운 설명 → PASS/FAIL 반영 → ERC-3643 변환)로 푼다. **원문의 금액은 법전 그대로(`$5,000,000`)**, 본문 prose는 `$5M`으로 약칭한다. "not less than"은 `≥`, "in excess of"는 `>`로 옮긴다. + +### 3.0 법조문 관계 플로우차트 (개발자용) + +아래 그림은 entity 매수인이 들어왔을 때 A-09가 타는 전체 흐름을 하나로 정리한 것이다 --- 거래에 켜진 게이트(R3=QP·R1=AI) → 매수 주체 분류(개인·회사·신탁) → **회사면 급조?(Rule 2a51-3 (ii)(iv)) / 신탁이면 급조?(statute (iii))** 로 갈리는 트리거 분기 → 누구를 세나(§3(c)(1)·3c-1, 펀드층은 2a51-2) → 소유자 재귀 → 자연인 도달 시 A-13/A-03 위임 → 요구되는 소유자 전원 자격 → `lookThroughStatus` COMPLETED/FAILED. **핵심은 회사(급조→전원 QP 구제 내장)와 신탁(급조→치유 없는 탈락)의 비대칭**을 노드로 명시한 점이다. 각 조항 상세는 §3.1\~§3.11(특히 유형별 트리거는 §3.2.1, 2a51-3 vs 2a51-2 분담은 §3.6.1). + +![그림 3.0 --- look-through 법조문 관계 흐름: 게이트에서 유형 분기, 급조 처리(회사/신탁 비대칭), 재귀·위임, COMPLETED/FAILED까지 (개발자용)](fig30.png) + +**범례.** + +- **파랑** = 핵심 조문·규칙(Direct) --- 유형별 자격 근거·급조 look-through·카운팅 + +- **회색** = 분기·판정 노드 + +- **초록** = 통과(PASS)·카브아웃(개인=look-through 불필요, `COMPLETED`) + +- **빨강** = 탈락(FAIL) --- 비자격 소유자·급조 신탁 (iii) 탈락 + +- **주황** = 재귀 고리(A-09 self-call, depth cap) + +### 3.0.1 실제 BUIDL은 어떻게 적용되나 + +§3.0이 일반 법조문 흐름이라면, 이 절은 BUIDL-*like* §3(c)(7) 펀드 지분에 A-09가 어떻게 걸리는지를 보여준다. **(재확인) 본 서술은 실제 BlackRock BUIDL의 발행 표준·transfer architecture를 단정하지 않는다 --- BUIDL-like §3(c)(7) private fund interest를 ERC-3643 테스트 토큰으로 모델링한 것이다.** BUIDL은 발행 Rule 506(c)·펀드 구조 ICA §3(c)(7)·최소 청약 $5M이고, ERC-3643(T-REX) 가정 하에서 Securitize가 자격 claim의 Trusted Issuer가 된다. + +**A-09 관점 --- 언제 켜지나.** BUIDL의 전형적 매수인은 운용사·기관·SPV 등 **법인**이다. 이들이 QP가 되는 실제 경로는 **(g)(1) QIB 간주**(A-08 §3.10)나 **(iv) $25M 재량운용**이 많은데, 이 두 경로는 *법인 자체*가 자격을 얻으므로 **A-09 look-through가 불필요**하다(A-08이 직접 PASS). A-09가 실제로 켜지는 것은 매수인이 **가족회사(ii)·신탁(iii)** 이거나, **급조된 SPV**((ii)(iv) 회사)로서 2a51-3(a)가 전원 QP를 요구할 때, 또는 발행(R1) 단계에서 그 법인이 **(a)(8) 전원-AI entity**로 제출될 때다. 즉 A-09는 "*자격을 구성원에게서 빌려 오는*" 매수인에 한해 켜지는 조건부 엔진이다. + +**같은 $5M, 다른 개념 주의.** BUIDL 청약 최소액 $5M은 발행자가 정한 조건(변경 가능)이고, 가족회사(ii)의 investments $5M은 법정 요건이며 서로 다르다. 그리고 **신탁(iii)에는 자체 $5M 문턱이 아예 없다** --- (iii)의 요건은 "급조 아님 + 수탁자·각 출연자가 (i)(ii)(iv) QP"이지 신탁 자산 규모가 아니다(종전 판의 "$5M+ 신탁" 표현은 오류였다 --- §3.3). + +**검증은 누가 --- Securitize = Trusted Issuer, A-09는 구조 claim을 재귀 조합.** ERC-3643 가정 하에서 Securitize가 off-chain에서 지분 구조(누가 실소유자인가, 친족·위탁자 관계가 사실인가)를 실사·서명하고, 자연인 leaf마다 QP/AI claim을 발급한다(Rule 2a51-1(h)·506(c)(2)(ii)). 온체인 A-09는 그 구조를 다시 조사하지 않고, 서명된 지분 구조 위에서 재귀 순회·전원-충족 AND·자연인 위임만 수행해 `lookThroughStatus`를 확정한다(§8). + +![그림 3.0.1 --- BUIDL 적용: QIB·$25M 직접 자격은 A-09 불요, 가족회사·신탁·급조 SPV·(a)(8) entity에서만 look-through 발동](fig31.png) + +### 3.0.2 조문 순서·중요성 한눈에 보기 (표 1·표 2) + +아래 두 표가 §3의 지도다. **표 1**(Authority)은 각 근거가 어떤 종류(=Layer)이고 무슨 내용이며 A-09에 어떻게 닿는지를, **표 2**(순서·중요성)는 §3.1\~§3.11 소단원의 읽는 순서(논리 흐름)와 중요성(A-09가 실제로 그걸로 판정하는가)을 보여준다. 순서는 중요도순이 아니라 흐름순이다. 제정법 출처는 uscode.house.gov로 통일했으며 govinfo.gov/link/uscode/… 딥링크도 동일한 1차 출처다. + +**표 1 --- Authority(근거 목록)** + + -------------------------------------------------------------------------------------------------------------------------------- + 종류 Authority 내용 A-09 관련성 Direct/Supporting Official URL + ----------- -------------------------------------------- --------------------------------------------- ------------------------------- ------------------- ----------------- + Statute ICA §3(c)(7)(A) · 15 U.S.C. §80a-3(c)(7)(A) 보유자 전원 QP + 공모 금지 look-through 결과가 걸리는 곳 Supporting uscode.house.gov + (Condition 1·2) (전원 QP 데이터 요구) + + Statute ICA §3(c)(1)(A) · 15 U.S.C. §80a-3(c)(1)(A) Look-Through Provision --- 회사 보유 시 **재귀의 뿌리**(왜 뚫나) Supporting uscode.house.gov + 그 회사의 holder를 count + 카운팅 기준 + + Statute ICA §2(a)(51)(A)(i)\~(iv) · 15 U.S.C. QP 4갈래(개인 $5M·가족회사 $5M·신탁· **look-through 대상 분기** Direct uscode.house.gov + §80a-2(a)(51)(A) $25M 재량) (유형→트리거) + + Statute ICA §2(a)(51)(A)(iii) · 동 신탁 QP --- 급조 아님 + 수탁자·각 출연자가 **신탁 look-through** Direct uscode.house.gov + (i)(ii)(iv) (급조=탈락·치유 없음) + + Statute ICA §2(a)(51)(A)(iv) · 동 $25M 재량운용 any person QP 급조 (iv)면 2a51-3(a) 적용; Conditional uscode.house.gov + 자체 자격 시 look-through 불요 + + SEC Rule 17 C.F.R. §270.2a51-3(a)·(b) 목적형성 회사 look-through ((ii)(iv) 한정) **급조 회사 전원-QP 트리거** Direct ecfr.gov + --- (a) 강제 / (b) 전원 QP 구제 (구제 내장) + + Statute· ICA §3(c)(1) · 17 C.F.R. §270.3c-1 누구를 beneficial owner로 세나(1차 기준) **카운팅 기준** Direct ecfr.gov + Rule (그 '전원'이 누구) + + SEC Rule 17 C.F.R. §270.2a51-2(a) excepted investment company의 BO 산정 · 펀드·전환 매수인일 때 Conditional ecfr.gov + 간접소유 · 전환 consent 간접소유 추적 + + Statute ICA §2(a)(51)(C) · 15 U.S.C. excepted investment company(fund-of-funds) 매수인이 그 자체로 펀드일 때 Background uscode.house.gov + §80a-2(a)(51)(C) --- pre-1996 보유자 consent (신규 §3(c)(7)엔 대개 N/A) + + SEC Rule 17 C.F.R. §230.501(a)(8) + Note 1 전원 지분권자 AI인 entity · **Track B(R1) 전원-AI** Direct (Track B) ecfr.gov + 자연인까지 look-through 허용 look-through + + SEC Release SEC Release IC-22597, 62 FR 17512 (1997) look-through = 우회 방지, 표적은 도관(conduit) 두 track look-through 정책 출처 Supporting sec.gov + + Case SEC v. Ralston Purina Co., 346 U.S. 119 "사정에 밝은(able to fend for themselves)" 도관 아닌 정상 구조 취지 Background govinfo.gov + (1953) 투자자 → 등록 불요의 원리 (operating company 제외) + -------------------------------------------------------------------------------------------------------------------------------- + +> 인용 원칙 --- 영문 원문은 위 1차 출처에서 verbatim 확보. `uscode.house.gov`는 본문 fetch가 불안정해 동일 텍스트를 `govinfo.gov`(USCODE 패키지)로 교차 검증했고, SEC IC-22597 각주(n.8·n.19)로 다시 대조했다. aggregator(law.cornell·Justia)는 본문 인용에 쓰지 않았다. + +**표 2 --- 순서·중요성(논리 흐름순)** + + ---------------------------------------------------------------------------------------------------------------- + 순서 조문 중요성 A-09가 그걸로 하는 일 + -------- --------------------------------------- -------- -------------------------------------------------------- + §3.1 §3(c)(7)(A) + §3(c)(1)(A) ★★ "왜 뚫나" --- 전원 QP 요구와 conduit 차단의 근거 + + §3.2 §2(a)(51)(A)(i)\~(iv) ★★★ 매수 주체를 개인·가족회사·신탁·$25M로 분류 → 트리거 결정 + + §3.3 §2(a)(51)(A)(iii) 신탁 ★★★ 신탁이면 급조=탈락 검사 + 수탁자·각 출연자 (i)(ii)(iv) 추적 + + §3.4 Rule 2a51-3 (ii)(iv) 회사 ★★★ 급조 회사면 전원 QP 강제(구제 내장); 비급조 (b) 구제 + + §3.5 §3(c)(1)·Rule 3c-1 ★★★ "그 전원"을 누구로/몇으로 세는지 1차 기준 + + §3.6 Rule 2a51-2 ★★ 매수인이 펀드·전환이면 간접소유·펀드층 산정 + + §3.7 §2(a)(51)(C) ★ 매수인이 fund-of-funds면 pre-1996 consent 인지(대개 N/A) + + §3.8 Rule 501(a)(8) + Note 1 ★★★ Track B(발행)에서 전원-AI entity look-through + + §3.9 판례·발행문서(IC-22597·Ralston) ★★ 급조/도관 판단과 정상회사 제외의 정책 근거 + + §3.10 Sub-요건 분해 매트릭스 --- 조문을 원자 검증 단위로 분해(입력 필드 매핑) + + §3.11 ERC-3643·claim.basis 총정리 --- 카테고리별 claim.basis·lookThroughStatus 총람 + ---------------------------------------------------------------------------------------------------------------- + + +### 3.1 ICA § 3(c)(7)(A) — 보유자 전원 QP·공모 금지 (look-through를 요구하는 근원) \[🔗 uscode.house.gov\] + +- **조항**: 15 U.S.C. §80a-3(c)(7)(A) --- uscode.house.gov + +- **핵심 원문** (15 U.S.C. §80a-3(c)(7)(A)): + +```text +Any issuer, the outstanding securities of which are owned exclusively by +persons who, at the time of acquisition of such securities, are qualified +purchasers, and which is not making and does not at that time propose to +make a public offering of such securities. Securities that are owned by +persons who received the securities from a qualified purchaser as a gift +or bequest, or in a case in which the transfer was caused by legal +separation, divorce, death, or other involuntary event, shall be deemed +to be owned by a qualified purchaser, subject to such rules, regulations, +and orders as the Commission may prescribe ... +``` + +- **한국어.** 그 발행 증권이, 해당 증권의 취득 시점에 qualified purchaser인 자들에 의하여 **배타적으로(exclusively)** 소유되고, 그 시점에 해당 증권의 public offering(공모)을 하고 있지 아니하며 또한 그때 이를 하려고 제안하지도 아니하는 모든 issuer. 증여(gift)·유증(bequest)으로, 또는 법적 별거·이혼·사망·그 밖의 비자발적 사건(involuntary event)에 의하여 받은 증권은 qualified purchaser가 소유한 것으로 본다 ... + +- **쉽게 말하면.** §3(c)(7) 면제에는 두 조건이 있다 --- ① "모든 지분이 취득 시점에 QP에게 배타적으로 소유"(Condition 1), ② "공모를 하지 않음"(Condition 2). A-09는 Condition 1의 **"모든 보유자 QP"** 를 *매수인이 법인일 때* 실질적으로 보장하는 장치다 --- 법인 껍데기를 세워 그 뒤에 비-QP를 숨기면 이 "전원 QP"가 형식만 충족되고 실질이 깨지므로, 껍데기를 뚫어 진짜 소유자를 본다. 이 "뚫어 센다"의 개념적 뿌리가 ICA **§3(c)(1)(A)의 Look-Through Provision**(회사가 펀드 지분을 보유하면 그 회사의 holder를 펀드의 beneficial owner로 count)이며, SEC는 그 목적을 "*to prevent circumvention*"(IC-22597 §I.B)이라 밝혔다(§3.9). Condition 2(공모 금지)는 부품 하나로 끝나지 않고 DEX 거래환경 전체에 걸리는 Recipe-level 문제로 §9·§12에서 별도로 다룬다. + +- **PASS/FAIL 반영.** 간접(Supporting) --- A-09가 직접 이 조문을 PASS/FAIL로 코딩하지는 않는다. 대신 A-09의 출력(`lookThroughStatus`)이 *이 "전원 QP" 요건을 법인 매수인에 대해 충족시키는 증거*가 된다. A-13의 Condition 1 PASS 게이트가 entity 매수인에 대해 `lookThroughStatus=COMPLETED`를 AND로 건다. + +- **ERC-3643 변환.** transfer 시 A-13의 `Compliance.canTransfer()`가 entity 매수인에 대해 `lookThroughStatus==COMPLETED`를 필수 조건으로 요구 → 미완료·실패면 이전 거부. 비자발적 이전 = `forcedTransfer()`/`recovery()` 예외(Rule 3c-6, A-13 소관). + +### 3.2 ICA § 2(a)(51)(A)(i)\~(iv) — QP 4갈래 (look-through 대상 분기) \[🔗 uscode.house.gov\] + +- **조항**: 15 U.S.C. §80a-2(a)(51)(A) --- uscode.house.gov + +- **핵심 원문** (15 U.S.C. §80a-2(a)(51)(A)): + +```text +"Qualified purchaser" means— (i) any natural person (including any person +who holds a joint, community property, or other similar shared ownership +interest in an issuer that is excepted under section 80a-3(c)(7) of this +title with that person's qualified purchaser spouse) who owns not less +than $5,000,000 in investments, as defined by the Commission; (ii) any +company that owns not less than $5,000,000 in investments and that is +owned directly or indirectly by or for 2 or more natural persons who are +related as siblings or spouse (including former spouses), or direct +lineal descendants by birth or adoption, spouses of such persons, the +estates of such persons, or foundations, charitable organizations, or +trusts established by or for the benefit of such persons; (iii) any trust +that is not covered by clause (ii) and that was not formed for the +specific purpose of acquiring the securities offered, as to which the +trustee or other person authorized to make decisions with respect to the +trust, and each settlor or other person who has contributed assets to the +trust, is a person described in clause (i), (ii), or (iv); or (iv) any +person, acting for its own account or the accounts of other qualified +purchasers, who in the aggregate owns and invests on a discretionary +basis, not less than $25,000,000 in investments. +``` + +- **한국어.** "Qualified purchaser"란 --- (i) Commission이 정하는 investments를 `≥ $5,000,000` 보유한 모든 자연인(§3(c)(7) 면제 issuer에서 QP인 배우자와 공유지분을 보유하는 자 포함); (ii) investments를 `≥ $5,000,000` 보유하고, 형제·배우자(전 배우자 포함)·직계비속(출생/입양)·그 배우자·그 유산·또는 그들을 위해 설립된 재단·자선단체·신탁에 의하여 직접·간접으로 소유되는 모든 회사; (iii) clause (ii)에 포섭되지 않고, 제공되는 증권 취득을 특정 목적으로 형성되지 않은 신탁으로서, 결정 권한 있는 수탁자와 자산을 출연한 각 위탁자가 **clause (i)·(ii) 또는 (iv)에 기술된 자**인 신탁; 또는 (iv) 자기 또는 다른 QP들의 계산으로, 총계로 재량적 기준으로 investments를 `≥ $25,000,000` 소유·투자하는 모든 자(any person). + +- **쉽게 말하면.** (i)은 개인, (ii)는 가족회사, (iii)은 신탁, (iv)는 $25M 재량운용자다. 문턱은 개인·가족회사 `$5M`, (iv) `$25M`이며 모두 `≥`(not less than, 포함)이다. **(iv)는 흔히 "기관"으로 줄여 부르면 안 된다** --- 조문 문언은 "기관"이 아니라 *자기 또는 다른 QP들의 계산으로 재량으로 $25M 이상을 운용하는 모든 자*, 즉 any person이다(운용사·기관이 전형적일 뿐). A-09에 중요한 것은 **(ii)와 (iii)은 그 안의 사람들까지 따져야 자격이 정해진다**는 점 --- 이것이 look-through의 대상 분기다. (i) 개인은 그 사람만 보면 되고 "형성"되는 대상이 아니라 급조 판단 자체가 없다. + +- **PASS/FAIL 반영.** 직접 ○ --- 매수 주체가 어느 clause에 해당하는지가 A-09의 **트리거·모드**를 결정한다((ii) 가족회사=구성 확인 또는 급조 시 전원 QP / (iii) 신탁=급조 검사 + 전원 QP / (iv)=자체 자격 또는 급조 시 전원 QP / (i)=look-through 없음). + +- **ERC-3643 변환.** claim.basis ∈ {QP_NATURAL, QP_FAMILY_COMPANY, QP_TRUST, QP_INSTITUTIONAL}. entity 갈래((ii)(iii)(iv))는 `lookThroughStatus`를 동반 필드로 싣고, A-09가 이를 COMPLETED로 채운다. + +### 3.2.1 매수인 유형별 look-through 트리거 분기 — 개인 vs 회사 vs 신탁 + +매수인의 유형이 **look-through를 켤지, 그리고 어떤 근거로 켤지**를 가르는 스위치다. 세 갈래가 서로 다른 조문에 걸린다는 점이 A-09 로직의 핵심이며, 이를 그림 3.0.1이 한 장으로 보여준다. + +**① 개인 (i).** 그 사람만 QP/AI인지 보면 끝이다. look-through 불필요. "형성"되는 대상이 아니므로 급조(formed for the specific purpose) 판단도 적용되지 않는다. + +**② 회사 (ii)·(iv) --- Rule 2a51-3.** 회사가 매수인이면 **급조 여부**가 경로를 가른다. 급조 회사(§3.4 (a))는 각 beneficial owner가 **전원 QP** 여야 인정된다(look-through 강제, 구제 내장 --- 전원 QP면 통과). 비급조 회사는 자체 자산으로 (ii)/(iv)를 충족하거나 Rule 2a51-3(b)의 "전원 QP면 인정"을 쓴다. **적용 대상은 (ii)·(iv) 회사 두 갈래뿐이다.** + +**③ 신탁 (iii) --- statute 자체.** 신탁의 look-through는 Rule 2a51-3이 아니라 **statute §2(a)(51)(A)(iii)** 가 규정한다. 요건은 두 가지 --- ⓐ **급조가 아닐 것**(not formed for the specific purpose), ⓑ 수탁자와 **각 위탁자·출연자가 (i)·(ii)·(iv)에 기술된 QP** 일 것. 여기서 회사와 결정적으로 다른 두 가지: **급조 신탁은 (iii) 자체가 탈락**이라 회사가 받는 "전원 QP면 치유"가 **없고**, 출연자는 (i)(ii)(iv)로만 QP가 될 수 있어 **(iii) 신탁을 또 끼워 넣는 겹치기가 차단**된다. + +> **왜 이 분기가 핵심인가.** "급조인데 전원이 자격이면?"에 대한 답이 유형마다 다르다 --- **회사는 통과(구제 내장), 신탁은 탈락(구제 없음), 개인은 질문 자체가 성립 안 함.** A-09가 이 셋을 하나로 뭉뚱그리면 급조 신탁을 잘못 통과시켜 펀드 면제를 위태롭게 한다. + +### 3.3 ICA § 2(a)(51)(A)(iii) — 신탁 look-through (급조=치유 없는 탈락) \[🔗 uscode.house.gov\] + +- **조항**: 15 U.S.C. §80a-2(a)(51)(A)(iii) --- uscode.house.gov + +- **핵심 원문** (15 U.S.C. §80a-2(a)(51)(A)(iii)): + +```text +any trust that is not covered by clause (ii) and that was not formed for +the specific purpose of acquiring the securities offered, as to which the +trustee or other person authorized to make decisions with respect to the +trust, and each settlor or other person who has contributed assets to the +trust, is a person described in clause (i), (ii), or (iv); +``` + +- **한국어.** clause (ii)에 포섭되지 아니하고, **제공되는 증권을 취득할 특정 목적으로 형성되지 아니한** 신탁으로서, 그 신탁에 관하여 결정을 내릴 권한이 있는 수탁자 또는 그 밖의 자, 그리고 그 신탁에 자산을 출연한 각 위탁자 또는 그 밖의 자가 **clause (i)·(ii) 또는 (iv)에 기술된 자**인 신탁. + +- **쉽게 말하면.** 신탁이 QP가 되려면 두 가지가 동시에 필요하다 --- ① **급조가 아닐 것**, ② 수탁자와 **각 위탁자·출연자가 전원 (i)(ii)(iv) QP** 일 것. 두 가지 함정 주의: **(가)** 종전 판이 신탁 말미를 "are qualified purchasers"로 적고 "$5M+ 신탁"이라 풀었던 것은 오류다 --- 현행 진본은 "**is a person described in clause (i), (ii), or (iv)**"이고, 신탁에는 **자체 $5M 문턱이 없다**(출연자 전원 QP가 요건이지 신탁 자산 규모가 아님). **(나)** 출연자는 (i)(ii)(iv)로만 QP가 될 수 있어 **(iii) 신탁을 또 출연자로 끼워 넣는 겹치기는 불인정**된다. 그리고 **급조 신탁은 (iii) 자체가 탈락**이라, 회사가 Rule 2a51-3(b)에서 받는 "전원 QP면 인정"이라는 구제가 신탁에는 **없다**. + +- **PASS/FAIL 반영.** 직접 ○ --- 신탁 분기의 PASS/FAIL·모드를 statute가 직접 정한다. `formedForSpecificPurpose=true`인 신탁은 A-09가 **즉시 FAIL**(치유 없음). 비급조 신탁은 *수익자(beneficialOwners)가 아니라* **수탁자·의사결정권자와 각 위탁자·출연자**를 대상으로, 각자가 **(i)·(ii)·(iv)** 중 하나로 자격을 갖는지 확인한다(수탁자·출연자가 다시 (iii) 신탁으로 연쇄 주장하는 경로는 차단). 대상 인물이 자연인이면 A-13 직접 판정, entity((ii)가족회사·(iv)$25M)이면 그 자격을 확인한다. + +- **ERC-3643 변환.** `claim.basis = QP_TRUST`, `trust.formedForSpecificPurpose`, `trust.trustee`, `trust.settlors[]`. A-09: `if formedForSpecificPurpose → FAIL_FORMED_FOR_SPECIFIC_PURPOSE_NON_QP`(치유 경로 없음); else 수탁자·각 출연자 → A-13 위임(각자 (i)(ii)(iv) QP), 전원 통과 시 `lookThroughStatus=COMPLETED`. + +### 3.4 17 C.F.R. § 270.2a51-3 — 목적형성 회사 look-through ((ii)·(iv) 한정) \[🔗 ecfr.gov\] + +- **조항**: 17 C.F.R. §270.2a51-3(a)·(b) --- ecfr.gov + +- **핵심 원문** (17 C.F.R. §270.2a51-3): + +```text +(a) For purposes of section 2(a)(51)(A) (ii) and (iv) of the Act, a +company shall not be deemed to be a qualified purchaser if it was formed +for the specific purpose of acquiring the securities offered by a company +excluded from the definition of investment company by section 3(c)(7) of +the Act unless each beneficial owner of the company's securities is a +qualified purchaser. (b) For purposes of section 2(a)(51) of the Act, a +company may be deemed to be a qualified purchaser if each beneficial owner +of the company's securities is a qualified purchaser. +``` + +- **한국어.** (a) 법 제2(a)(51)(A)(ii) 및 (iv)조의 목적상, 어느 회사가 §3(c)(7)로 투자회사 정의에서 제외되는 회사가 매도하는 증권의 취득을 **특정 목적으로 하여 설립된** 경우, 그 회사의 **각 beneficial owner가 적격매수자가 아닌 한** 그 회사를 적격매수자로 보지 아니한다. (b) 법 제2(a)(51)조의 목적상, 어느 회사의 **각 beneficial owner가 적격매수자인 경우** 그 회사를 적격매수자로 볼 수 있다(may be deemed). + +- **쉽게 말하면.** R3 측 anti-circumvention 집행이다. **적용 대상은 (ii)·(iv) 회사 두 갈래뿐** --- (a)는 급조 회사에 대한 *제한*(전원 QP 아니면 불가)이자 동시에 *구제*(전원 QP면 통과)이고, (b)는 비급조 회사가 자체 자산이 부족해도 "전원 QP면 인정"이라는 추가 선택지다. 어느 쪽이든 **"구성원 전원 QP"라는 안전판이 열려 있다**는 점이 회사의 특징이다. 이것이 신탁(iii)과의 결정적 차이 --- **신탁은 급조면 치유 없이 탈락**하지만, 회사는 급조여도 전원 QP면 (a)로 통과한다(§3.2.1·§3.3). "급조" 개념의 뿌리는 statute (iii)의 신탁 요건을 Rule 2a51-3이 회사에까지 확장한 것이다. + +- **PASS/FAIL 반영.** 직접 ○ --- `formedForSpecificPurpose=true`이고 cat ∈ {QP_FAMILY_COMPANY, QP_INSTITUTIONAL}이면 A-09가 **전원-충족 모드**로 전환해 각 beneficial owner가 QP인지 확인한다(각 owner가 자체 자격이면 그 노드에서 종료 --- 자연인까지 강제 아님). 1인이라도 비-QP면 `FAIL_FORMED_FOR_SPECIFIC_PURPOSE_NON_QP`. (b) 경로도 전원 QP 확인 시 통과이나 별도 basis가 아니라 하위 카테고리 + `lookThroughStatus=COMPLETED`로 표현한다. + +- **ERC-3643 변환.** `if entityType==COMPANY && claim.basis∈{QP_FAMILY_COMPANY,QP_INSTITUTIONAL} && formedForSpecificPurpose → requireAllOwnersQP=true → A-09 재귀`. 전원 QP면 `lookThroughStatus=COMPLETED`, 아니면 `FAIL_FORMED_FOR_SPECIFIC_PURPOSE_NON_QP`. (b) 비급조·자산부족 경로도 `lookThroughStatus=COMPLETED`로 귀속. + + +### 3.5 ICA § 3(c)(1)(A) · 17 C.F.R. § 270.3c-1 — "그 전원"을 누구로/몇으로 세나 (카운팅 1차 기준) [🔗 uscode.house.gov] + +- **조항**: 15 U.S.C. §80a-3(c)(1)(A)(Look-Through Provision) · 17 C.F.R. §270.3c-1(구현 규칙) --- uscode.house.gov / ecfr.gov + +- **핵심 원문** (15 U.S.C. §80a-3(c)(1) 및 (A)): + +```text +(1) Any issuer whose outstanding securities (other than short-term paper) +are beneficially owned by not more than one hundred persons (or, in the +case of a qualifying venture capital fund, 250 persons) and which is not +making and does not presently propose to make a public offering of its +securities. ... + (A) Beneficial ownership by a company shall be deemed to be beneficial + ownership by one person, except that, if the company owns 10 per centum + or more of the outstanding voting securities of the issuer, and is or, + but for the exception provided for in this paragraph or paragraph (7), + would be an investment company, the beneficial ownership shall be deemed + to be that of the holders of such company's outstanding securities + (other than short-term paper). + — 15 U.S.C. §80a-3(c)(1) 및 §80a-3(c)(1)(A) +``` + +- **한국어.** (1) 미등록증권(단기증권 제외)의 보유자가 100인(적격 벤처캐피탈 펀드는 250인) 이하이고 공모를 하지 않는(그리고 현재 공모 계획도 없는) 발행자는 투자회사 정의에서 제외된다. (A) **회사에 의한 실질소유는 1인의 실질소유로 본다.** 다만 그 회사가 발행자의 의결권 있는 증권의 `10%` 이상을 보유하고, (이 항 또는 (7)항의 예외가 없었더라면) 투자회사에 해당했을 경우에는, 그 실질소유를 **그 회사의 발행 증권 보유자들의 소유**로 본다. + +- **쉽게 말하면.** look-through라는 발상의 **뿌리**다. 원칙은 "회사 하나 = 사람 하나(1인)". 그런데 예외가 붙는다 --- 그 회사가 펀드 지분을 `10%` 이상 쥐고 있고 그 자체가 (사모펀드 예외가 없었다면) 투자회사였을 법인이라면, 그 회사를 **꿰뚫어 그 뒤 보유자들을 센다.** 즉 "펀드가 펀드를 통해 인원 제한을 우회"하는 것을 막는 장치가 여기서 처음 명문화됐고, SEC가 이를 "Look-Through Provision"이라 부른다(§1.2 IC-22597 §I.B). **단, 이 `10%`·100인 규칙은 §3(c)(1)(100인 펀드)의 카운팅 기준이다.** 우리 프로젝트가 기대는 §3(c)(7)(QP 펀드, R3)에는 **숫자 상한이 없고**("QP 전원 소유"만), QP 펀드에서의 실제 look-through 트리거는 §3.4 Rule 2a51-3(급조 회사)·§3.3 statute (iii)(신탁)·§3.8 Rule 501(a)(8)(AI entity)이다. §3(c)(1)(A)는 A-09 재귀가 **개념적으로 상속받은 "회사를 뚫어 보유자를 센다"의 원형**이자, "그 전원"을 독립적으로 자격이 확인된 owner node까지 전개한다(필요한 경우 자연인까지 내려간다)는 카운팅 논리의 근거다. 구현 규칙 17 C.F.R. §270.3c-1은 이 §3(c)(1)(A)의 `10%` 관통을 규칙 층위에서 운영화하며(§3(c)(1)·§3(c)(7) 상호 보유 시 단일 발행자 취급 방지 등), 본 프로젝트 신규 발행에서는 §3(c)(1) 자체가 적용되지 않으므로 3c-1의 세부 절차는 트리거되지 않는다. + +- **PASS/FAIL 반영.** 간접(Supporting) --- 직접 PASS/FAIL을 내리지 않는다. A-09가 **왜 재귀하는가**(회사를 뚫어 그 보유자를 본다)와 **무엇을 세는가**(궁극적으로 자격이 확인된 보유자 노드)의 개념적 근거를 제공한다. 실제 재귀 트리거·전원-충족 강제는 2a51-3·(iii)·501(a)(8)에서 나온다. + +- **ERC-3643 변환.** (직접 필드 없음) `ownershipGraph`를 자격 확인 노드까지(보수적으로는 자연인까지) 전개한다는 A-09 재귀의 설계 원리로만 작용. `entity.type == FUND_3C1`(매수인이 그 자체로 사모펀드)일 때만 §3.6 Rule 2a51-2의 산정 규칙과 연결되고, 신규 §3(c)(7) 발행 manifest에서는 비활성. + +--- + +### 3.6 17 C.F.R. § 270.2a51-2 — 매수인이 펀드·전환 구조일 때의 간접소유 산정 [🔗 ecfr.gov] + +- **조항**: 17 C.F.R. §270.2a51-2(a) --- ecfr.gov(/current/title-17/chapter-II/part-270/section-270.2a51-2). 인용 기준 2025 개정본. + +- **핵심 원문** (17 C.F.R. §270.2a51-2(a)): + +```text +(a) Beneficial ownership: General. Except as set forth in this section, +for purposes of sections 2(a)(51)(C) and 3(c)(7)(B)(ii) of the Act +[15 U.S.C. 80a-2(a)(51)(C) and -3(c)(7)(B)(ii)], the beneficial owners of +securities of an excepted investment company (as defined in section +2(a)(51)(C) of the Act [15 U.S.C. 80a-2(a)(51)(C)]) shall be determined in +accordance with section 3(c)(1) of the Act [15 U.S.C. 80a-3(c)(1)]. + — 17 C.F.R. §270.2a51-2(a) +``` + +- **한국어.** beneficial owner는 원칙적으로 ICA §3(c)(1)에 따라 산정한다. (이 규칙의 (b)~(e)는 §3(c)(7)(B)(ii)·§2(a)(51)(C)를 위한 **1996-10-11 기준 grandfather·control·consent 산정 특칙**으로, 어느 owning company의 증권을 1인 소유로 볼지 여부를 그 회사가 투자회사·excepted investment company인지, 발행자를 지배/피지배/공통지배하는지, 1996-10-11 당시 §3(c)(1)(A)로 그 보유자들의 소유로 간주됐는지에 따라 가른다.) + +- **쉽게 말하면.** "매수 주체 자체가 또 다른 펀드(excepted investment company)일 때 그 펀드의 소유자를 **어떻게 세느냐**"의 산정 규칙이다. 핵심은 §3.5의 §3(c)(1) 산정 방식을 빌려 온다는 것 --- **그러면 그 펀드의 보유자들이 다시 세어지므로**(간접소유 전개) A-09 재귀가 한 층 더 내려간다. 다만 이 규칙의 본체(특히 (b)~(e))는 **1996-10-11이라는 고정 기준일**을 축으로 한 전환·grandfather 처리라, 2024년 이후 **신규 §3(c)(7) 토큰 발행에는 대부분 적용되지 않는다.** A-09는 매수인이 `FUND_3C1`(그 자체로 사모펀드)로 식별될 때에 한해 이 산정 규칙을 켜고, 일반 운용사·SPV·가족회사·신탁 매수인에는 §3(c)(1)의 자연인 환원 원리만 쓴다. + +- **PASS/FAIL 반영.** 간접(조건부) --- 직접 자격을 판정하지 않고 *어떻게 세고 어디까지 뚫나*의 traversal 규칙을 제공한다. 따라서 PASS/FAIL은 위임 결과로 결정되며, 소유 그래프가 불완전해 산정 자체가 불가하면 `REVIEW_OWNERSHIP_GRAPH_INCOMPLETE`로 사람 검토에 보낸다. + +- **ERC-3643 변환.** `ownershipGraph` 전개 규칙 --- 각 노드가 entity면(그 entity가 자체 자격이 아니라면) 그 자식(beneficial owners)을 다시 노드로 펼쳐 자격 확인 노드까지 전개. `entity.type == FUND_3C1`이면 이 산정 규칙(1996-10-11 grandfather 포함)을 별도 플래그로 검토하되, 신규 발행 manifest에서는 비활성. A-09의 `evaluateLookThrough(...)` 재귀가 이 그래프를 탄다. + +--- + +### 3.6.1 Rule 2a51-3 vs Rule 2a51-2 — 두 규칙이 답하는 질문이 다르다 (혼동 주의) + +같은 "2a51"이라 붙어 있어 헷갈리기 쉽지만, 두 규칙은 **다른 질문**에 답한다. A-09 구현에서 둘을 섞으면 판정이 틀어진다. + +| 구분 | Rule 2a51-3 (§3.4) | Rule 2a51-2 (§3.6) | +| --- | --- | --- | +| 답하는 질문 | "이 **회사가** QP인가?" (자격 판정) | "이 excepted investment company의 **보유자를 어떻게 세나**?" (산정 방법) | +| 적용 대상 | §2(a)(51)(A)**(ii)·(iv) 회사** | **excepted investment company**(fund-of-funds, §2(a)(51)(C)) | +| 트리거 | `formedForSpecificPurpose`(급조) 또는 전원-QP 구제 경로 | 매수인이 그 자체로 사모펀드(`FUND_3C1`)일 때 | +| A-09에서의 역할 | **전원-충족 모드 스위치**(급조 회사) | **간접소유 전개 방법**(펀드층 카운팅) | +| 시점 성격 | 상시(신규 발행에 유효) | 대부분 1996-10-11 grandfather(신규엔 대개 N/A) | + +**요지.** 급조 SPV가 BUIDL-like 펀드를 사려 하면 → **2a51-3(a)** 가 켜져 "전원 QP 아니면 불가". 매수 주체가 또 다른 사모펀드라면 → **2a51-2** 가 켜져 "그 펀드 보유자를 §3(c)(1) 방식으로 다시 센다". 전자는 *모드*(얼마나 엄격히), 후자는 *방법*(어떻게 세어 내려가나)을 정한다. 대다수 신규 발행에서 실제로 작동하는 것은 2a51-3이고, 2a51-2는 fund-of-funds라는 특수 매수인에서만 켜진다. + +--- + +### 3.7 ICA § 2(a)(51)(C) — 매수인이 fund-of-funds일 때 pre-1996 보유자 consent (대개 N/A) [🔗 uscode.house.gov] + +- **조항**: 15 U.S.C. §80a-2(a)(51)(C) --- uscode.house.gov / govinfo.gov(발췌). + +- **핵심 원문** (15 U.S.C. §80a-2(a)(51)(C), 발췌): + +```text +The term "qualified purchaser" does not include a company that, but for +the exceptions provided for in paragraph (1) or (7) of section 80a-3(c) of +this title, would be an investment company (hereafter in this paragraph +referred to as an "excepted investment company"), unless all beneficial +owners of its outstanding securities (other than short-term paper), +determined in accordance with section 80a-3(c)(1)(A) of this title, that +acquired such securities on or before April 30, 1996 (hereafter in this +paragraph referred to as "pre-amendment beneficial owners"), and all +pre-amendment beneficial owners of the outstanding securities (other than +short-term paper) of any excepted investment company that, directly or +indirectly, owns any outstanding securities of such excepted investment +company, have consented to its treatment as a qualified purchaser. + — 15 U.S.C. §80a-2(a)(51)(C) (발췌) +``` + +- **한국어.** §3(c)(1)·§3(c)(7) 면제가 아니었다면 투자회사였을 회사("excepted investment company", 즉 다른 사모펀드)는, 1996-04-30 이전에 증권을 취득한 모든 beneficial owner(§3(c)(1)(A)로 산정, "pre-amendment beneficial owners")와 그 회사의 증권을 직간접 보유하는 다른 excepted investment company의 모든 pre-amendment beneficial owner가 **그 회사를 적격매수자로 취급하는 데 동의**하지 않는 한, 적격매수자에 포함되지 않는다. + +- **쉬운 설명.** "**펀드가 펀드를 사는**" 경우의 특칙 --- 매수 주체 자체가 또 다른 사모펀드면, *1996년 이전부터 있던 옛 투자자들의 동의*라는 추가 관문이 붙는다. 이는 1996년 NSMIA로 QP 개념이 신설될 때 이미 존재하던 펀드를 어떻게 처리할지 정한 **경과조치**라, 2024년 이후 신규 토큰 발행에는 사실상 적용되지 않는다. (참고로 §2(a)(51)(C) 말미는 (ii)·(iii)의 회사·신탁에 대해 "수탁자·이사·무한책임사원 전원의 만장일치 동의가 본 항의 동의로 간주된다"고 정한다.) A-09는 이 경로를 *인지*하되 기본 판정 흐름에서는 다루지 않는다. + +- **PASS/FAIL 반영.** 간접 ✕(배경) --- 신규 발행 전제에서 트리거되지 않으므로 기본 PASS/FAIL에 직접 반영하지 않는다. 다만 매수 주체가 excepted investment company로 식별되면 §12 Open Issue(OD-LT-5)로 라우팅해 A-01 제재 추적 그래프와의 관계를 별도 검토한다. + +- **ERC-3643 변환.** (기본 흐름 비적용) `entity.type == FUND_3C1` 식별 시 별도 consent 검증 플래그를 두되, 본 프로젝트 신규 발행 manifest에서는 비활성. + +--- + +### 3.8 17 C.F.R. § 230.501(a)(8) + Note 1 — 전원 지분권자가 AI인 entity (Track B) [🔗 ecfr.gov] + +- **조항**: 17 C.F.R. §230.501(a)(8) 및 Note 1 to paragraph (a)(8) --- ecfr.gov(/current/title-17/chapter-II/part-230/section-230.501). 인용 기준 2025 개정본. + +- **핵심 원문** (17 C.F.R. §230.501(a)(8) 및 Note 1): + +```text +(8) Any entity in which all of the equity owners are accredited investors. + +Note 1 to paragraph (a)(8): It is permissible to look through various +forms of equity ownership to natural persons in determining the accredited +investor status of entities under this paragraph (a)(8). If those natural +persons are themselves accredited investors, and if all other equity +owners of the entity seeking accredited investor status are accredited +investors, then this paragraph (a)(8) may be available. + — 17 C.F.R. §230.501(a)(8) 및 Note 1 +``` + +- **한국어.** (8) **모든 지분권자(equity owner)가 적격투자자인 entity.** [Note 1] 이 (a)(8)항에 따라 entity의 적격투자자 지위를 판정할 때 **다양한 형태의 지분 소유를 자연인까지 look-through**하는 것이 허용된다. 그 자연인들이 스스로 AI이고, 적격투자자 지위를 구하는 entity의 다른 모든 지분권자도 AI이면, 이 (a)(8)항을 쓸 수 있다. + +- **쉽게 말하면.** **Track B(R1 발행)의 look-through 근거**다. QP 쪽 Rule 2a51-3(b)와 **구조가 같다** --- "지분권자가 전부 AI면 그 entity도 AI". Note 1이 자연인까지 관통을 *permissible하게(허용)* 한다 --- 다만 **강제는 아니다**. equity owner가 이미 다른 AI 항목(은행·투자회사·$5M 초과 법인 등)에 해당하면 그 자체로 AI이므로 더 내려갈 필요가 없다. **한 명이라도 비-AI면 이 경로는 못 쓴다**(완전 look-through). 단, Rule 501(a)는 (a)(1)~(a)(13)에 *기관 자체로 AI가 되는 다른 경로*(은행·투자회사·자산 $5M 초과 법인 등)도 두므로, A-09의 (a)(8) 전원-look-through는 entity가 **그 다른 경로로 AI가 되지 못할 때** 쓰는 fallback이다. 이 차이가 §3.8.1에서 급조 처리의 R1/R3 비대칭으로 이어진다. + +- **PASS/FAIL 반영.** 직접 ○(Track B) --- R1 발행에서 (a)(8) entity의 PASS/FAIL을 직접 결정한다. 각 equity owner가 AI인지 확인해 전원 AI면 `lookThroughStatus=COMPLETED`. equity owner가 자연인이면 A-03, entity이면 A-08/A-03로 **그 entity 자체가 AI인지 먼저 판정**하고(은행·보험·투자회사·private BDC·$5M 초과 non-formed 법인 등은 그 자체로 AI → 종료), 그 AI 지위가 다시 소유자에 의존할 때에만 재귀한다. 1인이라도 비-AI면 `FAIL_AI_OWNER_NOT_ACCREDITED`, 자료 미완료면 `REVIEW_AI_LOOKTHROUGH_PENDING`. + +- **ERC-3643 변환.** `claim.basis = AI_ALL_EQUITY_OWNERS` → A-09가 각 equity owner가 AI인지 확인(entity owner가 자체 AI이면 그 노드에서 종료, 아니면 재귀). 전원 통과면 `lookThroughStatus=COMPLETED`, 확인된 비-AI면 `FAIL_AI_OWNER_NOT_ACCREDITED`, 자료 미완료면 `REVIEW_AI_LOOKTHROUGH_PENDING`. + +--- + +### 3.8.1 급조(formed for the specific purpose) 처리의 R1/R3 비대칭 — 왜 발행 쪽엔 회사식 구제가 없나 (혼동 주의) + +look-through를 두 Track에서 함께 다루다 보면 "급조 entity는 어느 쪽이든 전원 자격이면 통과"라고 뭉뚱그리기 쉽다. 그러나 **R1(AI)과 R3(QP)의 급조 처리는 근거 조문 구조가 달라 비대칭**이며, 이 차이가 실제 PASS/FAIL을 가른다. + +| 매수 주체 | R3 (QP) 급조 시 | R1 (AI) 급조 시 | +| --- | --- | --- | +| **회사 (ii)·(iv)** | Rule 2a51-3(a): 급조여도 **전원 QP면 통과**(구제 내장) | (a)(3)·(7)·(9)·(12) 등 *기관 자체* AI 경로는 조문이 "not formed for the specific purpose ..."를 요건으로 두어 **급조 entity는 그 경로 사용 불가**; **오직 (a)(8) 전원-AI로만 구제** | +| **신탁 (iii)** | statute (iii): 급조면 **치유 없이 (iii) 탈락**(회사식 구제 없음) | 신탁도 (a)(8) 전원-AI 경로로만 관통 | +| **자연인 (i)** | "형성" 대상 아님 --- 급조 개념 미적용 | 동일 | + +**요지 세 가지.** ① **R3 회사**는 Rule 2a51-3(a)가 "전원 QP면 인정"이라는 구제를 명문으로 내장한다. ② **R3 신탁**은 statute (iii) 자체가 "not formed for the specific purpose"를 요건화하므로, 급조면 (iii)에서 탈락하고 회사식 전원-QP 구제가 **없다.** ③ **R1(AI)** 쪽에서 기관 자체가 AI가 되는 여러 경로((a)(3) $5M 자산 법인 등)는 각기 "특정 목적으로 형성되지 않았을 것"을 요구하는 경우가 있어 급조 entity가 그 경로를 못 쓰고, 결국 **(a)(8) "지분권자 전원 AI"** 만이 급조 entity의 유일한 통과문이다. (참고로 Rule 501(e)의 purchaser 수 계산 규정은 *매수인 수 산정* 보조 규칙이지 급조 entity의 자격 근거가 아니다 --- 혼용 금지.) A-09는 이 비대칭을 모드 결정에서 반영한다 --- R3 회사 급조 → 전원-QP 모드(구제 가능), R3 신탁 급조 → 즉시 `FAIL`(치유 없음), R1 급조 → (a)(8) 전원-AI 모드. + +--- + +### 3.9 판례·발행문서 (Layer 3) — 급조·도관 판단과 정상회사 제외의 정책 근거 [🔗 sec.gov · govinfo.gov] + +- **조항**: SEC Release No. IC-22597, *Privately Offered Investment Companies*, 62 FR 17512 (1997-04-09) --- sec.gov(files/rules/final/ic-22597.txt). Rule 2a51-1·2a51-2·2a51-3을 채택한 문서. 보조로 SEC v. Ralston Purina Co., 346 U.S. 119 (1953) --- govinfo.gov. + +- **핵심 원문(정책 인용)** --- §1.2·§3.1의 verbatim 블록(IC-22597 §I.B look-through 목적, n.19 conduit)과 동일 출처. 요지 재확인: + +```text +To prevent circumvention of the [investor] limit, section 3(c)(1)(A) +(the "Look-Through Provision") requires, in some instances, that a fund +... "look through" certain companies ... that hold its voting securities +and count the company's security holders as beneficial owners ... + — SEC Release IC-22597, §I.B (62 FR 17512) +``` + +- **한국어·쉬운 설명.** A-09의 두 Track이 공유하는 *정책 논리*는 이 릴리스에서 확인된다. 세 해석 포인트: + + 1. **목적은 우회 방지.** look-through는 "*to prevent circumvention*"의 장치다(§I.B). 인원·자격 제한을 *간접적으로* 뚫는 것을 막는다. + 2. **표적은 도관(conduit).** 규제가 겨냥하는 것은 "*a conduit that was created to enable ... indirectly more than [the limit of] investors*"(n.19) --- 즉 제한 회피만을 위해 만들어진 껍데기다. 이것이 "**급조(formed for the specific purpose)**" 판단의 취지다. + 3. **operating company는 관통 대상이 아니다 --- 근거는 statute 자체.** 어느 회사가 펀드 지분을 보유해도, 그 회사가 (이 항 또는 (7)항 예외가 없었다면) **투자회사였을 법인이 아닌 한** §3(c)(1)(A)은 관통을 요구하지 않는다(§3.5 verbatim: "*and is or, but for the exception ... would be an investment company*"). 즉 정상 영업회사는 §3(c)(1)(A) 문언상 1인으로 세고 뚫지 않는다 --- 이는 판례가 아니라 **조문**에서 나온다. A-09도 `formedForSpecificPurpose = false`인 정상 회사엔 완전 look-through를 강제하지 않고 가족회사(ii) *구성 확인*으로 본다. + +- **PASS/FAIL 반영.** 간접(해석) --- 직접 PASS/FAIL을 내리지 않는다. 대신 *모드 선택*(전원-충족 vs 구성 확인)의 정책적 정당화를 제공한다 --- 도관 위험이 큰 구조일수록 깊게 뚫는다는 원칙. No-Action·판례는 SEC 비구속·사실관계 한정이므로 규칙이 아니라 정책 근거로만 쓴다. + +- **ERC-3643 변환.** (해석 레이어 --- 직접 필드 없음) `formedForSpecificPurpose` 트리거의 *해석 기준*으로만 작용. 회색지대 판정은 §12 OD-LT-6. + +> **해설.** Layer 3을 읽는 실익 --- 조문(Layer 1·2)만 보면 "왜 가족회사는 구성만 보고 신탁·급조회사는 전원을 보나?"가 자의적으로 보인다. IC-22597이 그 답을 준다: **도관 위험이 큰 구조일수록 깊게 뚫는다.** 가족회사는 친족이라는 실체가 있어 도관성이 낮고, 급조 회사는 정의상 도관이며, 신탁은 위탁자–수탁자 분리로 은닉 통로가 되기 쉬워 (i)(ii)(iv) 기준으로 본다. **Ralston Purina는 여기서 배경 원리일 뿐이다** --- Securities Act §4(a)(2) 사모 발행에서 투자자가 스스로 정보를 얻어 방어할 수 있는지("able to fend for themselves")라는 *상위 취지*를 보여줄 뿐, A-09의 구체적 look-through trigger나 operating company 취급의 **직접 근거는 아니다.** A-09의 직접 코딩 근거는 §2(a)(51)·Rule 2a51-3·Rule 501(a)(8)이고, operating company 취급은 §3(c)(1)(A)이다. + +--- + +### 3.10 Sub-요건 분해 매트릭스 — 조문이 묻는 사실 단위 + +각 조문이 결국 *어떤 사실*을 요구하는지를 원자 단위로 분해한다. A-09는 이 표의 각 칸이 입력 claim(`ownershipGraph` 및 그 플래그)으로 채워졌는지를 확인하고, 각 소유자 노드의 자격 판정(자연인 또는 자체 자격 entity)은 A-13/A-03·A-08에 위임하는 부품이다. + +| Sub-요건 | 출처 | 묻는 사실 | 입력 필드 | 미충족 시 코드 | +| --- | --- | --- | --- | --- | +| 매수 주체 유형 | §2(a)(51)(A) | 개인·가족회사·신탁·기타법인 중 무엇인가 | `entity.type` | (분류 → 트리거) | +| 급조 여부 | 2a51-3(a)·(iii) | 이 펀드 취득만을 목적으로 형성됐나 | `entity.formedForSpecificPurpose` | (트리거 → 모드) | +| 가족회사 자산 | §2(a)(51)(A)(ii) | investments `≥ $5M`인가 | `familyCompany.investmentsValue` | `FAIL_FAMILY_COMPOSITION_NOT_MET` | +| 가족회사 구성 | §2(a)(51)(A)(ii) | 친족 자연인 `≥ 2인`인가 | `familyCompany.relatedNaturalPersons` | `FAIL_FAMILY_COMPOSITION_NOT_MET` | +| 가족회사 소유 귀속 | §2(a)(51)(A)(ii) | 직·간접 소유가 가족관계자(+그 estate·foundation·charity·trust)에 귀속되나; 비가족 제3자 소유분 없나 | `familyOwnershipConfirmed`·`nonFamilyOwnerPresent`·`allowedFamilyVehicleConfirmed` | `REVIEW_FAMILY_OWNERSHIP_ATTRIBUTION`(확인 시 FAIL) | +| 신탁 급조 | §2(a)(51)(A)(iii) | 급조 신탁인가 | `trust.formedForSpecificPurpose` | `FAIL_FORMED_FOR_SPECIFIC_PURPOSE_NON_QP`(치유 없음) | +| 신탁 대상자 (수익자 아님) | §2(a)(51)(A)(iii) | 수탁자·의사결정권자가 (i)(ii)(iv) QP인가 (수익자·일반 BO는 대상 아님) | `trust.trusteeOrDecisionMaker` → A-13 | `FAIL_LOOKTHROUGH_OWNER_NOT_QUALIFIED` | +| 신탁 출연자 자격 | §2(a)(51)(A)(iii) | 각 위탁자·출연자가 (i)(ii)(iv) QP인가; (iii) 신탁 연쇄 주장 불가 | `trust.settlorsAndContributors[]` → A-13 | `FAIL_LOOKTHROUGH_OWNER_NOT_QUALIFIED` | +| 급조 회사 전원 QP | Rule 2a51-3(a) | 모든 beneficial owner가 QP인가 | `beneficialOwners[]` → A-13 | `FAIL_FORMED_FOR_SPECIFIC_PURPOSE_NON_QP` | +| 간접소유 산정 | Rule 2a51-2·§3(c)(1)(A) | entity 소유자를 자격 확인 노드까지 전개했나 | `ownershipGraph` | `REVIEW_OWNERSHIP_GRAPH_INCOMPLETE` | +| 재귀 깊이 | 운영 방어 | `MAX_DEPTH` 이내인가 | `config.MAX_DEPTH` | `REVIEW_LOOKTHROUGH_DEPTH_EXCEEDED` | +| 전원 AI(발행) | Rule 501(a)(8) | 각 equity owner가 AI인가(entity owner는 자체 AI 여부 우선) | `beneficialOwners[]` → A-03/A-08 | `FAIL_AI_OWNER_NOT_ACCREDITED` / `REVIEW_AI_LOOKTHROUGH_PENDING` | + +--- + +### 3.11 ERC-3643 · claim.basis 총정리 + +카테고리별 claim.basis와 look-through 모드, 출력을 총람한다. **"전원 통과"는 별도 basis(폐기된 `QP_ALL_BENEFICIAL_OWNERS`)가 아니라, 해당 하위 카테고리 + `lookThroughStatus=COMPLETED`로 표현**한다. (iv) $25M 재량운용 경로의 basis는 `QP_INSTITUTIONAL`이며 "기관"이라는 라벨은 쓰지 않는다. + +| 매수인 유형 | recipe | claim.basis | 핵심 필드 | look-through 모드 | 출력 | +| --- | --- | --- | --- | --- | --- | +| 가족회사(급조 아님) | R3 | `QP_FAMILY_COMPANY` | `investmentsValue`, `relatedNaturalPersons`, `familyOwnershipConfirmed`, `nonFamilyOwnerPresent=false`, `formedForSpecificPurpose=false` | 구성 + 소유 귀속 확인 | `COMPLETED` / `REVIEW_FAMILY_OWNERSHIP_ATTRIBUTION` | +| 신탁(급조 아님) | R3 | `QP_TRUST` | `trusteeOrDecisionMaker`, `settlorsAndContributors[]`, `formedForSpecificPurpose=false` | 수탁자·각 출연자 (i)(ii)(iv) 확인 (수익자 아님, (iii)연쇄 불가) | `COMPLETED` / `FAILED` | +| 신탁(급조) | R3 | `QP_TRUST`(탈락) | `trust.formedForSpecificPurpose=true` | 없음 --- 즉시 실패 | `FAIL_FORMED_FOR_SPECIFIC_PURPOSE_NON_QP` | +| 급조 회사 (ii)/(iv) | R3 | `QP_FAMILY_COMPANY` / `QP_INSTITUTIONAL` + `requireAllOwnersQP` | `formedForSpecificPurpose=true`, `beneficialOwners[]` | 전원-충족(AND) | `COMPLETED`(전원 QP) / `FAIL_FORMED_FOR_SPECIFIC_PURPOSE_NON_QP` | +| (iv) $25M / QIB 간주 | R3 | `QP_INSTITUTIONAL` / `QP_QIB`(A-08 직접) | --- | 불요(trivial pass) | `COMPLETED` | +| 전원-AI entity | R1 | `AI_ALL_EQUITY_OWNERS` | `beneficialOwners[]` | 각 owner AI 확인(entity는 자체 AI 우선) | `COMPLETED` / `FAIL_AI_OWNER_NOT_ACCREDITED` / `REVIEW_AI_LOOKTHROUGH_PENDING` | +| fund-of-funds | R3 | (§2(a)(51)(C) 배경) | `entity.type=FUND_3C1` | 신규 발행엔 대개 N/A | (OD-LT-5 검토) | + +--- + + +## §4 ② 입력 사실 — DEX가 읽는 데이터 + +> **무엇을 입력받나.** A-09는 *개별 자격 증명*을 직접 읽지 않는다 --- 그건 A-13(QP)·A-03(AI)이 자연인 단위로 읽는다. A-09가 읽는 것은 **지분 구조 그래프(`ownershipGraph`)와 그 모드 플래그**다. 그래프의 정확성(누가 실소유자인가, 친족·위탁자 관계가 사실인가)은 off-chain KYC·Trusted Issuer(Securitize)의 책임이며, 온체인 A-09는 서명된 그래프를 *다시 조사하지 않고* 그 위에서 재귀·전원-충족 AND·자연인 위임만 수행한다(§8·§10). + +### 4.1 본 부품이 판정하려면 어떤 증거가 필요한가 + +A-09가 `lookThroughStatus`를 확정하려면 네 종류의 사실이 필요하다. + +1. **매수 주체의 유형** --- 개인인가, 가족회사(ii)인가, 신탁(iii)인가, 기타 법인(iv)인가, 그 자체로 사모펀드(fund-of-funds)인가. 유형이 트리거를 가른다(§3.2.1). +2. **급조 여부** --- 이 펀드 취득만을 목적으로 형성됐는가. 회사면 전원-QP 모드로, 신탁이면 즉시 탈락으로 이어지는 핵심 플래그(§3.4·§3.3·§3.8.1). +3. **지분 구조 그래프** --- 직접 소유자 목록과, 각 소유자가 자연인인지 또 다른 entity인지. entity면 그 자식을 다시 펼친 재귀 그래프. +4. **각 자격 노드의 claim 참조** --- 자연인 또는 자체 자격 entity가 A-13/A-03·A-08이 읽을 QP/AI claim을 갖는지(값 자체는 그쪽이 판정; A-09는 참조만 모은다). + +가족회사(ii) 분기에서는 추가로 **investments 총액**과 **친족 자연인 수**가 필요하다(전원 개별 자격 대신 *구성*을 보므로). + +### 4.2 Data field — DEX가 실제로 읽는 항목 + +| 필드 | 타입 | 의미 | 출처 | +| --- | --- | --- | --- | +| `Manifest.fundExemption` | enum | `ICA_3C7`이면 Track A(QP), 아니면 Track B(AI) | Recipe/Manifest | +| `entity.id` | id | 매수 주체(법인·신탁) 식별자 | ONCHAINID | +| `entity.type` | enum | `FAMILY_COMPANY \| TRUST \| OTHER_COMPANY \| FUND_3C1` | KYC claim | +| `entity.formedForSpecificPurpose` | bool | 이 펀드 취득만을 목적으로 급조됐나 → 모드 트리거 | KYC/발행 실사 | +| `entity.claimBasis` | enum | `QP_FAMILY_COMPANY \| QP_TRUST \| QP_INSTITUTIONAL \| QP_QIB \| AI_ALL_EQUITY_OWNERS` | Trusted Issuer | +| `entity.beneficialOwners[]` | node[] | 직접 소유자 목록 --- 각 노드는 자연인 또는 또 다른 entity | KYC ownershipGraph | +| ┗ `owner.kind` | enum | `NATURAL \| ENTITY` | KYC | +| ┗ `owner.ownershipPct` | number | 지분율(간접소유 추적·partial 처리용) | KYC | +| ┗ `owner.qualificationClaim` | claim ref | 자연인이면 A-13/A-03이 읽을 QP/AI claim 참조 | Trusted Issuer | +| `familyCompany.investmentsValue` | money | §2(a)(51)(A)(ii) 자산 $5M 판정용(산정 자체는 Rule 2a51-1 = A-13 소관) | claim | +| `familyCompany.relatedNaturalPersons` | int | 친족 2인 이상 구성 확인용 | KYC | +| `familyCompany.familyOwnershipConfirmed` | bool | 직·간접 소유가 가족관계자(+그 estate·foundation·charity·trust)에 귀속됨 | 실사 | +| `familyCompany.nonFamilyOwnerPresent` | bool | 비가족 제3자 소유분 존재 여부(있으면 경로 파손 위험) | 실사 | +| `familyCompany.allowedFamilyVehicleConfirmed` | bool | 소유 vehicle이 조문 허용형(estate·foundation·charity·trust)인지 | 실사 | +| `trust.trusteeOrDecisionMaker` | node | §2(a)(51)(A)(iii) 수탁자·의사결정권자 (i)(ii)(iv) 대상 (수익자 아님) | KYC | +| `trust.settlorsAndContributors[]` | node[] | 각 위탁자·출연자 (i)(ii)(iv) 대상; (iii) 연쇄 불가 | KYC | +| `config.MAX_DEPTH` | int | 재귀 깊이 상한(순환·과복잡 방어) | 시스템 설정(값 미확정 --- §12 OD-LT-1) | + +**출력(부수효과).** A-09는 판정 후 `lookThroughStatus ∈ {COMPLETED, PENDING, FAILED}`를 세팅한다. A-13·A-03의 PASS 조건은 entity 매수인에 한해 **`lookThroughStatus = COMPLETED`** 를 AND 조건으로 건다. + +### 4.3 수집 경로 — 5단계 흐름 + +1. **매수 주체 식별(ONCHAINID).** 매수인의 `entity.id`와 `entity.type`을 KYC claim에서 읽는다. 자연인이면 A-09를 켜지 않고 A-13/A-03이 직접 판정. +2. **직접 자격 우선 확인.** 유형이 기타 법인(iv)이고 A-08이 (g)(1) QIB 간주·$25M 재량운용으로 *법인 자체* 자격을 확정하면, look-through **불요**(A-09 trivial pass). "자격을 구성원에게서 빌려 오는" 매수인만 다음 단계로. +3. **급조 플래그·유형 분기 확정.** `formedForSpecificPurpose`와 `entity.type`으로 모드를 정한다 --- 회사 급조→전원-QP(구제 가능), 신탁 급조→즉시 실패, 가족회사(급조 아님)→구성 확인, R1→(a)(8) 전원-AI. +4. **지분 구조 그래프 조립.** Trusted Issuer가 off-chain 실사로 `beneficialOwners[]`를 자격 확인 노드까지 전개해 서명한다. 중간 entity가 자체로 QP/AI이면 거기서 종료; 그 자격이 구성원에 의존하는 entity가 남아 있으면 그 자식을 다시 요청(보수적으로는 자연인까지). +5. **자격 노드 claim 참조 수집.** 각 자격 확인 노드(자연인 또는 자체 자격 entity)의 QP/AI claim 참조를 붙인다. 값 판정은 A-13/A-03·A-08에 위임하고, A-09는 그 결과를 모아 전원-충족 AND를 계산한다. + +### 4.4 갈래별 증거 예시 + +- **가족회사(ii).** investments $6M 평가서(산정 근거 = A-13 Rule 2a51-1) + 형제 3인의 친족관계 증빙 + **소유 귀속 확인**(소유가 그 형제/그 estate·foundation·charity·trust에 귀속, 비가족 제3자 지분 없음) + `formedForSpecificPurpose=false` 실사 결론. → *구성+귀속 확인*으로 통과, 개별 QP 불요. (제3자 지분이 섞이면 `REVIEW_FAMILY_OWNERSHIP_ATTRIBUTION`.) +- **신탁(iii).** 신탁계약서(급조 아님 확인) + 수탁자 신원·QP claim + 각 위탁자·출연자 신원·QP claim. → 수탁자·각 출연자가 (i)(ii)(iv) QP면 통과. 급조면 증빙 불문 즉시 탈락. +- **급조 SPV(ii)/(iv).** 설립 목적·시점 실사(급조 확인) + 전체 beneficial owner 명부 + 각자 QP claim. → 전원 QP면 2a51-3(a)로 통과, 1인이라도 비QP면 차단. +- **중첩 구조.** 회사 A를 회사 B가 100% 소유 → B가 자체로 QP/AI이면 거기서 종료; 아니면 B의 소유자 명부·claim까지 재귀로 요청해 각 노드 자격 확인 후 통과. +- **전원-AI entity(R1).** 지분권자 전원 명부 + 각자 AI claim. entity 지분권자가 자체 AI(은행·투자회사·$5M 초과 법인 등)이면 그 노드에서 종료; 아니면 Note 1에 따라(permissible) 관통해 확인. + +--- + +## §5 ③ 판정 로직 — 어떻게 `lookThroughStatus`가 결정되는가 + +> **핵심은 재귀(recursion)와 종착점(terminus).** A-09가 각 owner를 확인할 때 **재귀의 법적 종착점은 '자연인'이 아니라 '독립적으로 자격이 확인된 owner node'** 다. 자연인은 항상 그런 노드지만(A-03/A-13이 직접 판정), entity도 구성원과 무관하게 그 자체로 QP/AI이면((iv) $25M 재량운용·(g)(1) QIB 간주·은행·투자회사 등) 그 지점에서 종료한다 --- 조문 문언이 요구하는 것은 "각 beneficial owner가 QP/AI일 것"(Rule 2a51-3(a)·(b) "each beneficial owner ... is a qualified purchaser", Rule 501(a)(8) "all of the equity owners are accredited investors")이지 *항상 최종 자연인까지 내려갈 것*이 아니다. 자연인까지 추적하는 것은 **보수적 구현 정책**으로 채택할 수 있으나, 법리 설명에서는 "필요한 경우"로 낮춘다. 그 위에서 A-09는 ① 깊이·그래프를 방어하고 ② 자연인이면 직접 위임, ③ entity가 자체 자격이면 종료, ④ 아니면 유형별 look-through(신탁=수탁자·각 출연자, 가족회사=구성+소유 귀속, 급조회사·(a)(8)=각 owner 재귀)로 판정한다. + +### 5.0 판정 흐름 플로우차트 + +![그림 5.0 --- A-09 재귀 판정 로직: 깊이·그래프 방어 → 급조 신탁 즉시 탈락 → 모드 결정 → 소유자 순회(위임/재귀) → 전원-충족 AND → COMPLETED/FAILED](fig50.png) + +### 5.1 전체 흐름 (사람 말로) + +entity 매수인이 들어오면 A-09는 각 owner node가 요구 자격을 충족하는지 재귀로 확인한다. 순서는 다음과 같다. **(1) 방어** --- 재귀 깊이가 `MAX_DEPTH`를 넘거나(순환출자·과복잡 의심) 소유 그래프에 미식별 노드가 있으면, 차단이 아니라 **사람 검토(`REVIEW_*`)** 로 보낸다. **(2) 자연인 base case** --- 노드가 자연인이면 그 자격을 A-13(QP)/A-03(AI)에 직접 위임한다(재귀 종료). **(3) entity 독립 자격** --- entity가 *구성원과 무관하게* 그 자체로 QP((iv) $25M·QIB 간주)/AI(은행·보험·투자회사·private BDC·$5M 초과 non-formed 법인 등)이면, 더 내려가지 않고 그 지점에서 `COMPLETED`(look-through 불요). **(4) 유형별 look-through**(자격을 구성원에게서 빌려 오는 경우) --- ⓐ **신탁**은 *수익자(beneficialOwners)가 아니라* **수탁자·의사결정권자 + 각 위탁자·출연자**를 (i)(ii)(iv) 기준으로 확인하고(급조면 즉시 탈락), ⓑ **가족회사(비급조)** 는 자산·친족 구성뿐 아니라 **소유가 가족관계자(또는 그 estate·foundation·charity·trust)에 귀속**되는지 확인하며, ⓒ **급조 회사·(a)(8) entity** 는 각 beneficial owner가 자격인지 재귀로 확인한다(각 owner가 자체 자격이면 그 안에서 종료). **(5) 판정** --- 전원-충족이 필요한 분기에서 전원 자격이면 `COMPLETED`, 첫 비자격에서 즉시 차단(short-circuit); 데이터 미비·소유 귀속 불명은 `REVIEW_*`. + +### 5.2 Pseudocode + 단계별 해설 + +```text +# 재귀의 종착점 = '독립적으로 자격이 확인된 owner node'. +# 자연인은 항상 그런 노드(A-03/A-13 직접 판정)이지만, entity도 자체로 QP/AI이면 +# (예: (iv) $25M, (g)(1) QIB 간주, 은행) 더 내려가지 않고 종료한다. +# 자연인까지 추적하는 것은 보수적 구현 정책일 뿐, 2a51-3/501(a)(8) 문언이 강제하는 바는 아니다. + +function evaluateNodeQualified(node, recipe, depth): + # ── 0. 방어 ───────────────────────────────────────── + if depth > config.MAX_DEPTH: return REVIEW_LOOKTHROUGH_DEPTH_EXCEEDED + if not isComplete(node.ownershipData): return REVIEW_OWNERSHIP_GRAPH_INCOMPLETE + + # ── 1. 자연인 = base case (항상 독립 판정) ─────────── + if node.kind == NATURAL: + return COMPLETED if checkQualification(node, recipe) else NOT_QUALIFIED # QP→A-13 / AI→A-03 + + # ── 2. entity가 '자체로' 자격이면 종료 (look-through 불요) ── + # 구성원과 무관하게 성립하는 독립 자격: + # R3(QP): (iv) $25,000,000 재량운용 · (g)(1) QIB 간주 → A-08/A-13 직접 판정 + # R1(AI): 은행·보험·registered IC·private BDC·$5M 초과 non-formed 법인 등 → A-08/A-03 + # ★ 단, 신탁이 (iii)가 아니라 (iv) "$25M any person"으로 독립 QP를 주장하면 회색지대(§12 OD-LT-7) + # → 자동 PASS 금지, 변호사 확인용 REVIEW. (claimBasis==QP_TRUST 일반 신탁은 아래 3단계로.) + if node.type == TRUST and node.claimBasis == QP_INSTITUTIONAL: + return REVIEW_TRUST_QP_IV_INDEPENDENT + if recipe == R3 and qualifiesIndependentlyAsQP(node): return COMPLETED + if recipe == R1 and qualifiesIndependentlyAsAI(node): return COMPLETED + + # ── 3. 유형별 look-through (자격을 구성원에게서 빌려 오는 경우) ── + if node.type == TRUST: + return evaluateTrust(node, recipe, depth) + + if recipe == R3 and node.type == FAMILY_COMPANY and not node.formedForSpecificPurpose: + return evaluateFamilyCompany(node) + + # 급조 회사((ii)/(iv), 2a51-3(a)) 또는 R1 (a)(8) entity → 각 beneficial owner가 자격이어야 + if requireAllOwners(node, recipe): + for owner in node.beneficialOwners: + res = evaluateNodeQualified(owner, recipe, depth + 1) # ★ owner가 자체 자격이면 그 안에서 종료 + if res in {REVIEW_LOOKTHROUGH_DEPTH_EXCEEDED, REVIEW_OWNERSHIP_GRAPH_INCOMPLETE, + REVIEW_FAMILY_OWNERSHIP_ATTRIBUTION, REVIEW_AI_LOOKTHROUGH_PENDING}: + return res # 검토 사유는 위로 전파 + if res != COMPLETED: + if node.formedForSpecificPurpose: return FAIL_FORMED_FOR_SPECIFIC_PURPOSE_NON_QP + elif recipe == R1: return FAIL_AI_OWNER_NOT_ACCREDITED + else: return FAIL_LOOKTHROUGH_OWNER_NOT_QUALIFIED + return COMPLETED + return PARTIAL_REVIEW # 비-전원-충족 잔여 분기 미확정(§12 OD-LT-2) + + +# ── 신탁 전용: §2(a)(51)(A)(iii) ───────────────────────── +function evaluateTrust(node, recipe, depth): + if node.formedForSpecificPurpose: + return FAIL_FORMED_FOR_SPECIFIC_PURPOSE_NON_QP # 급조 = 치유 없음(회사식 구제 없음) + # 보는 대상은 '수익자/beneficialOwners'가 아니라 '수탁자·의사결정권자 + 각 위탁자·출연자' + requiredPersons = [node.trust.trusteeOrDecisionMaker] + node.trust.settlorsAndContributors + for p in requiredPersons: + if claimsUnderClauseIII(p): # (iii) 신탁으로 연쇄 자격 주장 금지 + return FAIL_LOOKTHROUGH_OWNER_NOT_QUALIFIED # → 허용 clause는 (i)(ii)(iv)뿐 + res = evaluateNodeQualified(p, recipe, depth + 1) # p가 (i)자연인 / (ii)가족회사 / (iv)$25M + if res in {REVIEW_LOOKTHROUGH_DEPTH_EXCEEDED, REVIEW_OWNERSHIP_GRAPH_INCOMPLETE, + REVIEW_FAMILY_OWNERSHIP_ATTRIBUTION}: + return res + if res != COMPLETED: + return FAIL_LOOKTHROUGH_OWNER_NOT_QUALIFIED + return COMPLETED + # 특수: 신탁이 (iii)가 아니라 (iv) "$25,000,000 재량운용 any person"으로 독립 주장하는 경우 + # → 위 2단계 선차단(node.type==TRUST & claimBasis==QP_INSTITUTIONAL)에서 + # REVIEW_TRUST_QP_IV_INDEPENDENT로 보낸다(자동 PASS 금지, §12 OD-LT-7) + + +# ── 가족회사 전용: §2(a)(51)(A)(ii) ───────────────────── +function evaluateFamilyCompany(node): + fc = node.familyCompany + if fc.investmentsValue < USD(5_000_000): return FAIL_FAMILY_COMPOSITION_NOT_MET # 자산 < $5M + if fc.relatedNaturalPersons < 2: return FAIL_FAMILY_COMPOSITION_NOT_MET # 친족 < 2인 + # 친족 2인만으론 부족 — 소유(직·간접)가 '가족관계자 + 그 estate/foundation/charity/trust'에 귀속되어야 + if (not fc.familyOwnershipConfirmed) or fc.nonFamilyOwnerPresent + or (not fc.allowedFamilyVehicleConfirmed): + return REVIEW_FAMILY_OWNERSHIP_ATTRIBUTION # 비가족 제3자 소유분 등 → 검토(확인 결과 FAIL 가능) + return COMPLETED # 구성 + 소유 귀속 확인 → 개별 QP 불요 +``` + +**단계별 해설.** + +- **0. 방어 (앞단).** 판정보다 방어가 먼저다. 데이터 미비(그래프 불완전)·과복잡(깊이 초과)을 자동 `FAIL`로 처리하면 정상 거래까지 막으므로, 이 둘은 **`REVIEW_*`** 로 빼서 사람 검토·Trusted Issuer 보완으로 보낸다. 검토 사유는 재귀 스택을 따라 **위로 전파**된다. +- **1. 자연인 base case.** 노드가 자연인이면 자격 값을 A-13(QP)/A-03(AI)에 위임한다 --- A-09는 자격 값을 *스스로 계산하지 않는다*. 자연인은 재귀의 자연스러운 종료점이다. +- **2. entity 독립 자격 (핵심 정정).** entity라고 무조건 더 내려가지 않는다. 그 entity가 *구성원과 무관하게* 자체로 QP((iv) $25M 재량운용·(g)(1) QIB 간주)/AI(은행·보험·투자회사·private BDC·$5M 초과 non-formed 법인 등)이면, A-08/A-13(또는 A-08/A-03)이 그 자격을 확정하는 즉시 `COMPLETED`로 종료한다. **재귀의 법적 종착점은 '자연인'이 아니라 '독립적으로 자격이 확인된 노드'** 다(Rule 2a51-3(a)·(b), 501(a)(8) 문언). 자연인까지 내려가는 것은 보수적 구현 정책일 뿐이다. +- **3-신탁 (정정).** 신탁은 *일반 beneficial owner(수익자)* 를 순회하지 않는다. §2(a)(51)(A)(iii)이 보는 대상은 **수탁자·의사결정권자와 각 위탁자·출연자**이며, 이들은 **(i)(ii)(iv)로만** 자격을 얻을 수 있다 --- 수탁자·출연자가 또 다른 **(iii) 신탁으로 연쇄 자격을 주장하는 경로는 차단**된다. 급조 신탁은 순회 이전에 즉시 `FAIL`(치유 없음, §3.3·§3.8.1). +- **3-가족회사 (정정).** `relatedNaturalPersons >= 2` 만으로는 부족하다. §2(a)(51)(A)(ii)은 회사가 investments `≥ $5M`을 보유하고 **직·간접 소유가 가족관계자(또는 그 estate·foundation·charity·trust)에 귀속**될 것을 요구한다. 비가족 제3자 소유분이 있으면(`nonFamilyOwnerPresent`) 가족회사 경로가 깨질 수 있어 `REVIEW_FAMILY_OWNERSHIP_ATTRIBUTION`로 검토(확인 시 `FAIL`). +- **3-급조회사·(a)(8) (전원-충족).** 급조 회사(2a51-3(a))·(a)(8) entity는 각 beneficial owner가 자격이어야 한다. 각 owner를 재귀로 확인하되, **owner가 자체 자격이면 그 노드에서 종료**한다(자연인 강제 아님). 첫 비자격에서 즉시 차단(short-circuit) --- 급조회사는 `FAIL_FORMED_FOR_SPECIFIC_PURPOSE_NON_QP`, R1(a)(8)은 `FAIL_AI_OWNER_NOT_ACCREDITED`. +- **비-전원-충족 잔여.** 위 어디에도 안 걸리는 부분 추적 분기는 **미확정**이라 `PARTIAL_REVIEW`로 빼 §12 OD-LT-2에 둔다. + +> **쉽게 말하면.** A-09는 양파를 까는 함수지만, **껍질(entity)이 그 자체로 자격을 갖추면 굳이 더 안 깐다.** 예컨대 소유자가 "$25M을 재량 운용하는 법인"이나 은행이면 그 자체로 QP/AI이니 거기서 멈춘다 --- *반드시 맨 안쪽 사람까지* 가야 하는 건 아니다(그건 보수적으로 그렇게 구현할 수 있을 뿐). 진짜 알맹이(사람)가 나오면 A-13/A-03에게 "이 사람 자격 돼?"라고 묻는다. **신탁**은 수익자가 아니라 *수탁자와 돈을 넣은 사람들*을 보고, 그들이 (i)(ii)(iv) 중 하나로 자격이 있어야 하며(신탁을 또 끼워 넣는 건 불가), **급조 신탁**이면 까 보기도 전에 잘라 낸다. **가족회사**는 "가족 2명 + 자산 $5M"만이 아니라 *소유가 정말 그 가족(과 그들의 재단·신탁 등)에게 귀속되는지* 까지 확인한다 --- 모르는 제3자 지분이 섞여 있으면 검토로 뺀다. + +### 5.3 Threshold 매트릭스 — 포함성(> vs ≥) 주의 + +| 기준 | 조문 | 임계값 | 경계 처리 | 근거 | +| --- | --- | --- | --- | --- | +| 가족회사 자산 | §2(a)(51)(A)(ii) | investments `≥ $5,000,000` | 정확히 $5M = **충족**(not less than = 이상) | "not less than" | +| 가족회사 구성 | §2(a)(51)(A)(ii) | 친족 자연인 `≥ 2인` | 정확히 2인 = 충족 | "2 or more" | +| (iv) 재량운용 | §2(a)(51)(A)(iv) | `≥ $25,000,000` | 정확히 $25M = 충족(A-13 판정) | "not less than" | +| §3(c)(1) 관통 | §3(c)(1)(A) | 의결권 `10% 이상` 보유 시 관통 | 정확히 10% = 관통 대상 | "10 per centum or more" | +| 재귀 깊이 | 운영 | `depth > MAX_DEPTH`이면 REVIEW | 초과(**>**, strict)에서만 검토 | 운영 방어 | + +**주의.** 조문의 자격 임계값은 모두 "not less than"(이상, `≥`)이라 경계값 자체가 충족이다. 반면 재귀 깊이 방어는 상한 *초과*(`>`, strict)에서만 검토로 보낸다 --- `MAX_DEPTH`와 정확히 같은 깊이는 아직 정상 범위. `≥`와 `>`를 뒤섞으면 경계 케이스가 틀어진다. + +### 5.4 Time-of-acquisition — 블록체인의 어느 시점을 "취득"으로 보나 + +§3(c)(7)(A)는 "*at the time of acquisition*"에 QP일 것을 요구한다. 토큰 환경에서 "취득 시점"은 **이전(transfer)이 확정되는 블록**이며, A-09의 look-through는 그 이전을 **허가하기 직전**(pre-trade 게이트)에 평가돼야 한다. ERC-3643에서는 `transfer`/`canTransfer` 시점에 온체인 검증이 걸리므로, A-09는 그 훅에서 `lookThroughStatus=COMPLETED`를 요구한다. 취득 이후 소유 구조가 바뀌면(예: leaf 자연인이 자격을 잃음) 그 시점의 후속 이전에서 재평가된다 --- A-09 자체는 STATELESS이므로 같은 그래프 입력이면 언제든 같은 결과를 준다. + +### 5.5 비결정성을 결정성으로 — 본 부품 구현의 본질 + +"이 회사의 각 소유자가 자격이 되는가(자체 자격 entity는 그 지점에서 종료)"는 원래 *사실관계 조사*(누가 실소유자인가, 관계가 사실인가)라는 **비결정적** 질문이다. A-09는 이 조사를 온체인에서 하지 않는다. 대신 Trusted Issuer가 off-chain에서 조사·서명한 **결정적 입력**(`ownershipGraph` + 서명된 자연인 claim) 위에서, **결정적 함수**(재귀 순회 + 전원-충족 AND + 위임)만 실행한다. 즉 A-09는 "비결정적 사실 판단"을 Trusted Issuer로 밀어내고, 자신은 "서명된 구조를 규칙대로 접는" 결정적 계산만 맡는다(§8 Pattern B). 이 분리가 온체인 검증을 재현 가능·감사 가능하게 만든다. + +--- + + +## §6 ④ 거절·예외 처리 — 검사에 실패하면 어떻게 되는가 + +> **세 갈래 출력.** A-09의 출력은 단순 PASS/FAIL이 아니라 세 갈래다 --- 통과(`COMPLETED`), 확정적 차단(`FAIL_*`), 판단 보류(`REVIEW_*`). 이 절은 각 코드가 언제 발생하고 어떻게 처리되며 어디로 라우팅되는지, 그리고 매수인에게 무엇을 노출하고 내부에는 무엇을 기록하는지를 정리한다. + +### 6.1 전체 흐름 (사람 말로) + +재귀가 끝나면 결과는 세 부류로 수렴한다. **확정 차단(`FAIL_*`)** 은 추적된 사실로 비자격이 *확인*된 경우다 --- 거래를 막고 사유 코드를 Operator Layer(§11)에 넘겨 매수인에게 통지한다. 전원-충족 모드에서는 첫 비자격 소유자에서 즉시 멈춘다(short-circuit). **판단 보류(`REVIEW_*`)** 는 데이터가 부족해 판정 자체가 불가능한 경우다 --- 자동 거절하지 않고 off-chain 사람 검토 큐로 보내 Trusted Issuer에게 그래프 보완을 요청한다. **통과(`COMPLETED`)** 는 요구되는 소유자 전원(또는 구성 요건)이 충족된 경우이며, A-13/A-03의 AND 조건을 만족시킨다. + +### 6.2 Failure / Review codes + +| Code | 종류 | 언제 발생하나 | 처리 | 근거 | +| --- | --- | --- | --- | --- | +| `FAIL_LOOKTHROUGH_OWNER_NOT_QUALIFIED` | FAIL | 전원-충족 모드(R3)에서 확인된 소유자 1인 이상이 비-QP | 거래 차단(short-circuit) | 2a51-3(a)·(iii) | +| `FAIL_AI_OWNER_NOT_ACCREDITED` | FAIL | Track B(R1)에서 확인된 equity owner 1인 이상이 비-AI | 거래 차단(short-circuit) | Rule 501(a)(8) | +| `REVIEW_AI_LOOKTHROUGH_PENDING` | REVIEW | Track B(R1) AI look-through 자료 미완료(아직 판정 불가) | off-chain 사람 검토 + 보완 | Rule 501(a)(8) | +| `FAIL_FORMED_FOR_SPECIFIC_PURPOSE_NON_QP` | FAIL | ⓐ급조 회사인데 전원 QP 아님, 또는 ⓑ급조 신탁(즉시 탈락, 치유 없음) | 거래 차단 | Rule 2a51-3(a)·§2(a)(51)(A)(iii) | +| `FAIL_FAMILY_COMPOSITION_NOT_MET` | FAIL | 가족회사 주장인데 자산 `< $5M` 또는 친족 `< 2인` | 거래 차단 | §2(a)(51)(A)(ii) | +| `REVIEW_FAMILY_OWNERSHIP_ATTRIBUTION` | REVIEW | 가족회사 자산·친족은 충족하나 소유 귀속이 불명(비가족 제3자 소유분 등) | off-chain 사람 검토(확인 시 FAIL) | §2(a)(51)(A)(ii) | +| `REVIEW_LOOKTHROUGH_DEPTH_EXCEEDED` | REVIEW | 재귀가 `MAX_DEPTH` 초과(순환출자·과복잡 의심) | off-chain 사람 검토 | 운영 방어 | +| `REVIEW_OWNERSHIP_GRAPH_INCOMPLETE` | REVIEW | beneficial owner 일부 미식별(그래프 불완전) | off-chain 사람 검토 + Trusted Issuer 보완 | Rule 2a51-2·§3(c)(1)(A) | +| `REVIEW_TRUST_QP_IV_INDEPENDENT` | REVIEW | 신탁이 (iii)가 아니라 (iv) "$25M 재량운용 any person"으로 독립 QP를 주장(회색지대) | off-chain 변호사 검토(허용 구조 확인 시 `QP_INSTITUTIONAL` 인정) | §2(a)(51)(A)(iv)·§12 OD-LT-7 | +| `PARTIAL_REVIEW` | REVIEW | 비-전원-충족(부분 추적) 분기에서 소수 비충족 소유자 발생 | 처리 정책 미확정 → 검토 | §12 OD-LT-2 | + +**코드 정정 --- 'PENDING' 분리.** 종전 `FAIL_AI_LOOKTHROUGH_PENDING`은 *실패인지 대기인지* 모호했다. 이제 **확인된 비-AI = `FAIL_AI_OWNER_NOT_ACCREDITED`(차단)**, **자료 미완료 = `REVIEW_AI_LOOKTHROUGH_PENDING`(검토)** 로 나눈다. QP측도 대칭 --- 확인된 비-QP = `FAIL_LOOKTHROUGH_OWNER_NOT_QUALIFIED`, 그래프 미완료 = `REVIEW_OWNERSHIP_GRAPH_INCOMPLETE`. + +**FAIL 하나에 두 원인 --- `FAIL_FORMED_FOR_SPECIFIC_PURPOSE_NON_QP`.** 이 코드는 두 상황을 함께 덮는다 --- (ⓐ) 급조 *회사*가 전원 QP를 채우지 못한 경우와, (ⓑ) 급조 *신탁*이 statute (iii)에서 즉시 탈락한 경우다. 둘은 근거 조문이 다르지만(전자 2a51-3(a), 후자 (iii)) 결과가 "급조 구조 + 자격 미충족 → 차단"으로 같아 코드를 공유한다. 내부 로그에는 어느 원인인지(`reason: company_all_qp_failed` vs `reason: trust_formed_for_purpose_no_cure`)를 남겨 구분한다. + +### 6.3 Manual Review Path — `REVIEW_*` 처리 + +`REVIEW_*`는 "아직 판정 불가"이지 "거절"이 아니다. 처리 절차: + +1. **큐 적재.** 해당 매수 요청을 off-chain Manual Review Queue에 넣고 사유 코드·재귀 스택 위치를 첨부한다. +2. **보완 요청.** `REVIEW_OWNERSHIP_GRAPH_INCOMPLETE`면 Trusted Issuer(Securitize)에게 미식별 노드의 실소유자 확정을 요청한다. `REVIEW_LOOKTHROUGH_DEPTH_EXCEEDED`면 구조가 실제로 순환인지·정상적으로 깊은지 수동 판정. +3. **재평가.** 그래프가 보완되면 A-09를 다시 실행한다(STATELESS이므로 동일 입력이면 동일 결과, 보완 입력이면 갱신 결과). +4. **종결.** 보완 후 전원 자격이면 `COMPLETED`, 비자격 확인이면 해당 `FAIL_*`(비-QP → `FAIL_LOOKTHROUGH_OWNER_NOT_QUALIFIED`, 비-AI → `FAIL_AI_OWNER_NOT_ACCREDITED`, 가족 소유 귀속 불충족 → `FAIL_FAMILY_COMPOSITION_NOT_MET`). + +### 6.4 Error message — 매수인 노출용 vs 내부 기록용 분리 + +매수인에게는 **최소한의 사유**만 노출하고(프라이버시·상대 소유자 정보 보호), 내부 로그에는 **디버깅·감사에 필요한 상세**를 남긴다. + +| Code | 매수인 노출용(간결) | 내부 기록용(상세) | +| --- | --- | --- | +| `FAIL_LOOKTHROUGH_OWNER_NOT_QUALIFIED` | "지분 소유자 중 자격 요건을 충족하지 못한 분이 있어 거래가 제한되었습니다." | 어느 노드(경로)·어느 위임(A-13/A-03)에서 실패했는지, short-circuit 지점 | +| `FAIL_FORMED_FOR_SPECIFIC_PURPOSE_NON_QP` | "매수 주체 구조상 요건을 충족하지 못했습니다." | 급조 회사 전원-QP 실패인지 급조 신탁 (iii) 탈락인지(`reason` 필드) | +| `FAIL_FAMILY_COMPOSITION_NOT_MET` | "가족회사 요건(자산·구성)을 충족하지 못했습니다." | investments 실제값 vs $5M, 친족 수 vs 2 | +| `REVIEW_FAMILY_OWNERSHIP_ATTRIBUTION` | "가족회사 소유 구조 확인이 진행 중입니다." | 자산·친족은 충족; 비가족 제3자 소유분·허용 vehicle 여부 확인 중 | +| `REVIEW_OWNERSHIP_GRAPH_INCOMPLETE` | "지분 구조 확인이 진행 중입니다. 추가 자료가 필요할 수 있습니다." | 미식별 노드 ID·요청한 보완 항목·Trusted Issuer 티켓 | +| `REVIEW_LOOKTHROUGH_DEPTH_EXCEEDED` | "지분 구조 검토가 진행 중입니다." | 도달 깊이·의심 순환 경로·`MAX_DEPTH` 값 | +| `REVIEW_TRUST_QP_IV_INDEPENDENT` | "매수 주체(신탁) 자격 구조를 확인 중입니다." | 신탁이 (iv) $25M 독립 QP 주장; (iii) 경로 아님, 변호사 확인 대기 | + +**원칙.** 매수인 노출 메시지는 *다른 소유자의 자격/신원*을 드러내지 않는다("어느 소유자가 왜 탈락했는지"를 상세히 알리면 타인의 KYC 정보가 유출될 수 있다). 상세는 내부 감사 로그에만. + +--- + +## §7 ⑤ 테스트 케이스 — 스펙이 제대로 작동하는지 검증 + +아래 케이스가 모두 기대대로 동작해야 스펙이 완성(complete)이다. 가족회사 구성 경계·**소유 귀속**, 신탁 대상자(수탁자·출연자) 요건, **급조 신탁 즉시 탈락**, 급조 회사 우회, **entity 소유자 자체 자격 종료**, 중첩 재귀, (a)(8) 전원 AI, 데이터 미비 처리, R1+R3 AND를 함께 검증한다. + +| # | 입력 시나리오 | Recipe | 기대 결과 | +| --- | --- | --- | --- | +| 1 | 가족회사, 자산 $6M, 형제 3인 소유, 급조 아님 | R3 | `COMPLETED`(구성 확인, 개별 QP 불요) | +| 2 | 가족회사 주장, 자산 $4M | R3 | `FAIL_FAMILY_COMPOSITION_NOT_MET` | +| 3 | 가족회사, 자산 정확히 $5M, 형제 정확히 2인 | R3 | `COMPLETED`(경계 = 충족) | +| 4 | 'BUIDL 매수용' 급조 LLC, 소유자 2인 모두 QP | R3 | `COMPLETED`(Rule 2a51-3(a) 전원 QP) | +| 5 | 'BUIDL 매수용' 급조 LLC, 소유자 중 1인 비QP | R3 | `FAIL_FORMED_FOR_SPECIFIC_PURPOSE_NON_QP` | +| 6 | 신탁, 수탁자 QP + 위탁자 2인 모두 QP, 급조 아님 | R3 | `COMPLETED`(§2(a)(51)(A)(iii)) | +| 7 | 신탁, 위탁자 1인이 비QP, 급조 아님 | R3 | `FAIL_LOOKTHROUGH_OWNER_NOT_QUALIFIED` | +| 8 | **급조 신탁, 수탁자·위탁자 전원 QP** | R3 | **`FAIL_FORMED_FOR_SPECIFIC_PURPOSE_NON_QP`**(치유 없음) | +| 9 | 회사 A를 회사 B가 100% 소유, B의 소유자 전원 QP | R3 | `COMPLETED`(재귀 1단계 후 전원 통과) | +| 10 | 기타 법인, 재량운용 $30M((iv)) | R3 | `COMPLETED`(A-13 직접 자격, look-through 불요) | +| 11 | (a)(8) entity, equity owner 전원 AI | R1 | `COMPLETED` | +| 12 | (a)(8) entity, equity owner 1인이 확인된 비AI | R1 | `FAIL_AI_OWNER_NOT_ACCREDITED` | +| 12b | (a)(8) entity, AI 자료 미완료(판정 불가) | R1 | `REVIEW_AI_LOOKTHROUGH_PENDING` | +| 13 | entity 매수인, beneficial owner 일부 미식별 | R3 | `REVIEW_OWNERSHIP_GRAPH_INCOMPLETE` | +| 14 | 순환출자 의심으로 재귀 깊이 초과 | R3 | `REVIEW_LOOKTHROUGH_DEPTH_EXCEEDED` | +| 15 | BUIDL: 발행 시 entity 매수인이 AI이자 QP 양쪽 충족 | R1+R3 | `COMPLETED`(양 Track AND) | +| 16 | BUIDL: QP look-through는 통과하나 AI 한 명 미달 | R1+R3 | `FAIL`(AND 중 한쪽 실패 → 차단) | +| 17 | 급조 LLC, beneficial owner가 재량운용 $30M 법인((iv) QP) 1곳 | R3 | `COMPLETED`(owner가 자체 QP → **자연인까지 안 내려감**) | +| 18 | 가족회사, 자산 $6M·형제 2인, 그러나 지분 30%를 무관한 제3자가 보유 | R3 | `REVIEW_FAMILY_OWNERSHIP_ATTRIBUTION`(확인 시 FAIL) | +| 19 | 신탁, 수탁자·출연자가 자격을 (iii) 다른 신탁으로만 주장 | R3 | `FAIL_LOOKTHROUGH_OWNER_NOT_QUALIFIED`((i)(ii)(iv)만 허용) | +| 20 | 신탁이 (iii) 아닌 (iv) "$25M 재량운용"으로 독립 주장 | R3 | `REVIEW_TRUST_QP_IV_INDEPENDENT`(자동 PASS 아님, 회색지대 → §12 OD-LT-7) | + +### 7.1 Deep-dive — Test 3: 가족회사 경계값(정확히 $5M / 정확히 2인) + +§2(a)(51)(A)(ii)는 "owns not less than $5,000,000"과 "2 or more natural persons"다. **not less than = 이상(`≥`)** 이므로 investments가 **정확히 $5,000,000이면 충족**이고, 친족이 **정확히 2인이면 충족**이다. 경계에서 `>` (초과)로 오해하면(예: "$5M *초과*라야" 또는 "*3인 이상*이라야") 정당한 매수인을 오탐 차단한다. A-09는 `investmentsValue >= USD(5_000_000)`과 `relatedNaturalPersons >= 2`로 구현해 경계값을 통과시킨다. → `COMPLETED`. + +### 7.2 Deep-dive — Test 8: 급조 신탁은 전원 QP여도 탈락 (signature 케이스) + +이 케이스가 종전 판과 갈리는 핵심이다. 급조 신탁의 수탁자·위탁자가 *전원 QP*라 해도, statute §2(a)(51)(A)(iii)은 "**that was not formed for the specific purpose of acquiring the securities offered**"를 신탁 자격의 *요건*으로 둔다. 즉 급조라는 사실만으로 (iii)에서 탈락하며, Rule 2a51-3의 "전원 QP면 치유"는 **(ii)·(iv) 회사에만** 적용되어 신탁에는 구제가 없다(§3.3·§3.8.1). 따라서 A-09는 신탁 로직(`evaluateTrust`)의 **맨 앞 선차단**에서 순회 없이 즉시 `FAIL_FORMED_FOR_SPECIFIC_PURPOSE_NON_QP`(reason=`trust_formed_for_purpose_no_cure`)를 반환한다. 대조군 Test 4(급조 *회사*, 전원 QP)는 2a51-3(a)로 `COMPLETED` --- 같은 "급조 + 전원 QP"라도 회사는 통과, 신탁은 탈락. 이 비대칭을 테스트로 못 박는다. + +### 7.3 Deep-dive — Test 9: 3단 중첩 재귀 + +회사 A(매수인) ← 회사 B(A의 100% 소유) ← 자연인 C·D(B의 소유자). A-09는 A를 순회하다 B라는 entity를 만나 `evaluateNodeQualified(B, R3, depth+1)`로 한 겹 내려간다. **여기서 B가 그 자체로 QP((iv) $25M 등)이면 §5.2 단계 2에서 즉시 `COMPLETED`로 종료하고 C·D를 보지 않는다**(Test 17). B가 자체 자격이 없어 구성원에 의존할 때에만 C·D로 내려가 A-13에 위임한다. C·D가 전원 QP면 B가 `COMPLETED`, 그 결과로 A도 `COMPLETED`. D가 비QP면 B가 `FAIL_LOOKTHROUGH_OWNER_NOT_QUALIFIED`를 반환하고 A는 즉시 차단된다 --- **껍데기를 몇 겹 써도 맨 안쪽 비자격이 전체를 막는다**(부록 B 상세). 재귀 깊이는 `depth`로 추적되고 `MAX_DEPTH` 초과 시 `REVIEW_LOOKTHROUGH_DEPTH_EXCEEDED`. + +### 7.4 Deep-dive — Test 15·16: R1+R3 동시 발동 AND + +BUIDL-like 발행에서는 같은 entity 매수인이 R1(발행: 전원 AI)과 R3(§3(c)(7): 전원 QP)를 동시에 만족해야 한다. A-09는 두 Track look-through를 **각각 수행해 AND**한다 --- QP-전원(Track A)과 AI-전원(Track B)이 모두 `COMPLETED`라야 최종 `COMPLETED`. Test 15는 양쪽 충족 → 통과. Test 16은 QP look-through는 통과하나 AI 한 명이 미달 → AND 실패 → 차단. 어느 한 Track이라도 미충족이면 거래가 막힌다(§3.8 두 Track 비교의 R1·R3 동시 발동 주의). + +### 7.5 Deep-dive — Test 13: 그래프 불완전은 차단이 아니라 검토 + +beneficial owner 일부가 미식별이면 "판정 자체가 불가"다. 자동 `FAIL`로 처리하면 정상 매수인이 서류 지연만으로 거절당한다. A-09는 `REVIEW_OWNERSHIP_GRAPH_INCOMPLETE`로 사람 검토 큐에 보내고 Trusted Issuer에게 미식별 노드 보완을 요청한다(§6.3). 보완 후 재평가로 `COMPLETED`/`FAIL` 확정. 이 "미비 = 검토, 미달 = 차단" 구분이 오탐을 줄인다. + +--- + + +## §8 (α) 증명서 확인형 패턴 (Pattern B) — 왜 이 방식인가 + +A-09는 **패턴 B(증명서 확인형)** 다 --- 지분 구조(누가 실소유자인가, 친족·위탁자 관계가 사실인가, 급조인가)는 *체인이 직접 계산할 수 없고*, off-chain 검증기관(Trusted Issuer = Securitize)이 실사해 서명한 **`ownershipGraph`와 자연인 claim**을 신뢰한다. A-09가 체인에서 하는 것은 그 서명된 구조 위에서 *재귀 순회 + 전원-충족 AND + 자연인 위임*이라는 결정적 계산뿐이다. 즉 A-09는 새 oracle을 더하지 않고, **이미 서명된 두 종류의 claim(구조 claim + leaf 자격 claim)을 재귀적으로 조합**한다. + +### 8.1 검증 3패턴 중 A-09의 자리 + +| 패턴 | 설명 | A-09 | +| --- | --- | --- | +| A. 온체인 자체판정 | 체인 데이터만으로 결정(예: 보유자 수 카운트) | 아님 | +| **B. 증명서 확인형** | off-chain 사실을 검증기관이 확인해 서명 claim으로 실음 → 체인은 claim을 신뢰(재귀 조합) | **해당** | +| C. 운영 개입형 | 사람이 직접 판단·개입 | 부분(§6.3 REVIEW·§11 Manual Review) | + +### 8.2 왜 A-09가 패턴 B인가 + +지분 구조의 *진위*는 체인 밖의 사실이다 --- 회사 등기·주주명부·신탁계약서·급조 여부는 온체인에서 재계산이 불가능하다. 따라서 검증기관이 실사해 서명한 `ownershipGraph`를 신뢰하고, 체인은 그 위에서 형식적 재귀(§5)만 수행한다. **A-09가 패턴 B라는 점은 각 자격 노드에서 두 번 확인된다** --- 구조 자체가 서명 claim이고(누가 소유자인가), 각 노드(자연인 또는 자체 자격 entity)의 자격도 A-13/A-03·A-08이 신뢰하는 서명 claim이다(그 노드가 QP/AI인가). A-09는 이 둘을 재귀로 엮을 뿐 어느 쪽도 스스로 계산하지 않는다. + +### 8.3 법적 토대 — 두 겹의 reasonable belief + +A-09의 claim-신뢰 모델은 두 Recipe 모두에서 법적으로 정당화된다. + +- **QP측(R3) --- Rule 2a51-1(h) reasonable belief.** §3(c)(7)상 QP에는 Relying Person(펀드·그 대리인 = Trusted Issuer)이 정의 충족을 *합리적으로 믿는* 자도 포함된다. 검증기관이 실사 후 서명한 QP claim(및 그 사람이 어느 소유 구조의 leaf인지)을 신뢰하는 구조가 (h)에 의해 성립한다. +- **AI측(R1) --- Rule 506(c)(2)(ii) reasonable steps.** 506(c)는 발행자가 매수인의 AI 지위를 *합리적으로 검증*할 것을 요구한다. 검증기관의 지분구조 실사·leaf AI claim 발급이 이 reasonable steps의 구현이다. +- **귀결.** 두 축 모두 "합리적 확인"을 법적 기준으로 두므로, A-09의 재귀-조합 모델(L2 Trusted Issuer가 서명한 구조 + leaf claim을 온체인에서 접기)은 두 Recipe 모두에서 정당하다. 책임 분배는 §10. + +--- + +## §9 (β) Cross-Element·Cross-Recipe 조율 — 혼자 움직이지 않는다 + +### 9.1 책임 경계 (A-09가 하는 것 / 넘기는 것) + +A-09는 *지분 구조를 따라 각 소유자의 자격을 확인하고(자체 자격 entity는 그 노드에서 종료, 필요 시 자연인까지) 전원-충족을 집계*하는 일만 한다. **넘기는 것** --- 자연인 leaf의 QP/AI 자격 값 판정은 A-13/A-03, 매수 법인의 entity-level 분류·급조 감지·라우팅은 A-08, 발행자 지배관계인(affiliate)은 A-06, 지분 구조의 진위(실소유자 식별)는 L2 검증기관, 보유자 수·분리카운트는 D-01, 신원 중복은 A-04, claim 만료는 A-11, manifest 정합은 B-01. A-09는 "구조를 접는 계산"만 하고 "사실을 만드는" 일은 하지 않는다. + +### 9.2 Element Cascade Map + +```text +[법인·신탁 매수인] + │ + ▼ + A-08 (entity 분류·급조·라우팅) ──(look-through 필요)──► A-09 (재귀 look-through) + │ │ + │ ├─ 자연인 / 자체 자격 entity ──► A-13(QP) / A-03(AI) / A-08 per-node (종료) + │ │ + │ ├─ 중첩 entity ──► (A-08 재분류 후) A-09 재귀 (depth+1) + │ │ + │ └─ 소유자가 발행자 affiliate ──► A-06 (affiliate, 별개 축) + │ + └─(모든 경로)──► A-11 (claim 만료) · A-04 (신원 중복) · B-01 (manifest 정합) · D-01 (보유자 수) +``` + +| cascade 트리거 | 호출되는 부품 | 발동 조건 | +| --- | --- | --- | +| 자격 노드 도달(자연인 또는 자체 자격 entity) | A-13(QP) / A-03(AI) / A-08 | 노드마다 위임(종료점) | +| 소유자 중 중첩 entity | A-08 재분류 → A-09 재귀 | entity 노드를 만날 때(껍데기 한 겹 더) | +| 소유자가 발행자 affiliate | A-06(Affiliate) | look-through 중 발행자 지배관계인 발견 시(별개 축) | +| 모든 거래 | A-11 / A-04 / B-01 / D-01 | claim 만료·신원 중복·manifest·보유자 수 | + +**상호 재귀 종료.** A-08→A-09→(자격 노드)→A-13/A-03/A-08. A-09는 소유자 중 entity를 만나면 그 entity가 자체로 QP/AI인지 먼저 확인하고(A-08/A-13/A-03), 자격이 구성원에 의존할 때에만 A-09를 다시 호출한다 --- **종료점은 '독립적으로 자격이 확인된 노드'** 이며(자연인은 항상 그 노드), 순환·과복잡은 MAX_DEPTH cap + 순환 검출로 방어한다. **주의:** look-through 중 발견되는 *발행자 affiliate/control person*은 A-09가 아니라 **A-06** 소관이다(별개 축). + +### 9.3 Recipe Orchestration (거래 맥락 활성) + +| Recipe | A-09 발동 조건 | A-09의 역할 | +| --- | --- | --- | +| R3 (ICA §3(c)(7) Fund) | entity 매수인 + look-through 필요(가족회사·신탁·급조 회사) | QP 전원-충족 재귀 | +| R1 (Reg D 506(c) Issuance) | entity 매수인 + (a)(8) 전원-AI 경로 + R1 실제 활성 | AI 전원-충족 재귀 | +| R2 (Resale via §4(a)(7)) | entity 매수인 + 재판매 경로에서 매수인 자격 재확인 | 해당 Track look-through | + +**R1은 그 거래에서 실제 활성일 때만.** 과거 506(c)로 발행된 §3(c)(7) 토큰의 Rule 144 2차 이전에 buyer-AI look-through를 자동 재부과하지 않는다 --- 그 2차 이전은 기본 R3(QP)만 켜진다. R1·R3가 둘 다 실제 활성이면 A-09는 두 Track look-through를 각각 수행해 **AND** 결합한다(§3.8·§7.4, A-08 §5.4·A-13 §9.3과 정합). + +### 9.4 Conflict Resolution — 경우별 처리 + +**경우 1 --- R1(AI) look-through와 R3(QP) look-through가 갈림.** 같은 entity라도 leaf 자연인이 AI 기준(순자산 $1M)은 넘고 QP 기준(투자자산 $5M)은 못 넘을 수 있다. R1+R3 동시 활성이면 두 Track이 모두 `COMPLETED`라야 통과(AND). R3만 켜졌으면 QP look-through만 본다. + +**경우 2 --- A-08은 통과인데 A-09에서 구성원 일부 탈락.** 급조 회사(2a51-3(a))이거나 (b) 허용경로에 기대는 회사는 모든 구성원이 각자 QP여야 자격이 생긴다. 한 명이라도 탈락하면 A-08의 잠정 통과가 번복되어 `FAIL_FORMED_FOR_SPECIFIC_PURPOSE_NON_QP`/`FAIL_LOOKTHROUGH_OWNER_NOT_QUALIFIED`가 반환된다. (자체 자산으로 (ii)/(iv)를 채운 진성 법인은 구성원 개별 QP 없이 회사 단위로 통과 --- §3.2.1.) + +**경우 3 --- 급조 회사(구제 가능) vs 급조 신탁(구제 없음).** 같은 "급조 + 전원 자격"이라도 회사는 2a51-3(a)로 통과, 신탁은 statute (iii)로 탈락한다(§9.6 상세). A-09는 이 비대칭을 모드 결정에서 못 박아, 급조 신탁을 회사처럼 통과시키는 오류를 막는다. + +### 9.5 Manifest 무결성 (B-01) + +A-09 입력(`ownershipGraph`·`entity.type`·`formedForSpecificPurpose`·`claimBasis`)의 정합성은 B-01(manifest)이 보증한다 --- 예: R3가 활성인데 leaf claim 참조가 비어 있거나, `entity.type=TRUST`인데 급조 플래그와 claim.basis가 모순되면 manifest 단계에서 잡는다. 거래 체결 직후(post-trade commit) B-01이 A-09 결과와 다른 부품 결과가 서로 모순되지 않는지 재검증하고, 불일치 시 audit alert이 뜬다. A-09는 정합한 manifest를 전제로 판정한다. + +### 9.6 [해설] 급조 신탁은 왜 치유가 없고 급조 회사는 있는가 — A-09의 서명 비대칭 + +A-09에서 가장 틀리기 쉬운 지점이 "급조 + 전원 자격"의 처리다. 직관은 "안을 들여다봐서 전원이 자격이면 통과시키면 되지 않나"이지만, **법은 회사와 신탁을 다르게 취급**한다. 이 절은 그 이유를 한 번에 정리한다. 붙잡을 직관은 하나 --- **구제 조문이 어디에 있느냐가 다르다.** + +**한 줄 요약.** 급조 *회사*의 "전원 QP면 통과"는 **Rule 2a51-3(a)** 가 명문으로 준 구제다. 급조 *신탁*에는 그런 구제 조문이 없다 --- statute §2(a)(51)(A)(iii) 자체가 "not formed for the specific purpose"를 *자격 요건*으로 박아 두어, 급조면 요건 미충족으로 탈락하고 그걸 되살릴 규칙이 존재하지 않는다. + +**비유 --- 두 개의 문.** 회사에는 "급조여도 안이 전부 자격이면 열어 준다"는 뒷문(2a51-3(a))이 규정에 나 있다. 신탁에는 그 뒷문 자체가 만들어져 있지 않다 --- 정문(statute (iii))이 "급조는 애초에 자격 없음"이라 못 박았고, 뒷문을 낼 하위 규칙이 없다. 그래서 회사는 "전원 자격"이라는 열쇠로 뒷문을 열 수 있지만, 신탁은 열쇠가 있어도 열 문이 없다. + +| 구분 | 급조 회사 (ii)·(iv) | 급조 신탁 (iii) | +| --- | --- | --- | +| 급조 시 원칙 | 2a51-3(a): 원칙적으로 QP 아님 | (iii): 요건 미충족 → 자격 없음 | +| 구제 조문 | **있음** --- 2a51-3(a) 단서 "unless each beneficial owner ... is a qualified purchaser" | **없음** --- 구제 규칙 부재 | +| 전원 자격이면? | **통과**(구제 발동) | **여전히 탈락**(구제 없음) | +| A-09 처리 | 전원-충족 모드로 재귀 → 전원 QP면 `COMPLETED` | §5.2 단계 1에서 즉시 `FAIL`(순회 불필요) | + +**왜 이렇게 설계됐나.** 신탁은 위탁자–수탁자–수익자가 분리돼 *은닉 통로*가 되기 쉽다 --- "이 펀드 사려고 만든 신탁"을 전원 QP로 포장해도 통로 위험이 남는다고 본 것이다. 회사는 지분이 비교적 투명해 "전원 QP면 도관 위험이 해소된다"고 보아 구제를 열었다. 이 정책 판단(IC-22597 §I.C, §3.9)이 조문 구조의 비대칭으로 나타난 것이고, A-09는 그 조문 구조를 그대로 코드에 옮긴다. + +**곁가지 --- A-01(제재) 지분 그래프 공유.** A-09가 만드는 `ownershipGraph`(자격 확인 노드까지, 보수적으로는 자연인까지의 소유 구조)는 A-01(OFAC/제재)이 실소유자 제재 스크리닝에 쓰는 그래프와 **상당 부분 겹친다.** 같은 실소유자 그래프를 두 부품이 각자 만들면 비효율·불일치가 생긴다 --- 이 그래프를 공유·정합화하는 설계는 §12 OD-LT-5로 둔다. 또한 매수인이 그 자체로 사모펀드(fund-of-funds)면 §2(a)(51)(C)·Rule 2a51-2 산정이 얽히는데(§3.6·§3.7), 이 경우의 그래프 전개도 OD-LT-5에서 함께 본다. + +--- + +## §10 (γ) 3-Layer Solution — 지분 구조 증거를 세 겹으로 + +| Layer | 주체 | 역할 | A-09 적용 | +| --- | --- | --- | --- | +| L1 Self-Attest | 법인·신탁 매수인 | 유형·급조 여부·소유자 명부 자기 진술 | 입력 1차(증거 아님) | +| L2 Trusted Issuer | 검증기관(Securitize) | 지분 구조 실사·서명(`ownershipGraph`) + leaf 자연인 QP/AI claim 발급 | **A-09가 신뢰하는 단일 진실원**(법적 토대 §8.3) | +| L3 Spot-Check | 운영층(Operator) | 표본 재검·red flag·급조 회색지대 심사·순환출자 경계 escalate | §6.3 REVIEW · §11 운영 큐 | + +**책임 경계.** 지분 구조의 *진위*는 L2가, *재귀 형식 판정*은 A-09(체인)가, *예외·표본·경계*는 L3가 진다. A-09는 L2 claim의 *내용*을 재계산하지 않는다(패턴 B 원칙). L2의 실사 충분성(어떤 서류로 실소유자·친족·급조를 확인하는가)은 검증기관 **발급 기준서**가 정의한다(§12 OD-LT-3·OD-LT-4). + +**Escalation.** L1 자기진술만으로는 통과 불가 → 반드시 L2 서명 구조 필요. L2가 판단 곤란(급조 회색지대, 순환출자, 미식별 노드)이면 A-09가 `REVIEW_*`를 반환하고 L3로 escalate → 필요 시 변호사 검토 → 결정·근거 로깅. + +**Liability --- 위조 지분 구조로 무자격 소유자가 숨어 든 경우.** L2가 서명한 구조가 사실은 위조여서 비-QP가 leaf에 숨어 있었고 그 결과 §3(c)(7) 면제가 위태로워졌다면, 1차 책임은 실사·서명한 L2(검증기관)에 있다(reasonable belief의 전제가 깨진 것). A-09(온체인)는 서명된 구조를 규칙대로 접었을 뿐이므로 형식 판정의 책임만 진다. 이 책임 분배는 검증기관 계약·발급 기준서에 명문화하고, 위조 발견 시 forcedTransfer/recovery(A-13 소관)와 사후 제재 절차로 연결한다. + +--- + +## §11 (δ) Frontend·Off-chain Operator Layer — 4-Layer로는 안 끝난다 + +### 11.1 왜 별도 레이어가 필요한가 + +지분 구조는 체인 밖에 있고(패턴 B), 급조·회색지대 판정에는 사람의 실사가 개입한다. 따라서 온체인 A-09(형식 재귀 판정) 위에 Frontend(수집·안내)와 Operator(실사·예외)가 필요하다. + +### 11.2 Frontend — 법인·신탁 매수인 자기신고·안내 + +법인·신탁 매수인이 유형을 선택하고 소유 구조를 신고하면, Frontend가 필요한 증빙 목록(가족회사=자산·친족, 신탁=계약서·수탁자·출연자, 급조 SPV=전체 명부)과 검증기관 연결을 안내한다. 거절 시 §6.4의 *매수인 노출 메시지*만 보이고 필드 진단·타인 KYC는 감춘다. + +### 11.3 Off-chain Operator — Trusted Issuer 지분구조 실사 + +검증기관(Securitize)이 등기·주주명부·신탁계약서를 받아 실소유자를 확정하고(자체 자격 entity는 그 자격 근거까지, 아니면 보수적으로 자연인까지), 급조 여부·친족관계·소유 귀속을 확인해 서명된 `ownershipGraph`를 발급한다(L2). 각 자연인의 QP/AI claim도 함께 발급해 A-09가 재귀로 엮을 수 있게 한다. 중첩 구조면 한 겹씩 명부를 요청해 그래프를 완성한다. + +### 11.4 Manual Review Queue + +`REVIEW_OWNERSHIP_GRAPH_INCOMPLETE`(미식별 노드) · `REVIEW_LOOKTHROUGH_DEPTH_EXCEEDED`(순환·과복잡) · `PARTIAL_REVIEW`(부분 추적) · 급조 회색지대 케이스를 검토 큐에 적재한다. Reject-logging으로 거절·검토 시도의 audit trail을 보존한다(revert 시 event 소실 보완). + +### 11.5 아키텍처 함의 + +A-09는 *stateless 재귀 판정기*로 얇게 유지하고, 무거운 실사·경계 판단은 off-chain(L2·L3)에 둔다. 이로써 온체인 로직은 결정적·감사 가능하고, "무엇이 급조인가·어디까지 실소유자인가" 같은 해석 변화는 검증기관 기준서·운영 정책 수준에서 흡수된다. 재귀 깊이·partial ownership 같은 미확정 파라미터도 온체인 상수(MAX_DEPTH)와 off-chain 정책으로 분리해, 정책이 바뀌어도 온체인 로직을 다시 배포하지 않는다. + +--- + +## §12 Open Issues — 변호사·엔지니어링 follow-up 대상 (우선순위) + +| ID | 우선 | 쟁점 | 비고 | +| --- | --- | --- | --- | +| **OD-LT-1** | 최우선 | 재귀 깊이 상한(`MAX_DEPTH`) 확정 --- 정상적으로 깊은 지주구조와 순환출자·과복잡을 구분하는 기준. 초과 시 REVIEW 처리 정책 | 운영 상수 + L3 spot-check | +| **OD-LT-2** | 최우선 | 비-전원-충족(부분 추적) 분기에서 소수 비충족 소유자의 처리(`PARTIAL_REVIEW`) --- PASS/FAIL/REVIEW 중 무엇으로 확정할지 | §5.2 단계 4 · §6.2 | +| **OD-LT-3** | 높음 | 신탁 출연자(settlor)·수탁자의 (i)(ii)(iv) 자격 데이터 수집 충분성 --- 어떤 서류로 각 출연자 QP를 확인하는가 | 검증기관 발급 기준서 | +| **OD-LT-4** | 높음 | 가족회사 친족관계 증빙 기준(형제·직계비속·배우자·estate·재단 등)의 machine 판정 한계 --- 주관 요소 | claim boolean + L3 spot-check | +| **OD-LT-5** | 중간 | A-01(제재) 실소유자 그래프와 A-09 `ownershipGraph`의 공유·정합화, fund-of-funds(§2(a)(51)(C)·2a51-2) 매수인의 그래프 전개 | A-01 · Rule 2a51-2 산정 사슬 | +| **OD-LT-6** | 중간 | "formed for the specific purpose"(급조)의 회색지대 판정 --- 기존 SPV·다목적 지주회사가 이 거래를 겸해 참여할 때 급조로 볼지 | IC-22597 §I.C · L3 escalate | +| **OD-LT-7** | 중간 | 신탁이 (iii)가 아니라 (iv) "any person, ... owns and invests on a discretionary basis, not less than \$25,000,000"으로 **독립 자격**을 주장하는 특수 케이스 --- (iii) 경로(수탁자·출연자 (i)(ii)(iv))와 별도로 자체 $25M QP로 볼지, 회색지대는 REVIEW | §2(a)(51)(A)(iv) · L3 | +| **OD-LT-8** | 높음 | GP·managing member·carried interest 등 **경제적 지분과 관리지분이 섞인 구조**에서 "beneficial owner of the company's securities"(Rule 2a51-3)의 범위를 어떻게 정의할지 --- IC-22597 adopting release는 회피 장치가 아닌 GP interest가 반드시 QP일 필요는 없을 수 있다는 취지를 시사. MVP는 보수적으로 전원 QP를 요구하되 이 범위 정의를 확정 필요 | Rule 2a51-3 · IC-22597 | +| **OD-LT-9** | 높음 | **취득 후 소유구조 변경(post-acquisition ownership change).** entity(법인·SPV·신탁)가 §3(c)(7) fund token을 보유한 뒤 그 equity ownership·settlor/contributor·trustee·beneficial owner 구조가 변경되면, 토큰 transfer가 발생하지 않아도 look-through 그래프가 달라져 기존 A-09 claim이 낡을 수 있다. 언제 무효화·재검증할지를 Trusted Issuer covenant·정기 refresh(A-11)·entity 지분 이전제한·Operator notice 의무로 설계해야 함 --- A-09만의 문제가 아니라 A-11 freshness·Trusted Issuer covenant·Operator monitoring 공동 소관 | §3(c)(7)(A) · A-11 · Trusted Issuer · Operator | + +--- + +## §13 파일명 규칙 (Naming Convention) + +- 정본(소스): `A-09_equity-owner-lookthrough.md` +- 공유용: `A-09_equity-owner-lookthrough.docx` (pandoc + CJK 후처리 빌드) +- 보조 다이어그램: `fig30.png`(법조문 관계) · `fig31.png`(유형별 트리거 분기) · `fig50.png`(재귀 판정 로직) --- 모두 Graphviz, 개발자용 +- 위치: 산출물/elements/ + +--- + +## 변경 로그 + +- **[2026-07-01] v1.4** --- 2차 외부 검토 반영(제출 전 방어 강화, 1차 출처 대조). **(1) 신탁 (iv) 독립 QP 선차단** --- §5.2 pseudocode에서 `node.type==TRUST & claimBasis==QP_INSTITUTIONAL`(= (iii)가 아닌 (iv) "$25M any person" 독립 주장)이면 `qualifiesIndependentlyAsQP` 자동 PASS **전에** `REVIEW_TRUST_QP_IV_INDEPENDENT`로 선차단(회색지대 OD-LT-7의 핫패스 자동통과 방지); Test 20·§6.2 코드표·매수인 메시지 정합. **(2) reasonable belief 단서** --- §1.5 "한 명이 전체 붕괴"에 Rule 2a51-1(h)(§3(c)(7)상 QP에 Relying Person이 *합리적으로 QP라고 믿는* 자 포함) 단서 추가 --- A-09의 목적은 절대적 객관 보장이 아니라 서명 `ownershipGraph`·leaf claim으로 *합리적 믿음의 구조적 근거*를 남기는 것(§8.3 정합). **(3) OD-LT-9 신설** --- entity가 fund token 보유 후 equity·settlor/contributor·trustee·beneficial owner 구조가 변경되면(토큰 transfer 없어도 look-through 그래프 변동) 기존 claim 무효화·재검증 시점 미결(Trusted Issuer covenant·A-11 refresh·entity 지분 이전제한·Operator notice). **(4) §3.5 문구 정합** --- "자연인 단위로 환원" → "독립적으로 자격이 확인된 owner node까지(필요 시 자연인)". 4건 모두 법리 골격을 바꾸지 않는 방어 문구·핫패스 안전화 성격. +- **[2026-07-01] v1.3** --- 외부 검토 피드백을 1차 출처 대조 후 반영(법리 정밀화). **(1) 재귀 종착점 정정** --- "무조건 자연인까지"를 **"독립적으로 자격이 확인된 owner node까지(필요 시 자연인)"** 로 낮춤. Rule 2a51-3(a)·(b)("each beneficial owner ... is a qualified purchaser")·501(a)(8)("all of the equity owners are accredited investors")의 문언상 종착점은 자연인이 아니라 *자격이 확인된 노드*이며, entity가 자체로 QP((iv)$25M·QIB)/AI(은행·투자회사 등)이면 그 지점에서 종료 --- 자연인 추적은 보수적 구현으로 표기(§1 정의·§1.5·§5·§8·§9). **(2) 신탁 pseudocode 정정** --- `beneficialOwners[]`(수익자) 순회를 폐기하고 **수탁자·의사결정권자 + 각 위탁자·출연자** 전용 로직(`evaluateTrust`)으로 분리; 대상자는 **(i)(ii)(iv)만** 허용해 (iii) 신탁 연쇄 자격 주장 차단(§5.2·§3.3·§3.10). **(3) 가족회사 요건 강화** --- `relatedNaturalPersons≥2` 외에 **소유 귀속 확인**(가족관계자+그 estate·foundation·charity·trust, 비가족 제3자 소유분 없음) 필드·로직 추가(`familyOwnershipConfirmed`·`nonFamilyOwnerPresent`·`allowedFamilyVehicleConfirmed`), 불명 시 `REVIEW_FAMILY_OWNERSHIP_ATTRIBUTION`(§5.2·§4.2·§3.10). **(4) 501(a)(8) 정정** --- Note 1의 자연인 관통은 *permissible*이지 강제 아님; entity owner 자체 AI 판정 우선(§3.8·§5). **(5) Ralston Purina 톤 다운** --- §4(a)(2) 사정 능력의 *배경 원리*로만 두고, operating company 비관통은 **§3(c)(1)(A) 조문("would be an investment company")** 에 직접 귀속(§3.9). **(6) failure code 분리** --- `FAIL_AI_LOOKTHROUGH_PENDING`(모호)을 **`FAIL_AI_OWNER_NOT_ACCREDITED`(확인된 비-AI 차단)** 와 **`REVIEW_AI_LOOKTHROUGH_PENDING`(자료 미완료 검토)** 로 분리(§6.2·§3.10·§3.11·§7). **(7) Open Issue 추가** --- OD-LT-7((iv) $25M 독립 주장 신탁), OD-LT-8(GP·managing member·carried interest의 beneficial owner 범위). 테스트 4종 추가(entity owner 자체 자격 종료·가족 비귀속·(iii)연쇄 차단·(iv)신탁). + +- **[2026-07-01] v1.2** --- A-08/A-13 v1 최종본 수준으로 전면 재작성 + 1차 출처 재검증. **(정정)** (1) **§2(a)(51)(A)(iii) 신탁 원문**을 종전 "...are qualified purchasers"에서 **현행 uscode 진본 "...is a person described in clause (i), (ii), or (iv)"** 로 교체(수탁자·각 출연자는 (i)(ii)(iv)로만 QP, (iii) 신탁 겹치기 차단). (2) **급조 신탁 = 치유 없는 즉시 FAIL** 로직 신설 --- Rule 2a51-3의 "전원 QP 치유"는 (ii)(iv) 회사 전용이라 (iii) 신탁 미적용. (3) **급조 처리의 R1/R3 비대칭**(§3.8.1) 명시 --- R1 직접 자산 path((a)(3)(7)(9)(12))는 급조 불가, (a)(8) 전원-AI만 구제; R3 회사는 2a51-3(a) 구제. (4) **claim.basis 정합** --- (iv)=QP_INSTITUTIONAL("기관" 라벨 금지), QP_ALL_BENEFICIAL_OWNERS 폐기(하위 카테고리 + lookThroughStatus=COMPLETED). **(보강)** §3.5(§3(c)(1)(A) 카운팅 뿌리)·§3.6.1(2a51-3 vs 2a51-2 분담)·§3.9(IC-22597·Ralston Layer 3) 조문 블록 신설. §1 규제맥락 6절(Existential Risk 포함), §3 개발자 플로우차트 3종(법조문 관계·유형별 트리거·재귀 로직) + BUIDL 적용(§3.0.1) + 표1·표2, §5 pseudocode 단계별 해설·threshold·취득시점·결정성, §6 매수인 vs 내부 메시지 분리, §7 테스트 + deep-dive, §8 두 겹 reasonable belief, §9 cascade map·orchestration·conflict·manifest·해설(급조 비대칭), §10 3-Layer·liability, §11 Operator layer, §12 Open Issue. 전 조문 1차 출처(uscode.house.gov·ecfr.gov·sec.gov·govinfo.gov) verbatim 재확인. + +- **[2026-06-22] v1.1** --- A-13 v1 형식으로 §3 재편(조문별 6-필드 per-provision 블록 + §3.0.2 Authority·순서 표 2종). look-through 로직을 A-13에서 분리해 독립 부품으로 정식화. + +- **[2026-06-21] v1.0** --- A-09 최초 walkthrough. 범위 = 법인·신탁 매수인의 지분 구조를 자연인까지 재귀 추적(look-through). R3(QP)·R1(AI) 두 Track conditional attach. 결정적 발견: 재귀 엔진 구조(lookThroughStatus COMPLETED/PENDING/FAILED), 자연인 leaf 위임(A-13/A-03), 전원-충족 AND-gate. + +--- + +## 부록 A. ERC-3643 / ONCHAINID 표현 — look-through claim 스키마 + +A-09가 읽고 쓰는 claim의 개념 스키마(구현체는 ONCHAINID 클레임·오프체인 서명 구조). + +```text +# 매수 주체 노드 +entity { + id, type: FAMILY_COMPANY | TRUST | OTHER_COMPANY | FUND_3C1, + formedForSpecificPurpose: bool, + claimBasis: QP_FAMILY_COMPANY | QP_TRUST | QP_INSTITUTIONAL | QP_QIB | AI_ALL_EQUITY_OWNERS, + beneficialOwners: [ owner ] # 소유자 노드 (재귀 단위) +} + +# 소유자 노드 (재귀) +owner { + kind: NATURAL | ENTITY, + ownershipPct: number, + qualificationClaim: # NATURAL이면 A-13/A-03이 읽을 QP/AI claim 참조 + entity: # ENTITY이면 한 겹 더 (evaluateLookThrough 재귀) +} + +# 가족회사 보조 필드 +familyCompany { investmentsValue: money, relatedNaturalPersons: int } +# 신탁 보조 필드 +trust { trustee: owner, settlors: [ owner ], formedForSpecificPurpose: bool } + +# 출력 (A-13/A-03이 AND 조건으로 읽음) +lookThroughStatus: COMPLETED | PENDING | FAILED +``` + +온체인 게이트: `Compliance.canTransfer()`가 entity 매수인에 대해 `lookThroughStatus == COMPLETED`를 필수 조건으로 요구. + +## 부록 B. 워크된 예제 — 3단계 중첩 구조 추적 + +**구조.** 매수인 = 급조 SPV "회사 A"(§3(c)(7) BUIDL-like 펀드 취득 목적). A의 소유자 = 회사 B(60%) + 자연인 C(40%). B의 소유자 = 자연인 D(50%) + 자연인 E(50%). + +**추적(R3, QP).** + +1. `evaluateLookThrough(A, R3, 0)` --- A는 급조 회사(OTHER_COMPANY, formedForSpecificPurpose=true) → `requireAll=true`(2a51-3(a)). 순회 시작. +2. 소유자 C(자연인) → `checkQualification(C, R3)` → A-13 위임 → C는 QP `ok=true`. +3. 소유자 B(entity) → `evaluateLookThrough(B, R3, 1)` 재귀. + - B의 소유자 D(자연인) → A-13 → D QP `ok=true`. + - B의 소유자 E(자연인) → A-13 → E QP `ok=true`. + - B: 전원 통과 → `COMPLETED` 반환. +4. A: C·B 모두 통과 → `requireAll && allQualified` → **`COMPLETED`**. + +**반례.** E가 비-QP였다면 3단계에서 B가 `FAIL_LOOKTHROUGH_OWNER_NOT_QUALIFIED`를 반환하고, A는 즉시 같은 FAIL로 차단된다(short-circuit) --- **껍데기를 두 겹(A→B) 써도 맨 안쪽 E의 비자격이 전체를 막는다.** 이것이 anti-circumvention의 작동 지점이다. + +**신탁 반례.** 만약 A가 회사가 아니라 *급조 신탁*이었다면, C·B·D·E가 전원 QP여도 §5.2 단계 1에서 즉시 `FAIL_FORMED_FOR_SPECIFIC_PURPOSE_NON_QP`(치유 없음) --- 순회조차 하지 않는다(§7.2). + +## 부록 C. 데모(BUIDL) 안전/위험 표현 + +- **안전(모델링 명시).** 본 문서의 BUIDL 서술은 *BUIDL-like §3(c)(7) private fund interest를 ERC-3643 테스트 토큰으로 모델링*한 것이며, 실제 BlackRock BUIDL의 발행 표준·transfer architecture·현재 운영 조건을 단정하지 않는다. +- **안전(자격 게이트 상시 on).** §3(c)(7) 펀드이므로 전원 QP가 상시 요구되고, entity 매수인이면 A-09 look-through가 조건부로 켜진다 --- 데모에서 가족회사·신탁·급조 SPV 매수 시나리오로 확인 가능. +- **위험(2차 거래 미결).** DEX 2차 거래가 §3(c)(7)의 "no public offering"(Condition 2)을 유발하는지는 미결(A-13 §12·본 문서 §9.3) --- A-09의 활성 Recipe 계산에 직접 연결된다. +- **위험(재귀 깊이·partial).** MAX_DEPTH·부분 소유 처리 미확정(§12 OD-LT-1·OD-LT-2) --- 데모에서는 depth-cap 상수를 명시하고 초과 시 REVIEW로 시연한다. +- **위험(급조 회색지대).** 기존 다목적 SPV가 이 거래를 겸할 때 급조 판정이 모호(OD-LT-6) --- 데모에서는 명백한 급조/비급조 케이스로 한정. + +--- + +*문서 끝.* + diff --git a/docs/compliance/elements/A-11_claim-freshness.md b/docs/compliance/elements/A-11_claim-freshness.md index a0f9d65..2ae2394 100644 --- a/docs/compliance/elements/A-11_claim-freshness.md +++ b/docs/compliance/elements/A-11_claim-freshness.md @@ -27,6 +27,87 @@ tags: [element, A-11, claim-freshness, expiry, walkthrough, spec-sheet, R1, R2, ## §1. 규제 맥락 — 이 부품이 다루는 규제는 어디서 왔는가 (Context First) +<<<<<<< HEAD +> **왜 맥락부터 읽어야 하나.** 이 부품은 한 줄로 말하면 *"이미 발급된 자격 증명이, 지금 이 거래의 시점에도 아직 유효한가"를* 거래 직전에 판정한다. 그런데 "유효기간"의 근거는 조문마다 다르고(어떤 건 법규가 정하고, 어떤 건 아예 없어 정책으로 메운다), 그 차이를 모르면 "왜 AI는 5년이고 QP는 1년이냐"를 설명할 수 없다. 그래서 큰 그림(미국 증권법의 구조 → 증명이 "상하는" 문제가 생긴 역사 → 두 갈래의 신선도 논리 → 우리 시스템에서의 존재론적 의미)을 먼저 깐다. + +### 1.1 미국 증권법의 4개 기둥(4 Pillar)과 그중 A-11의 자리 + +미국 연방 증권규제는 한국처럼 하나의 「자본시장법」으로 통합돼 있지 않고, 시대별로 따로 만들어진 4개의 큰 법률이 각자 다른 국면을 맡는다. 한국은 증권 관련 규제가 한 건물 안의 여러 부서라면, 미국은 길 건너 따로 선 4개의 건물이다. + +| 기둥(법률) | 맡는 국면 | 핵심 관심사 | 한국법 대응(직관용) | +|-----------|-----------|-------------|---------------------| +| Securities Act of 1933(1933년법) | 증권의 발행(1차 시장) | "팔기 전에 등록·공시했는가" | 자본시장법 증권신고서·공모 규제 | +| Securities Exchange Act of 1934(1934년법) | 증권의 유통·거래소·중개업자(2차 시장) | "거래소·broker-dealer·계속공시" | 자본시장법 유통시장·금융투자업 | +| Investment Company Act of 1940(ICA, 투자회사법) | 집합투자기구(펀드) 자체의 규율 | "펀드 구조가 투자자를 착취하지 않는가" | 자본시장법 집합투자(펀드) 규제 | +| Investment Advisers Act of 1940(투자자문업자법) | 투자자문업자(adviser) | "남의 돈을 굴려주는 자의 신인의무" | 자본시장법 투자자문·일임업 | + +A-11은 이 중 *한 기둥에만 속하지 않는다*. A-11은 **자격 게이트의 시간축 보조 부품**이라, 1933년법 축(Reg D 506(c)의 AI 검증)과 투자회사법 축(ICA §3(c)(7)의 QP 요건)에 *둘 다* 얹혀, 각 축이 발급한 자격 증명이 "거래 시점에도 아직 살아 있는가"를 본다. 즉 A-11은 자격의 *실체*(누가 AI인가·누가 QP인가)를 판정하지 않는다 — 그건 A-03(AI)·A-13(QP)의 일이다. A-11이 답하는 질문은 오직 하나다 — "그 증명이 발급된 뒤 너무 오래돼 더는 믿을 수 없게 되지 않았는가." + +**쉽게 말하면:** 자격 판정이 "이 사람은 자격이 있다"를 정하는 일이라면, A-11은 "그 판정서에 찍힌 날짜가 아직 유효한가"를 보는 일이다. 판정 자체가 아니라 판정의 *유통기한*을 본다. + +### 1.2 왜 이 규제가 존재하는가 — "증명이 상하는" 문제와 506(c)의 역사 + +자격 증명은 *과거 한 시점의 사실*을 적어 둔 종이다. "2024년에 이 사람의 순자산은 기준을 넘었다." 시간이 지나면 그 사실은 변할 수 있고(소득 감소·자산 하락·지위 변경), 법은 "언제까지 그 종이를 믿어도 되는가"의 경계선을 그어야 한다. 이 경계선이 왜, 어떻게 생겼는지는 506(c)의 역사에서 나온다. + +**1단계 — 2012년 JOBS Act가 검증의무를 만들었다.** 원래 사모(Reg D)에서는 *일반청약·광고(general solicitation)*가 금지였다. 광고 없이 아는 사람에게만 파니, 매수인이 적격인지 별도로 "검증"할 필요가 크지 않았다. 그런데 2012년 JOBS Act §201(a)가 Rule 506(c)를 신설해 *일반청약·광고를 허용*하는 대신, 그 대가로 issuer에게 **모든 매수인이 accredited investor임을 검증할 reasonable steps 의무**를 지웠다(§3.2). 광고를 풀어주는 대신 문지기 의무를 새로 얹은 것 — 이 "검증의무"가 A-11이 시간축에서 지키는 대상이다. + +**2단계 — 2020년 개정이 "재검증 없이 믿어도 되는 5년"을 만들었다.** 문제는, 검증을 매 거래마다 처음부터 다시 하면 반복 투자자에게 과도한 부담이라는 점이었다. 그래서 SEC는 2020년 사모 면제 체계 현대화(Release No. 33-10884, 86 FR 3496; 2021-03-15 시행)에서 Rule 506(c)(2)(ii)(E)를 신설했다 — 한 번 제대로 검증한 자에 대해, *반대 정보가 없고 거래 시점에 서면진술을 받으면, 검증일로부터 5년간 그 검증을 재사용*할 수 있게 했다(§3.3). **이 5년이 곧 A-11의 AI claim 유효기간 상한의 직접 근거다.** 즉 A-11의 "5년"은 우리가 임의로 고른 숫자가 아니라, 2020년 연방규칙이 명시한 재사용 기간이다. + +**3단계 — 투자회사법 축에는 그런 기간이 아예 없다.** QP 쪽은 사정이 다르다. ICA §3(c)(7)은 1996년 NSMIA로 신설됐는데, 펀드 증권이 "*취득 시점*(at the time of acquisition)에 QP인 자"에게만 배타적으로 보유될 것을 요구할 뿐, "QP 증명이 며칠 뒤 만료된다" 같은 재검증·유효기간 조항을 *두지 않았다*(§3.5). §2(a)(51)의 QP 정의도 자산 기준만 정할 뿐 시간 차원이 없다(§3.6). 따라서 QP claim의 유효기간은 *법규에서 도출되는 값이 아니라* Decipher가 위험관리로 정하는 정책값이다. + +한 줄로: **AI 5년은 법이 준 기간, QP 1년은 우리가 정한 기간**이다. A-11은 이 둘을 다루되, 코드·발급기준서·문서 어디서든 그 출처(법규 vs 정책)를 정확히 구분한다. + +### 1.3 두 갈래의 신선도 논리 — 나란히 작동하는 두 축 + +AI freshness와 QP freshness가 헷갈리는 뿌리는, 둘이 **서로 다른 두 법에서 나오고 시간을 재는 근거가 다르다**는 데 있다. A-13 §1.3의 "증권 등록(거래마다) vs 펀드 등록(상시 status)" 구분이 그대로 A-11의 시간축에도 투영된다. + +| | AI 갈래 (R1·R2) | QP 갈래 (R3) | +|--|-----------------|--------------| +| 근거 법 | 1933년법 Reg D 506(c) | 투자회사법 §3(c)(7) | +| 시간 기준점 | 검증일(`verifiedAt`) | 취득 시점(at the time of acquisition) | +| 유효기간 상한 | **5년 (법규 — (E))** | **1년 (Decipher 정책 — 비법규)** | +| 상한의 성격 | 조문이 준 재사용 기간 | 존재론적 위험 대비 보수적 완충 | +| 만료 시 효과 | 그 한 건의 검증 흠결 | 펀드 전체 면제 붕괴 위험 | + +두 축은 "1차=AI, 2차=QP"처럼 단계로 갈리는 게 아니다. 증권법(AI)은 발행이든 재판매든 *거래마다* 걸리고, 투자회사법(QP)의 §3(c)(7) 면제는 펀드 *life-cycle 전반*에 유지돼야 하되 그 자격 판단의 기준시점은 *각 취득(acquisition) 시점*이다(§3.5) — "상시 감시"가 아니라 "각 취득마다 buyer QP gate"다. 그래서 A-11도 두 갈래를 각각 다른 cap으로, 그러나 같은 산술 엔진으로 검사한다. + +### 1.4 Decipher 시스템에서 왜 중요한가 — Existential Risk + +BlackRock BUIDL이 Decipher DEX에 listing된다고 하자. BUIDL은 §3(c)(7) 면제에 기대어 투자회사 등록을 피하고 있고, 그 면제는 "모든 outstanding securities가 취득 시점에 QP인 자에 의해 *배타적으로*(exclusively) 소유"될 것을 요구한다. + +여기서 A-11의 존재 이유가 드러난다 — 다만 그 이유를 정확히 짚어야 한다. §3(c)(7)(A)의 기준은 "취득 시점(at the time of acquisition)에 QP였는가"이지 "지금도 QP인가"가 *아니다*(§3.5). 따라서 QP freshness의 목적은 *기존 보유자가 현재도 QP인지 계속 감시*하는 것이 **아니라**, *새로운 취득·이전 시점에 buyer가 QP였다고 합리적으로 믿을 수 있는 최신 claim을 확보*하는 것이다. 두 가지를 구분해야 한다 — ① 취득 시점에 적법하게 QP였던 자가 이후 자산이 줄어 QP 지위를 잃는 것(이것만으로는 그 보유가 §3(c)(7)을 곧바로 깨지 않는다), ② stale claim으로 *새로운 취득*을 허용하는 것(이것이 A-11이 막으려는 위험이다). A-11이 stale QP claim으로 새 취득을 통과시키면, 그 새 취득 시점의 "QP였다"는 reasonable belief의 근거가 낡아 면제 유지에 필요한 최신성이 무너진다. 결과의 비대칭이 핵심이다: + +- §3(c)(7) 펀드(BUIDL 등)는 *단 한 명*의 비-QP 보유자가 생기면 *펀드 전체*의 투자회사 등록 면제가 깨진다 — 존재론적(existential) 결과다. 면제 상실의 실질 후과는(2026년 대법원 *FS Credit Opportunities Corp. v. Saba Capital Master Fund, Ltd.*, 608 U.S. \_\_\_ 이후 §47(b) 사적 소권이 아니라) 미등록 투자회사 운영·SEC enforcement·계약 집행가능성(unenforceability)·상업적 unwind·issuer/sponsor 계약 책임에서 나온다(상세는 A-13 §1.4). +- 반면 AI 신선도가 어긋나면 그 *한 건의 매도*에 대한 506(c) 검증 흠결이 문제될 뿐, 펀드 전체가 붕괴하진 않는다. + +그래서 A-11은 결과가 치명적인 쪽(QP)에서 더 좁은 창(1년)으로, 덜 치명적인 쪽(AI)에서 법규가 허용한 최대치(5년)로 막는다. 법규가 허용한 최대치를 QP에 그대로 쓰지 않고 정책으로 더 짧게 잡는 것이 이 부품의 설계 철학이다. + +> **쉽게 말하면.** 출입증을 생각하면 된다. 일반 구역 출입증(AI)은 5년마다 갱신해도 되지만, 단 한 사람이라도 무효 출입증으로 들어오면 *건물 전체가 폐쇄*되는 특수 구역(QP)은 1년마다 갱신을 강제한다. 증명서가 멀쩡해 보여도 *그 사이 자격이 사라졌을 위험*을, 사고가 치명적인 문에서 더 자주 닫아 막는 것이다. + +### 1.5 한국법 비교 (참고) + +"과거 한 시점에 확인한 투자자 자격을 언제까지 신뢰할 것인가"라는 문제의식 자체는 한국 자본시장법에도 있다 — 일반투자자를 전문투자자로 대우하기 위한 확인에는 유효기간 개념이 있고, 자격은 시간이 지나면 재확인이 필요하다는 구조가 그것이다. 다만 미국(AI 5년·법규 / QP 무만료·정책)과 한국의 제도는 근거 조문·기간·대상이 서로 달라 *1:1로 대응하지 않는다.* 본 문서는 직관을 돕는 수준에서만 언급하고, 정밀한 한국법 매핑은 별도 확인 대상으로 둔다(A-11 판정 자체는 전적으로 미국법 기준). + +--- + +## §2. 메타 정보 (Internal Identifier Box) + +| 항목 | 값 | 한 줄 풀이 | +|------|----|-----------| +| 부품 ID | A-11 (versioned 예: `A-11-v1.0`) | 내부 식별자 | +| 부품명 | Claim Freshness (증명 유효기간) | — | +| 검사 대상 | "이 자격 증명이 거래 시점 기준으로 아직 유효기간 내에 있는가" | 한 줄 | +| 도메인 / 카테고리 | A — 신원·자격 (보조) | — | +| 검증 패턴 | 기계 판정형 (Pattern A) — 직접계산 | 서명된 timestamp의 결정론적 산술 비교 (§8) | +| Timing | pre-trade | 거래 전 1회 게이트 | +| Stateful | STATELESS | 누적 상태 없이 claim·tx 시점만으로 판정 | +| 주 활성화 Recipe | R1(Reg D 506(c) Issuance) · R2 중 *buyer-AI를 요구하는* resale(§4(a)(7)) — 핵심 attached(●) | AI 측. **Rule 144 resale은 buyer-AI freshness 비대상**(seller-side·C-01/A-06); R3 부착은 §9.6·§12 | +| Cumulative / cascade | A-03(AI)·A-13(QP) 자격 게이트의 보조(cascade) | 자격 판단은 그쪽, 유효기간만 A-11 | +| claim.basis 관계 | basis-agnostic — basis를 발급하지 않고, 이미 부여된 claim의 유효기간만 검사 | 표준 6종 전부에 동일 적용 (§3.9) | +| 분업 경계 | "반대 정보 부지"(no contrary knowledge)=A-12 · 증권 보유기간=C-01(별개 시계) | §9 | +| 성숙도 | 완료 (cap 정책값·취득시점 정의는 §12) | — | +| 파일·위치 | `A-11_claim-freshness.md` · 산출물/elements/ | — | +======= > **왜 맥락부터 읽어야 하나.** 본 부품은 한 줄로 말하면 *"자격 증명서에 유통기한이 있다"*는 사실을 구현한다. 적격투자자·QP 자격은 *영구적이지 않다* — 사람의 재산은 변하고, 한 번 적격이었다고 평생 적격인 것이 아니다. 그래서 미국법은 자격을 *"취득 시점(at the time of acquisition)"* 기준으로 본다. 본 부품은 이 "취득 시점에 유효해야 한다"는 요건을, *증명서 발급일로부터 너무 오래 지나지 않았는가*로 구현한다. ### 1.1 핵심 개념 — "자격은 스냅샷이다" @@ -88,11 +169,203 @@ tags: [element, A-11, claim-freshness, expiry, walkthrough, spec-sheet, R1, R2, | | 취득시점 timestamp *정의*(정책·ADR) | → 순수 날짜 산수. *검증이 실제로 됐는지*는 claim, *어느 시점을 취득으로 보나*는 정책. +>>>>>>> 8a8c56fb2fa198184523ac3ed682e3cb027fcfbf --- ## §3. ① 법적 근거 (Layer 1 → 2 → 3) +<<<<<<< HEAD +**읽는 법.** 법적 근거는 세 겹이다 — Layer 1(조문, 의회 제정법), Layer 2(규칙, SEC 연방규칙), Layer 3(해석, SEC 발행문서·판례). §3.0.2 표 1의 *종류* 칸이 그대로 Layer에 대응한다(Statute=L1, SEC Rule=L2, SEC Release·Case=L3). 본 절은 freshness 논리가 작동하는 흐름 순서로 배열해 §3.1~§3.6의 번호를 유지하며(중요도순이 아니라 흐름순), 각 조문이 어느 Layer인지는 §3.0.2 표로 확인한다. A-11의 *직접* 근거는 Layer 2의 Rule 506(c)(2)(ii)(E)이고, 그 5년의 출처·취지는 Layer 3의 Release 33-10884가 설명한다. QP 측은 Layer 1(ICA §3(c)(7))이 *신선도를 규정하지 않음*을 확인하는 데 의의가 있다. + +### 3.0 법조문 관계 플로우차트 (개발자용) + +아래 그림은 위 세 Layer의 조문·규칙이 freshness 판정에서 어떻게 맞물리는지를 *논리 관계*로 보여준다(런타임 실행 순서는 §5.0의 그림이 따로 그린다). 핵심은 두 갈래가 서로 다른 근거에서 서로 다른 cap을 얻어 하나의 산술식으로 합류한다는 점이다. + +![그림 3.0 — A-11 법조문 관계 흐름: 검증의무(506(c)(2)(i)·(ii))에서 갈래별 cap 근거(AI=(E) 5년 법규 / QP=§3(c)(7) 무만료→1년 정책), effectiveExpiry 합류, T_tx 비교까지 (개발자용)](A-11_fig30.png) + +### 3.0.1 실제 BUIDL은 어떻게 적용되나 + +BUIDL은 발행 단계에서 Rule 506(c)(AI)와 ICA §3(c)(7)(QP)에 *둘 다* 기댄다(A-13 §3.0.1). 따라서 한 보유자의 claim에는 보통 두 자격이 함께 걸린다 — 그리고 A-11은 그 각각의 유효기간을 다르게 본다. + +- **AI claim(506(c) 축).** BUIDL 초기 발행에서 Trusted Issuer가 투자자를 AI로 검증하고 `verifiedAt`을 찍는다. 이후 재판매 중 *buyer-AI를 요구하는 경로(§4(a)(7))*에서 A-11은 (E)의 5년 창으로 이 claim이 아직 유효한지 본다 — 5년이 지나면 `FAIL_CLAIM_STALE_AI` → 재검증. (같은 증권이 **Rule 144**로 재판매되면 buyer-AI는 요건이 아니므로 A-11-AI가 자동으로 붙지 않는다; 그 경로는 C-01 보유기간·A-06 affiliate 등 seller-side 검사가 중심이다.) +- **QP claim(§3(c)(7) 축).** BUIDL은 §3(c)(7) 펀드이므로 매 취득 시점에 보유자가 QP여야 한다. A-11은 QP claim에 대해 1년 정책 cap을 적용한다 — BUIDL의 면제 붕괴 위험(§1.4) 때문에 AI보다 좁게. 1년이 지나면 `FAIL_CLAIM_STALE_QP` → 재검증. +- **실무 함의.** 같은 지갑의 같은 거래라도 AI 시계(5년)와 QP 시계(1년)가 따로 흐른다. BUIDL처럼 두 축이 겹치는 자산에서는 *더 짧은 QP 시계가 사실상 먼저 만료*되므로, 프런트의 재검증 알림은 QP 기준으로 잡는 게 안전하다(§11.2). + +### 3.0.2 조문 순서·중요성 한눈에 보기 (표 1·표 2) + +아래 두 표가 §3의 지도다. **표 1**(Authority)은 각 근거의 종류(=Layer)·내용·A-11 관련성을, **표 2**(순서·중요성)는 §3.1~§3.6의 읽는 순서(흐름)와 중요성(A-11이 실제로 그걸로 판정하는가)을 보여준다. + +**표 1 — Authority(근거 목록)** + +| 종류 | Authority | 내용 | A-11 관련성 | Direct/Supporting | Official URL | +|------|-----------|------|-------------|-------------------|--------------| +| SEC Rule | Rule 506(c)(2)(i) · 17 C.F.R. §230.506(c)(2)(i) | 모든 purchaser AI 요건 | freshness가 "왜" 필요한지의 배경 | Background | ecfr.gov | +| SEC Rule | Rule 506(c)(2)(ii) · §230.506(c)(2)(ii) | reasonable steps to verify 틀 | 검증의무를 시간축에서 유지 | Supporting | ecfr.gov | +| SEC Rule | Rule 506(c)(2)(ii)(E) · §230.506(c)(2)(ii)(E) | prior-verification 5년 재사용 | AI claim 5년 상한의 직접 근거 | **Direct** | ecfr.gov | +| SEC Rule | Rule 506(c)(2)(ii)(C) · §230.506(c)(2)(ii)(C) | 제3자 확인 "within prior three months" | (C) 발급 시점 신선도 — A-03 영역, A-11 비대상 | Conditional | ecfr.gov | +| Statute | ICA §3(c)(7)(A) · 15 U.S.C. §80a-3(c)(7) | "취득 시점" QP 보유 면제(무만료) | QP 법규상 신선도 없음 → 정책 cap | Supporting | uscode.house.gov | +| Statute | ICA §2(a)(51)(A) · §80a-2(a)(51) | QP 정의(자산 기준, 시간 차원 없음) | QP claim 대상 — 자격 판단은 A-13 | Background | uscode.house.gov | +| Statute | JOBS Act §201(a) · Pub. L. 112-106 | 506(c) 일반청약 허용 + 검증 입법 지시 | 검증의무의 statutory hook(연혁) | Background | govinfo.gov | +| SEC Release | Release No. 33-10884(2020) · 86 FR 3496(본문 3598) | (E) 5년 재사용 신설(2021-03-15 시행) | **AI 5년 상한의 해석 근거** | **Direct** | sec.gov | +| SEC Release | Release No. 33-10824(2020) · 85 FR 64234 | accredited investor *정의* 확대 — (E)의 출처 아님 | AI 카테고리 배경(A-03) | Background | sec.gov | +| SEC Release | Release No. 33-9415(2013) | 506(c) 채택·원칙기반 verify 기준 | 검증 틀 배경 | Background | sec.gov | + +> Direct/Supporting 태그: **Direct** = A-11 판정에 직접 들어가는 근거 / Supporting = 판정을 둘러싼 보강 / Conditional = 특정 조건에서만(여기선 A-03로 위임되는 (C)) / Background = 배경·연혁. + +**표 2 — 조문 순서·중요성 한눈에 보기** + +| 순서 | 조문 | 중요성 | A-11이 그걸로 하는 일 | +|------|------|--------|------------------------| +| §3.1 | Rule 506(c)(2)(i) — 모든 purchaser AI | 보조 | 안 함 — freshness가 필요한 배경(전원 AI) | +| §3.2 | Rule 506(c)(2)(ii) — 검증의무 | 중간 | 검증의무를 시간축에서 유지하는 근거 | +| §3.3 | Rule 506(c)(2)(ii)(E) — 5년 재사용 | **핵심** | AI claim의 5년 cap을 직접 설정 | +| §3.4 | Rule 506(c)(2)(ii)(C) — 3개월 | 구분 | A-11이 *하지 않는* 3개월(발급 시점) 검사 경계 | +| §3.5 | ICA §3(c)(7)(A) — 취득 시점 | **핵심** | QP에 법규상 신선도 부재 확정 → 정책 cap 정당화 | +| §3.6 | ICA §2(a)(51) — QP 정의 | 보조 | 안 함 — QP 정의에 시간 차원 없음 확인 | +| §3.7 | 판례·발행문서(Layer 3) | 보조 | 안 함 — (E) 5년의 해석 근거(Release) | +| §3.8 | Sub-요건 분해 매트릭스 | — | 요건을 원자적 검증 단위로 분해(§5.2와 1:1) | +| §3.9 | ERC-3643·claim.basis 총정리 | — | claim 매핑을 두 표로 | + +**경계 — 이 부품이 다루지 않는 것.** 아래는 같은 거래에 작동하지만 A-11이 아니라 다른 부품·레이어가 책임진다 — 누락이 아니라 소관 분리다. + +- **자격 실체(누가 AI/QP인가)** — Rule 501(a)/ICA §2(a)(51) 실체 판정. **A-03**(AI)·**A-13**(QP) 소관. +- **"반대 정보 부지"(no contrary knowledge, (E) 단서)** — 적신호(red flag) 목록 적용. **A-12** 소관. +- **증권 보유기간(Rule 144(d) 6개월/12개월)** — 대상=증권, 기산점=증권 취득. **C-01** 소관(A-11과 별개 시계). +- **claim 발급 적정성((C)의 3개월 등 `verificationBasis`)** — 발급 1회의 신선도. **A-03** 소관. +- **`T_tx`의 데이터 소스(어느 on-chain 사건이 "취득"인가)** — acquisition registry(CR-3). §5.4·§12의 공동 설계 대상. + +### 3.1 Rule 506(c)(2)(i) — 모든 purchaser는 AI여야 한다 \[출처: ecfr.gov\] + +**핵심 원문:** (i) Nature of purchasers. All purchasers of securities sold in any offering under paragraph (c) of this section are accredited investors. + +**한국어:** (i) 매수인의 성격. 본 조 (c)항에 따른 모든 offering에서 매도되는 증권의 모든 purchaser는 accredited investor이다. + +**쉬운 설명:** 506(c) 공모에서는 사는 사람 전원이 적격투자자여야 한다. "전원·자격"이라는 이 요건이 있기 때문에, 그 자격이 거래 시점에 아직 유효한지(=freshness)를 따질 실익이 생긴다 — 자격이 필요 없다면 그 유효기간도 무의미할 테니. + +**PASS/FAIL 반영:** ✕ 간접 — A-11은 자격 *실체*(실제로 AI인가)를 보지 않는다. 이 조문은 freshness가 왜 필요한지의 배경일 뿐이고, 실체 판정은 A-03 소관이다. + +**ERC-3643 변환:** 이 요건의 충족 자체는 A-03가 `claim.basis`/`verificationBasis`로 기록한다. A-11은 그 claim의 유효기간만 검사하므로 basis 종류와 무관하게(basis-agnostic) 동작한다(§3.9). + +### 3.2 Rule 506(c)(2)(ii) 도입부 — 검증의무(reasonable steps) \[출처: ecfr.gov\] + +**핵심 원문:** (ii) Verification of accredited investor status. The issuer shall take reasonable steps to verify that purchasers of securities sold in any offering under paragraph (c) of this section are accredited investors. The issuer shall be deemed to take reasonable steps to verify if the issuer uses, at its option, one of the following non-exclusive and non-mandatory methods of verifying that a natural person who purchases securities in such offering is an accredited investor; provided, however, that the issuer does not have knowledge that such person is not an accredited investor: + +**한국어:** (ii) 적격투자자 지위의 검증. issuer는 본 조 (c)항에 따른 offering에서 증권을 매수하는 purchaser가 accredited investor임을 검증할 reasonable steps를 취해야 한다. issuer가 그 선택에 따라 아래의 비배타적·비강제적 방법 중 하나를 사용하면 reasonable steps를 취한 것으로 본다 — 다만 issuer가 그 자가 accredited investor가 아니라는 점을 알지 못할 것. + +**쉬운 설명:** issuer는 매수인이 적격투자자임을 "합리적으로 확인"할 의무가 있고, 그 방법으로 (A)~(E)가 예시된다. freshness는 이 확인 의무를 시간축에서 지키는 일이다 — (E)가 없으면 issuer는 매 거래마다 (A)~(D)로 새로 확인해야 하고, (E)의 5년 재사용이 곧 AI claim의 상한이 된다. + +**PASS/FAIL 반영:** ✕ 간접 — 검증의무의 *틀*을 정하는 조문. A-11은 이 의무가 시간이 지나도 유지되는지를 (E)의 재사용 창으로 본다. + +**ERC-3643 변환:** 어느 검증 method를 썼는지는 `claim.verificationBasis`(발급 책임 A-03)에 기록된다 — INCOME / NET_WORTH / THIRD_PARTY / PRIOR_VERIFICATION / HIGH_MINIMUM 등. A-11은 그 method가 (E) 재사용일 때 5년 창을 적용한다. + +### 3.3 Rule 506(c)(2)(ii)(E) — prior-verification 5년 재사용 (A-11의 직접 근거) \[출처: ecfr.gov\] + +**핵심 원문:** (E) In regard to any person that the issuer previously took reasonable steps to verify as an accredited investor in accordance with this paragraph (c)(2)(ii), so long as the issuer is not aware of information to the contrary, obtaining a written representation from such person at the time of sale that he or she qualifies as an accredited investor. A written representation under this method of verification will satisfy the issuer's obligation to verify the person's accredited investor status for a period of five years from the date the person was previously verified as an accredited investor. + +**한국어:** (E) 이 (c)(2)(ii)항에 따라 issuer가 이전에 적격투자자로 검증하기 위한 reasonable steps를 취한 적이 있는 자에 대하여, issuer가 반대되는 정보를 알지 못하는 한, 매도 시점에 그 자가 적격투자자에 해당한다는 서면진술을 받는 것. 이 검증 방법에 따른 서면진술은, 그 자가 이전에 적격투자자로 검증된 날로부터 5년의 기간 동안, 그 자의 적격투자자 지위를 검증할 issuer의 의무를 충족한다. + +**쉬운 설명:** 처음 한 번은 제대로 검증해야 한다(소득·자산·제3자 확인 등 (A)~(D)). 그 뒤에는 — 반대 정보가 없고, 거래 때 "나는 아직 자격이 있다"는 서면진술을 받으면 — 검증일로부터 5년 동안은 다시 처음부터 검증하지 않아도 된다. 즉 5년은 "재검증 없이 기존 검증을 믿어도 되는 기간"이고, 이것이 A-11의 AI claim 상한이다. + +**PASS/FAIL 반영:** ○ 직접 — AI claim의 cap = 5년을 직접 설정한다. `T_tx − verifiedAt > 5년`이면 `FAIL_CLAIM_STALE_AI`(§5.2·§6.2). 근거는 조문의 "for a period of five years from the date the person was previously verified". + +**ERC-3643 변환:** `claim.verifiedAt` + 5년 = AI claim의 freshness 상한. 조문이 기간을 "from the date the person was previously verified"라고 *검증일*에 못박으므로 A-11의 시계는 `claim.verifiedAt`에서 출발한다. "at the time of sale"의 서면진술 = `verificationBasis = PRIOR_VERIFICATION`(발급 책임 A-03). "not aware of information to the contrary" 단서 = A-12(red flag)가 담당. A-11은 시간 창만 본다. + +**적용 범위 (중요 — 좁게 읽을 것):** (E)의 5년은 "AI claim은 5년짜리"라는 일반 유효기간이 *아니다*. 정확히는 — *prior verification method*를 쓰는 경우, 거래 시점 written representation + 반대정보 부지 조건 하에, 이전 검증을 최대 5년 재사용할 수 있다는 뜻이다. 따라서 **A-11의 AI 5년 PASS는 (E)의 *시간 요건*만 충족한다는 뜻이지, Rule 506(c) verification safe harbor 전체가 PASS라는 뜻이 아니다.** 해당 거래에서 실제로 (E) method를 쓰려면 A-03이 sale 시점 written representation을, A-12가 issuer의 contrary information 부재를 함께 확인해야 한다. 또한 (E)는 문언상 "the issuer previously took reasonable steps"로 *issuer-specific*이라, Decipher 공통 Trusted Issuer claim의 cross-issuer 재사용은 별도 구조가 필요하다(§8.3·§12). 마지막으로 (E)를 포함한 (c)(2)(ii)의 열거 방법은 chapeau가 "a natural person who purchases securities"로, Instruction 1이 "natural persons who are purchasers"로 *자연인* 검증에 한정한다 — 따라서 **entity(법인) AI claim**에 5년을 그대로 법규 safe harbor로 볼 수 있는지는 별도 확인 대상이고, 법인은 5년을 내부 freshness policy 또는 principles-based reasonable steps의 보조 기준으로 취급하며 issuer/on-behalf-of 검증기록을 별도 보존한다(§12). + +### 3.4 Rule 506(c)(2)(ii)(C) — "within the prior three months" (A-11이 *하지 않는* 검사) \[출처: ecfr.gov\] + +**핵심 원문 (발췌):** (C) Obtaining a written confirmation from one of the following persons or entities that such person or entity has taken reasonable steps to verify that the purchaser is an accredited investor within the prior three months and has determined that such purchaser is an accredited investor: (1) A registered broker-dealer; (2) An investment adviser registered with the Securities and Exchange Commission; (3) A licensed attorney who is in good standing under the laws of the jurisdictions in which he or she is admitted to practice law; or (4) A certified public accountant who is duly registered and in good standing under the laws of the place of his or her residence or principal office; + +**한국어:** (C) 아래의 자 또는 기관 중 하나로부터, 그 자 또는 기관이 직전 3개월 내에 purchaser가 accredited investor임을 검증하기 위한 reasonable steps를 취했고 그 purchaser가 accredited investor라고 판단했다는 서면확인을 받는 것 — (1) 등록 broker-dealer; (2) SEC에 등록된 investment adviser; (3) 자신이 변호사 자격을 인정받은 관할의 법에 따라 good standing인 면허 변호사; 또는 (4) 자신의 거주지 또는 주 사무소 소재지의 법에 따라 적정하게 등록되고 good standing인 공인회계사. + +**쉬운 설명:** 제3자(BD·RIA·변호사·CPA)가 확인서를 줄 때, 그 확인이 직전 3개월 내 검증에 근거해야 한다는 뜻이다. 이건 확인서 *발급의 적정성* 문제이지, 발급된 claim을 *나중에 재사용*하는 기간 문제가 아니다. (3개월 = 발급 1회의 신선도 / 5년 = 재사용의 신선도 — 층위가 다르다.) + +**PASS/FAIL 반영:** ✕ 간접(경계) — A-11은 (C)의 3개월을 거래마다 강제하지 *않는다*. 3개월은 발급 시점 요건(A-03의 `verificationBasis` 검사 영역)이고, 재사용 상한은 (E)의 5년이다. 이 블록의 목적은 두 기간을 혼동하지 않게 경계 짓는 것이다. + +**ERC-3643 변환:** (C) 충족은 claim 발급 시 A-03가 `verificationBasis = THIRD_PARTY`로 검사한다(A-11 비대상). + +### 3.5 ICA §3(c)(7)(A) — "at the time of acquisition" (QP에 법규상 신선도 없음) \[출처: uscode.house.gov\] + +**핵심 원문 (발췌):** (7)(A) Any issuer, the outstanding securities of which are owned exclusively by persons who, at the time of acquisition of such securities, are qualified purchasers, and which is not making and does not at that time propose to make a public offering of such securities. + +**한국어:** (7)(A) 그 발행 증권 전부가, 해당 증권의 취득 시점에 qualified purchaser인 자들에 의해서만(exclusively) 보유되고, 그 시점에 그 증권의 public offering을 하고 있지도 하려고 하지도 않는 모든 issuer. + +**쉬운 설명:** §3(c)(7) 펀드 면제는 증권을 "취득하는 그 시점에 QP인 사람"에게만 보유시키라고 요구한다. 중요한 건 조문에 "QP 증명이 며칠 뒤 만료된다" 같은 재검증·유효기간 문구가 *전혀 없다*는 점이다 — 시간 기준점은 오직 "취득 시점" 하나다. 그래서 QP claim의 유효기간 상한은 법이 준 값이 아니라 우리가 위험관리로 정하는 값이 된다. + +**PASS/FAIL 반영:** ○ 직접(QP 갈래의 시간 기준점) + 부재 확인 — 비교식의 한쪽 끝(`T_tx`)이 법적 *취득 시점*이어야 함을 이 조문이 정한다. 동시에 만료 조항의 *부재*가 "QP cap은 법규가 아니라 정책"이라는 §5.3·§12의 근거가 된다. + +**ERC-3643 변환:** `T_tx` = 취득 시점(어느 on-chain 사건인지는 §5.4 미결). QP claim의 cap = 1년은 *정책값*이므로 코드 주석·발급기준서에 "비법규"임을 명시한다. 자격 실체 위반 시 `forcedTransfer()`/`recovery` 대상이 되는 것은 A-13 영역이며, A-11은 시간 창만 본다. + +### 3.6 ICA §2(a)(51)(A) — QP 정의 (시간 차원 없음) \[출처: uscode.house.gov\] + +**핵심 원문 (발췌):** (51)(A) "Qualified purchaser" means— (i) any natural person (including any person who holds a joint, community property, or other similar shared ownership interest in an issuer that is excepted under section 80a-3(c)(7) of this title with that person's qualified purchaser spouse) who owns not less than $5,000,000 in investments, as defined by the Commission; + +**한국어:** (51)(A) "Qualified purchaser"란 다음을 말한다 — (i) Commission이 정의하는 investments를 $5,000,000 이상 보유한 모든 자연인(§80a-3(c)(7)로 예외되는 issuer에 대해 그 자의 qualified purchaser인 배우자와 joint·community property·기타 유사 공유 지분을 보유한 자를 포함). + +**쉬운 설명:** QP 정의는 자산 기준($5,000,000 이상 등)의 *충족 여부*만 정한다. (i) 자연인 외에 (ii) 가족회사, (iii) 신탁, (iv) $25,000,000 재량운용 보유자 등의 갈래가 있으나, *어느 갈래에도 "며칠 안에 만료된다" 같은 시간 차원이 없다*. 자격 갈래 판단 자체는 A-13 소관이다. + +**PASS/FAIL 반영:** ✕ 간접 — 자격 *실체*(어느 QP 갈래인가)는 A-13이 판단한다. A-11은 그 판단 결과 claim의 유효기간만 본다. 시간 차원의 *부재*가 §3.5와 함께 정책 cap의 근거다. + +**ERC-3643 변환:** QP 갈래는 `claim.basis`의 표준 6종(§3.9) 중 하나로 A-13이 기록한다. A-11은 그 값과 무관하게(basis-agnostic) `claimType = QP`이면 cap = 1년(정책)을 적용한다. ($25M (A)(iv) 경로는 조문이 "institution"이라 쓰지 않으므로 본 문서는 "기관"으로 라벨하지 않는다.) + +### 3.7 판례·발행문서 (Layer 3) + +조문·규칙이 모호한 부분은 SEC 발행문서·판례가 메운다. A-11에 가장 중요한 것은 (E) 5년 재사용의 *출처*를 담은 채택 release다. + +**SEC Release No. 33-10884 (2020) — 사모 면제 체계 현대화 (adopting release)** \[출처: sec.gov\] + +2020년 SEC가 사모·소액 면제 체계를 정비하며 채택한 final rule 묶음이다(2020-11-02 채택; 86 FR 3496, 본문 3598; 2021-03-15 시행; File No. S7-05-20). (accredited investor *정의* 확대는 별건인 Release No. 33-10824(85 FR 64234, 2020-10-09)로, (E)의 출처가 아니다 — 두 release를 혼동하지 말 것.) A-11의 관점에서 핵심은 **Rule 506(c)(2)(ii)(E)의 신설** — 반복 투자자에 대한 검증 부담을 줄이기 위해, 이미 검증한 자를 서면진술·반대정보 부지 전제로 *검증일부터 5년간* 재사용할 수 있게 한 것이다. 즉 A-11의 "5년"이 임의 숫자가 아니라 이 release가 명시한 기간임을 확인하는 1차 근거다. 직접 PASS/FAIL 규칙은 §3.3의 조문이 담지만, "왜 5년인가·기산점이 왜 검증일인가"의 취지 해석은 이 release에서 나온다. + +**SEC Release No. 33-9415 (2013) — Rule 506(c) 채택.** JOBS Act §201(a)를 시행해 일반청약 허용 506(c)와 그 대가인 "reasonable steps to verify" 원칙기반 기준을 채택한 release다. A-11이 시간축에서 지키는 "검증의무" 자체의 배경이다. + +**§3(c)(7) 측에는 해석상 신선도 자료가 없다.** QP 쪽은 조문(§3(c)(7)·§2(a)(51))에 유효기간이 없고, 이를 "며칠"로 좁히는 SEC 해석·판례도 없다. 따라서 QP cap(1년)은 *해석의 산물이 아니라 Decipher 정책*이며, 그 사실을 §12에 명시적 open issue로 둔다. + +### 3.8 Sub-요건 분해 매트릭스 ("claim is fresh" — §5.2 분기와 1:1) + +"증명이 신선하다"를 더 못 쪼개는 검증 단계로 분해하면, 각 단계가 §5.2 pseudocode 분기와 1:1로 대응한다. 각 행은 소리 내 읽어도 문장이 되도록 풀어 썼다. + +| 단계 | 원자 조건(풀어 읽기) | 근거 | §5.2 분기(실패 코드) | Decipher 복잡도 | +|------|----------------------|------|----------------------|-----------------| +| S1 존재 | claim이 존재하고 `verifiedAt`을 보유한다 | 산술 전제 | `verifiedAt == 0` → `FAIL_NO_VERIFIED_AT` | 낮음 — 필드 유무 | +| S2 진위 | `claim.issuer`·서명이 유효하다(=`verifiedAt`을 신뢰할 근거) | Rule 2a51-1(h)·§8·§10 L2 | 전제(위조 시 A-03/A-13 소관) | 낮음 — 서명 검증 | +| S2.5 유형 | `claimType`이 AI 또는 QP로 식별된다 | cap 선택 전제 | `claimType ∉ {AI,QP}` → `FAIL_UNKNOWN_CLAIM_TYPE` (fail-closed) | 낮음 — enum 확인 | +| S3 신선도 | `T_tx − verifiedAt`가 cap(type) 이내다 | (E) 5년 / 정책 1년 | `T_tx > effectiveExpiry` → `FAIL_CLAIM_STALE_AI/_QP` | 중간 — timestamp 산술 | +| S4 갈래(만료 우선) | issuer-set `claim.expiry`가 더 짧으면 그것이 먼저 만료다 | 발급자 자율 | `effectiveExpiry == claim.expiry` → `FAIL_CLAIM_EXPIRED` | 낮음 — min 비교 | +| (밖) | "반대 정보 부지"(no contrary knowledge)를 확인한다 | (E) 단서 | — | → **A-12** | +| (밖) | 자격 *실체*(실제 AI/QP인가)를 판정한다 | Rule 501(a)/§2(a)(51) | — | → **A-03 / A-13** | + +**해설:** A-11은 S1·S3·S4를 책임진다. S2는 전제로 신뢰하되 1차 검증은 자격 부품이 하고, "반대 정보 부지"와 자격 실체는 형제 부품에 위임한다. A-13/A-08과 달리 look-through·수동검토 단계가 없어 복잡도가 전반적으로 낮다 — 순수 시간 산술이기 때문이다. 이 네 단계가 §4(어떤 증거가 필요한가)와 §5(어떻게 판정하는가)의 토대다. + +### 3.9 ERC-3643 변환·claim.basis 총정리 + +A-11의 법조문이 실제 ERC-3643/T-REX 토큰에서 어떻게 구현되는지를 두 표로 정리한다. 핵심 원칙 하나 — A-11은 자격 basis를 *발급하지 않는다*. 이미 A-03/A-13이 부여한 claim의 유효기간만 검사하므로, 아래 첫 표는 "시간 필드가 온체인 어디에 대응하는가", 둘째 표는 "A-11이 claim.basis 표준 6종 전부에 basis-agnostic으로 적용된다"를 보여준다. + +**표 1 — 조항 → ERC-3643 변환** + +| 조항 | ERC-3643 변환 | 간략 설명 | +|------|----------------|-----------| +| Rule 506(c)(2)(ii)(E) 5년 | AI claim 유효창 = `verifiedAt` + 5년 | 시계 시작점은 `claim.verifiedAt`(발급=A-03) | +| ICA §3(c)(7)(A) 취득 시점 | 비교 기준 시점 = `T_tx` | 어느 on-chain 사건인지 §5.4 미결 | +| §3(c)(7) 만료 조항 부재 | QP claim 유효창 = `verifiedAt` + 1년(정책) | 코드 주석에 "비법규" 명시 | +| issuer-set 만료 | `claim.expiry`(더 짧으면 우선) | `effectiveExpiry = min(verifiedAt+cap, claim.expiry)` | +| freshness 통과 | 거래 진행(누적 AND의 한 항) | A-11 자체는 `forcedTransfer()`·`recovery` 미호출 | +| freshness 실패 | `FAIL_CLAIM_STALE_*`/`_EXPIRED` → 재검증 전 차단 | 새 `verifiedAt`·서명 발급 시 시계 재시작 | + +**표 2 — claim.basis(표준 6종) → A-11 적용 (basis-agnostic)** + +| claim.basis (표준 6종) | 발급 부품 | claimType | A-11 cap | A-11이 보는 필드 | +|------------------------|-----------|-----------|----------|------------------| +| `QP_NATURAL` | A-13 | QP | 1년 (정책) | `verifiedAt`, `claim.expiry` | +| `QP_FAMILY_COMPANY` | A-13 (+A-09 look-through) | QP | 1년 (정책) | 동일 | +| `QP_TRUST` | A-13 (+A-09) | QP | 1년 (정책) | 동일 | +| `QP_INSTITUTIONAL` | A-13 | QP | 1년 (정책) | 동일 | +| `QP_QIB` | A-13 (Rule 2a51-1(g)(1) deemed-QP) | QP | 1년 (정책) | 동일 | +| `KNOWLEDGEABLE_EMPLOYEE_EXCLUSION` | A-13 (Rule 3c-5 제외 갈래) | QP | 1년 (정책) | 동일 | +| (AI 측) `verificationBasis` = INCOME/NET_WORTH/THIRD_PARTY/PRIOR_VERIFICATION/HIGH_MINIMUM | A-03 | AI | 5년 (법규 (E)) | `verifiedAt`, `claim.expiry` | + +핵심: A-11은 basis 값을 *읽어 cap을 고르는 게 아니라*, `claimType`(AI/QP)만으로 cap을 고른다. basis는 A-03/A-13이 정하고, A-11은 그 결과가 어느 basis든 동일 산술을 돌린다. +======= ### 3.1 Layer 1 — Statutory base > **§ 3(c)(7)(A) — "at the time of acquisition"** [🔗 [Cornell LII](https://www.law.cornell.edu/uscode/text/15/80a-3)] @@ -129,11 +402,370 @@ tags: [element, A-11, claim-freshness, expiry, walkthrough, spec-sheet, R1, R2, | 절대 상한 | cap ≤ 5년 | 506(c)(2)(ii)(E) | | 취득 시점 정의 | 어느 block timestamp가 "acquisition"인가 | (Open Issue·변호사) | | 금액 신선도(보조) | investments 평가가 최근인가 | 2a51-1(d) | +>>>>>>> 8a8c56fb2fa198184523ac3ed682e3cb027fcfbf --- ## §4. ② 입력 사실 — 판정에 필요한 데이터 +<<<<<<< HEAD +### 4.1 본 부품이 판정하려면 어떤 증거가 필요한가 + +A-11이 "이 증명은 아직 유효하다"고 말하려면 네 질문의 답이 증거로 모여 있어야 한다. + +1. **claim이 존재하는가?** (없으면 판정 대상 자체가 없음 — A-03/A-13의 `NO_CLAIM` 소관) +2. **그 claim에 `verifiedAt`이 있는가?** (없으면 산술 불가) +3. **어느 유형인가?** (AI vs QP — cap 선택) +4. **취득 시점(`T_tx`)은 언제인가?** (비교의 기준 시점 — 어느 on-chain 사건인지 §5.4) + +A-11은 *새로 검증하지 않는다* — 위 증거를 읽어 산술 비교만 한다. + +### 4.2 Data field — DEX가 실제로 읽는 항목 + +| 필드 | 유형 | 의미 | 출처 | +|------|------|------|------| +| `claim.verifiedAt` | timestamp | 검증 시점(freshness 기산점) | Trusted Issuer 서명 claim | +| `claim.expiry` | timestamp (opt) | 발급자 지정 만료 — 있고 더 짧으면 우선 | claim | +| `claim.claimType` / `topic` | enum | AI vs QP (cap 선택) | claim topic (ACCREDITED_INVESTOR / QP) | +| `claim.verificationBasis` | enum | INCOME / NET_WORTH / THIRD_PARTY / PRIOR_VERIFICATION / HIGH_MINIMUM 등 | claim (A-03 발급정책) | +| `claim.issuer` / `claim.signature` | address / bytes | 신뢰기관·서명 — `verifiedAt`을 신뢰하는 근거 | claim | +| `T_tx` (이 이전의 sale/acquisition 시점) | timestamp | freshness 비교 기준 시점 — AI=sale, QP=acquisition; DEX는 동일 settlement block(§5.4) | tx context | + +### 4.3 수집 경로 (5단계 흐름) + +1. **매수인이 Trusted Issuer에서 자격 검증을 받는다** — 소득·자산·제3자 확인 또는 (E) 서면진술. +2. **Trusted Issuer가 `verifiedAt`을 찍고 claim에 서명한다** — 이때의 timestamp가 freshness 기산점이 된다(임의 미래/과거 날짜 금지, §10 L2). +3. **claim이 매수인 ONCHAINID에 anchor된다** — 서명된 off-chain 검증 결과의 on-chain 표지. +4. **거래 시점에 DEX가 claim과 `T_tx`를 읽는다** — 추가 조회·외부 oracle 없이 온체인 데이터만. +5. **A-11이 산술 판정한다** — `T_tx` vs `verifiedAt + cap`(및 `claim.expiry`). + +### 4.4 갈래별 증거 — 필수 확인 항목 전체 + +아래는 "예시"가 아니라 A-11이 판정 전에 *반드시* 확인하는 항목의 전체 표다. 공통 행은 모든 거래에서, ①②③은 갈래별로 요구된다. + +| 구분 | 필수 확인 항목 | 근거 | 없으면 | +|------|----------------|------|--------| +| **공통** | claim 존재 (ONCHAINID anchor) | §4.2 | A-03/A-13 `NO_CLAIM` (A-11 밖) | +| **공통** | `claim.issuer`·서명 유효 (신뢰기관) | §3.8 S2 · §10 L2 | 서명오류 = 자격 부품 소관 | +| **공통** | `claim.verifiedAt` 필드 존재 | §3.8 S1 | `FAIL_NO_VERIFIED_AT` | +| **공통** | `claimType` 식별 가능 (AI/QP) | §4.1·§5.2 | `FAIL_UNKNOWN_CLAIM_TYPE` (cap 선택 불가 → fail-closed, AI 기본 처리 금지) | +| **AI 갈래 ①** | `verifiedAt` timestamp 값 | §3.3 (E) | `FAIL_NO_VERIFIED_AT` | +| **AI 갈래 ②** | `verificationBasis` (어느 (A)~(E) method) | §3.2 | (E) 재사용 가정 — A-03 발급정책 확인 | +| **AI 갈래 ③** | (E) 경로면 거래 시점 서면진술 존재 (발급=A-03) | §3.3 (E) | 발급 흠결 = A-03 | +| **QP 갈래 ①** | `verifiedAt` timestamp 값 | §3.5·§3.6 | `FAIL_NO_VERIFIED_AT` | +| **QP 갈래 ②** | `claim.expiry` (있으면 더 짧은 쪽 우선) | §5.2 | 없으면 정책 cap 1년 적용 | +| **QP 갈래 ③** | 자격 실체 (어느 QP 갈래) — A-13 결과 참조 | §3.6·§3.9 | 실체 FAIL = A-13 (A-11 밖) | + +--- + +## §5. ③ 판정 로직 — 어떻게 PASS/FAIL이 결정되는가 + +### 5.0 판정 흐름 플로우차트 + +아래 그림은 §5.2의 `check_A11` pseudocode를 *런타임 실행 순서*로 옮긴 것이다(§3.0의 그림이 법조문 *논리 관계*를 그린 것과 짝을 이룬다). + +![그림 5.0 — A-11 판정 로직 흐름: verifiedAt 존재 → cap(type) → 더 짧은 expiry → T_tx 비교 → PASS/FAIL (개발자용)](A-11_flow.png) + +### 5.1 전체 흐름 (사람 말로) + +1. **claim 존재 전제.** A-11은 자격 claim이 있다는 전제 하의 보조 검사다. claim 자체 부재는 A-03/A-13의 `NO_CLAIM` 소관 — A-11 사유가 아니다. +2. **`verifiedAt` 있는가?** 없으면 산술 불가 → `FAIL_NO_VERIFIED_AT`. +3. **cap 선택.** `claimType`으로: AI → 5년, QP → 1년(정책). `claimType`이 AI/QP가 아니면 `FAIL_UNKNOWN_CLAIM_TYPE` — AI로 기본 처리하지 않는다(fail-closed). +4. **더 짧은 만료 우선.** `claim.expiry`가 있고 `verifiedAt + cap`보다 이르면 → `effectiveExpiry = claim.expiry`, 아니면 `verifiedAt + cap`. +5. **비교.** `T_tx ≤ effectiveExpiry`이면 PASS, *초과*하면 FAIL(stale 또는 expired). + +### 5.2 Pseudocode + 단계별 해설 + +**검사 순서 한눈에 보기 — 왜 이 순서인가** + +| 순서 | 검사 | 무엇을 확인 | 실패 코드 | 비용 | 왜 이 위치인가 | +|------|------|-------------|-----------|------|----------------| +| 1 존재 | `verifiedAt` 있나 | 산술 기산점 유무 | `FAIL_NO_VERIFIED_AT` | 매우 낮음 | 기산점 없으면 판정 대상 자체가 없음 | +| 2 진위 | 서명·issuer 신뢰 | `verifiedAt`을 믿을 근거 | (위임) A-03/A-13 | 낮음(암호 검증) | 위조면 `verifiedAt`을 신뢰 불가 → 모든 하류의 전제 | +| 3 유형·신선도 | claimType으로 cap 선택 후 `T_tx − verifiedAt` ≤ cap | 유형 식별(미식별 시 fail-closed) → 유효창 내인가 | `FAIL_UNKNOWN_CLAIM_TYPE` · `FAIL_CLAIM_STALE_AI/_QP` | 낮음(enum+timestamp) | 싸고 탈락 잘 되는 게이트 | +| 4 갈래(만료 우선) | `claim.expiry` 더 짧은가 | 발급자 만료 우선 | `FAIL_CLAIM_EXPIRED` | 매우 낮음(min) | 마지막 min 비교 | + +**fig50 ↔ pseudocode 대조 (같은 순서를 다르게 그릴 뿐)** + +| 검사 | §5.2 pseudocode | §5.0 흐름도(fig50) | +|------|-----------------|---------------------| +| 1 존재 | `if verifiedAt == 0` | 입력 직후 첫 diamond | +| 2 진위 | 전제(자격 부품) | "claim 보유"에 묶어 표현 | +| 3 신선도 | cap·effectiveExpiry 계산 | cap 분기 + 비교 노드 | +| 4 만료 우선 | `min` 분기 | 더 짧은 expiry diamond | + +``` +function check_A11(claim, T_tx): + # 1단계: 존재 — 기산점 유무 + if claim.verifiedAt == 0: + return (false, FAIL_NO_VERIFIED_AT) + + # 2단계: 진위 — 서명·issuer는 전제(자격 부품이 1차 검증, §8·§10 L2) + + # 3·4단계: claimType 확정 → 신선도 + 갈래(만료 우선) + # CAP_AI = 5년 (법규: Rule 506(c)(2)(ii)(E) — "time of sale") + # CAP_QP = 1년 (정책: 비법규 — §3(c)(7)은 "time of acquisition"·무만료) + if claim.claimType not in {AI, QP}: # fail-closed: AI로 기본 처리 금지 + return (false, FAIL_UNKNOWN_CLAIM_TYPE) + cap = (claim.claimType == QP) ? CAP_QP : CAP_AI + regulatoryExpiry = claim.verifiedAt + cap + + effectiveExpiry = (claim.expiry != 0 && claim.expiry < regulatoryExpiry) + ? claim.expiry + : regulatoryExpiry + + if T_tx > effectiveExpiry: # strict 초과(>)만 stale + if effectiveExpiry == claim.expiry: + return (false, FAIL_CLAIM_EXPIRED) + return (false, (claim.claimType == QP) ? FAIL_CLAIM_STALE_QP + : FAIL_CLAIM_STALE_AI) + return (true, OK) +``` + +- **1단계 해설:** claim에 `verifiedAt`이 없으면 유효기간을 계산할 기준점이 없다 → `FAIL_NO_VERIFIED_AT`. 대개 claim 스키마 결함이므로 발급자에게 누락을 보고한다. +- **2단계 해설:** A-11은 `verifiedAt`을 *신뢰*해 산술한다. 그 신뢰의 근거는 `claim.issuer` 서명이다. 서명 위조·미신뢰 발급기관 문제는 자격 부품(A-03/A-13)이 1차로 걸러내므로 A-11은 이를 전제로 둔다(§8·§10 L2). +- **3단계 해설:** 여기서 (E)의 "from the date ... verified"와 §3(c)(7)의 "at the time of acquisition"을 함께 본다. `claimType`으로 cap을 고르고(AI 5년/QP 1년), `T_tx`가 유효창을 *초과*하면 stale이다. QP는 존재론적 위험 때문에 더 좁은 1년을 쓴다. **단 AI 5년 PASS는 (E)의 시간 요건 충족일 뿐**이며, 그 거래가 (E) safe harbor를 실제로 쓰려면 written representation(A-03)·contrary-information 부재(A-12)가 함께 충족돼야 하고, cross-issuer 재사용이면 issuer agency 구조가 필요하다(§3.3·§8.3). +- **4단계 해설:** 발급자가 claim에 더 짧은 `claim.expiry`를 지정했으면 그것이 규제·정책 상한보다 먼저 만료다 → `FAIL_CLAIM_EXPIRED`. 즉 "규제/정책 상한"과 "발급자 자율 만료" 중 더 이른 쪽이 이긴다. + +### 5.3 Threshold 매트릭스 (포함성·strict 초과 명시 — 경계 사양의 핵심) + +| 항목 | 값 | 근거 | +|------|----|------| +| AI claim cap | 5년 (inclusive — 정확히 5년 시점은 유효) | Rule 506(c)(2)(ii)(E) "for a period of five years" | +| QP claim cap | 1년 (inclusive) | Decipher 정책(§1.4)·비법규 — §3(c)(7) 취득시점·무만료 | +| issuer-set 만료 | `claim.expiry`가 더 짧으면 그것 우선 | 발급자 자율 | +| stale 판정 | `(T_tx − verifiedAt) > cap` 일 때만 (strict 초과) | 아래 reasoning | + +**strict 초과(>) 해석 reasoning:** "for a period of five years from the date"는 검증일 기준 5년 *기간 내*가 유효라는 뜻이다. 따라서 정확히 5년 시점은 기간에 *포함*(PASS)이고, 그를 *초과*할 때만 stale(FAIL)이다 — 한국어로 `>`. 조문의 "not less than"류가 `≥`(이상, inclusive)으로 읽히는 것과 같은 결로, 여기서는 유효창의 끝을 inclusive로 잡고 그 *초과*만 FAIL 처리한다. §7 경계 테스트에서 명시 확인한다. + +**단 granularity는 구현 사양 + open issue.** 법문은 "for a period of five years from the **date**"로 *날짜* 기준이고 eCFR도 초 단위 granularity를 정하지 않는다. 따라서 "정확히 5년 시점 PASS / 5년+1초 FAIL"은 *초 단위 timestamp를 쓰는 구현에서의 경계 사양*으로 이해한다(정확히 cap 종료 시점까지 PASS, 초과 시 FAIL) — strict 초과(`>`) 원칙 자체는 유지하되, "date" 기준 법문과 블록 timestamp 초 단위 구현 사이의 granularity는 §12 Open Issue(#5)로 둔다(법규가 초 단위를 확정했다는 뜻이 아니다). + +> **결정적 권고.** `CAP_AI = 5년`은 법규 상한을 그대로 채택한다. `CAP_QP`는 1년을 채택한다 — §3(c)(7)의 존재론적 위험(비-QP 1인 = 펀드 면제 붕괴) 대비 보수적 완충이다. 다만 이 1년은 *법규가 아니라 정책*임을 코드 주석·발급기준서·§12에 반드시 명시한다. 정책값을 법규처럼 보이게 두는 것은 본 프로젝트의 인용 정확성 원칙에 어긋난다. + +### 5.4 거래 시점(`T_tx`) — 블록체인의 어느 시점을 "매도/취득"으로 보나 (미결 · 최우선) + +(E)는 5년을 "from the date ... verified"로 재고, 비교 시점은 "at the time of sale"의 거래다. §3(c)(7)도 "at the time of acquisition". 즉 비교식의 한쪽 끝(`T_tx`)은 법적 매도·취득 시점이어야 한다. + +**변수명 주의 — AI는 sale, QP는 acquisition.** (E)의 AI 재사용 창은 문언상 "at the time of *sale*" 기준이고, §3(c)(7)의 QP 요건은 "at the time of *acquisition*" 기준이다. 두 시점은 법 개념상 이름이 다르지만, DEX의 이전(transfer)은 매도와 취득이 같은 정산에서 일어나므로 *동일한 settlement block timestamp*로 구현할 수 있다. 그래서 본 문서·pseudocode는 이 하나의 값을 `T_tx`(이 이전의 법적 sale/acquisition 시점)로 부른다 — `T_acq`가 아니라 `T_tx`로 둔 것은 AI 쪽을 "취득"으로만 부르는 어색함을 피하기 위함이다. 전통 금융에서는 계약 체결 시점이 명확하지만, 블록체인 DEX에는 후보가 여럿이다 — 주문서에 사인한 순간과 등기가 찍힌 순간 중 무엇을 "취득"으로 볼 것인가의 문제다. + +| 시점 후보 | "취득 시점" 부합도 | 운영 리스크 | +|-----------|--------------------|-------------| +| Trade matching(오프체인 주문 체결) | 불일치 — 정산 미확정 | 높음(정산 실패 가능) | +| mempool 진입(proposed) | 불일치 — 포함 보장 없음 | 높음(re-org·교체) | +| 블록 포함·확정(confirmed) | **최적** — 법적 execution에 가장 부합 | 낮음(단일 블록 확정) | +| 완결성(finalized) | 보수적 부합 — 필요 이상 늦음 | 가장 낮음 | + +**Decipher 권고:** swap 체결(정산) 블록의 `block.timestamp`를 `T_tx`로 사용한다. 경계 거래(예: 만료 30초 전 매칭 → 30초 후 confirmation)에서는 이 기준상 `FAIL_CLAIM_STALE_*`가 날 수 있으므로 프런트에서 조기 안내·재발급을 유도한다(§11.2). 정확히 어느 timestamp가 법적 "acquisition time"인지는 acquisition registry(CR-3) 설계·변호사 확인 대상이며, **A-08 OD-1·A-13 §12 OD-1과 동일한 공동 설계 쟁점**이다(§12). + +### 5.5 비결정성 → 결정성 — 본 부품 구현의 본질 (A-13과의 차이) + +A-13의 QP 판정은 사람의 판단(가족관계·목적·평가)을 내포해 "비결정적 법 판단을 결정적 증명서 확인으로 캡슐화"하는 구조다. **A-11은 그 반대편에 서 있다 — A-11 자체는 처음부터 순수 결정론이다.** timestamp 두 개(현재 블록 시간, `verifiedAt`)의 차이를 cap과 비교하는 산술뿐이라, 같은 입력이면 언제나 같은 결과다. look-through도, 경계의 법적 판단도, 수동검토도 없다. + +그러나 결정적인 통찰이 하나 있다 — **A-11의 결정성은 그 입력(`verifiedAt`)의 신뢰를 빌려온다.** `verifiedAt`이 "실제 검증 완료일"을 정확히 담고 있다는 보장은 A-11의 산술이 아니라 Trusted Issuer의 서명(그리고 그 서명을 뒷받침하는 Rule 2a51-1(h)의 reasonable belief)에서 온다. 즉 A-11은 *결정적 게이트*이되, 그 게이트가 재는 눈금(`verifiedAt`)의 진실성은 *비결정적 판단*(누가 언제 검증했는지에 대한 발급자의 실사)에 뿌리를 둔다. + +> **쉽게 말하면(비유):** A-11은 서명된 문서에 찍힌 *유효기간 도장*을 확인하는 일이다. "오늘이 도장 날짜 + 5년을 넘었는가"는 기계가 명확히 답할 수 있는 결정적 계산이다 — 하지만 그 도장 날짜가 진짜인지(위조·오기입이 아닌지)는 도장을 찍은 사람(Trusted Issuer)을 믿기 때문에 성립한다. 기계는 날짜 계산만, 날짜의 진실성은 사람이 보증한다. + +--- + +## §6. ④ 거절·예외 처리 — 검사에 실패하면 어떻게 되는가 + +### 6.1 전체 흐름 (사람 말로) + +A-11의 실패는 전부 "증명이 오래돼 더는 못 믿는다"는 한 종류의 문제로 수렴한다. 그래서 처리도 단순하다 — 거래를 차단하고, 매수인에게 *재검증*을 안내한다. A-13처럼 "대기(suspend) 후 사람이 판단"하는 경계 케이스가 없다(§6.3). 아래 표는 코드가 아니라 시나리오 풀이로 읽으면 된다. + +### 6.2 Failure codes 5종 + +| Code | 언제 뜨나 | 무엇이 문제인가 | 매수인이 할 일 | Decipher 측 조치 | +|------|-----------|-----------------|----------------|-------------------| +| `FAIL_NO_VERIFIED_AT` | `verifiedAt` 없음 | 증명에 검증일이 없어 유효기간 산정 불가 | Trusted Issuer에서 재검증 | claim 스키마 결함 — 발급자에 누락 보고 | +| `FAIL_CLAIM_STALE_AI` | AI claim, `T_tx > verifiedAt+5y` | AI 증명이 5년 경과로 만료 | Trusted Issuer에 갱신 요청 | frontend에 갱신 안내 | +| `FAIL_CLAIM_STALE_QP` | QP claim, `T_tx > verifiedAt+1y` | QP 증명이 1년(정책) 경과로 만료 | Trusted Issuer에 갱신 요청 | 갱신 안내(비법규 cap 명시 로그) | +| `FAIL_CLAIM_EXPIRED` | issuer-set `claim.expiry` 경과 | 발급자 지정 기한 경과 | Trusted Issuer에 갱신 요청 | 발급자 정책 만료 로그 | +| `FAIL_UNKNOWN_CLAIM_TYPE` | `claimType`이 AI/QP 아님(빈 값·오류) | 유형 미식별로 cap 선택 불가 | Trusted Issuer에 claim 유형 정정 요청 | 스키마/발급 오류 — fail-closed(AI 기본 처리 금지) 로그 | + +**해설:** 시간 만료 계열(`STALE_AI`/`STALE_QP`/`EXPIRED`/`NO_VERIFIED_AT`)의 cure는 하나뿐이다 — *재검증*(Trusted Issuer가 다시 검증 → 새 `verifiedAt`·서명). 자격 실체가 살아 있으면 재검증 후 같은 거래가 통과된다. `FAIL_UNKNOWN_CLAIM_TYPE`은 시간 문제가 아니라 유형 미식별이며, cure는 Trusted Issuer의 claim 유형 정정이다 — A-11은 `claimType`이 AI/QP가 아니면 *AI(더 관대한 5년)로 기본 처리하지 않고* fail-closed로 막는다(관대한 쪽으로의 오처리 방지). 자격 실체 자체의 문제(비-AI·비-QP)는 A-03/A-13의 실패 코드이지 A-11이 아니다. + +### 6.3 왜 A-11에는 Manual Review Path가 없는가 + +A-13/A-08에는 자동 판정이 불가능한 경계 케이스를 사람이 처리하는 `REVIEW_*_UNCERTAIN` 경로가 있다(look-through 회색지대 등). **A-11에는 이 경로가 없다** — 시간 산술에는 "애매해서 사람이 판단할" 여지가 없기 때문이다. `T_tx`와 `verifiedAt`이 주어지면 결과는 유일하게 결정된다. 따라서: + +- **manual override 금지.** 운영자가 만료를 임의로 연장할 수 없다 — 연장하면 그 자체가 법적 검증 흠결이 된다. +- **유일한 cure는 재검증.** 사람의 개입은 "판정을 뒤집는 것"이 아니라 "새 검증으로 새 `verifiedAt`을 만드는 것"뿐이다(§11.3). +- **경계 거래의 처리는 UX로.** 만료 임박 거래의 실패는 프런트의 조기 재검증 안내로 예방한다(§11.2), 사후 수동검토로 구제하지 않는다. + +(유일하게 사람이 개입할 지점은 `T_tx`의 *정의* 자체 — 어느 on-chain 사건을 취득으로 볼지 — 이며, 이는 판정이 아니라 설계 결정이라 §5.4·§12의 open issue다.) + +### 6.4 Error message — 매수인 노출용 vs 내부 기록용 분리 + +매수인에게는 일반적이고 행동 가능한 메시지만, 구체적 실패 사유는 내부 audit log에만 남긴다. + +| Code | 매수인 노출(frontend) | 내부 기록(audit) | +|------|------------------------|-------------------| +| `FAIL_NO_VERIFIED_AT` | "자격 증명에 검증일이 없어 확인할 수 없습니다. 재검증이 필요합니다." | claim 스키마 결함 + 매수인 주소 | +| `FAIL_CLAIM_STALE_AI` | "적격투자자 증명의 유효기간(5년)이 지났습니다. 재검증 후 다시 시도하세요." | 506(c)(2)(ii)(E) 5년 경과 + `verifiedAt` + 경과일 | +| `FAIL_CLAIM_STALE_QP` | "적격매수자 증명의 유효기간(1년)이 지났습니다. 재검증이 필요합니다." | 정책 cap(비법규) 경과 + `verifiedAt` + 경과일 | +| `FAIL_CLAIM_EXPIRED` | "자격 증명이 발급자 지정 기한을 지나 만료됐습니다." | `claim.expiry` < 상한, 발급자 만료 | +| `FAIL_UNKNOWN_CLAIM_TYPE` | "자격 증명의 유형을 확인할 수 없습니다. 발급기관에 문의해 주세요." | claimType 미식별(빈 값/오류) + fail-closed 처리 | + +**이유:** 매수인에겐 "무엇을 하면 되는지"(재검증)만 노출하고, 내부 로그엔 *어느 cap·어느 근거*(법규 5년 / 정책 1년 / 발급자 만료)로 막혔는지를 남겨 운영 진단·감사에 쓴다. + +--- + +## §7. ⑤ 테스트 케이스 — 스펙이 제대로 작동하는지 검증 + +### 7.1 Test 1 — Pass-AI (명백한 통과) + +AI claim, `verifiedAt` = 2년 전, `T_tx` = 지금. cap = 5년(법규), `T_tx − verifiedAt = 2년 ≤ 5년`. → **PASS.** 반복 투자자가 (E) 서면진술로 검증을 재사용하는 전형적 정상 경로다. + +### 7.2 Test 2 — Pass-QP (명백한 통과) + +QP claim, `verifiedAt` = 10개월 전. cap = 1년(정책), `10개월 ≤ 1년`. → **PASS.** BUIDL 같은 §3(c)(7) 자산에서 QP는 더 좁은 1년 창으로 관리되지만 아직 유효. + +### 7.3 Test 3 — Fail-AI-stale (5년 경과) + +AI claim, `verifiedAt` = 6년 전. `6년 > 5년`. → `FAIL_CLAIM_STALE_AI`. (E)의 5년 재사용 창이 끝났으므로 재검증(새 `verifiedAt`) 전까지 차단. + +### 7.4 Test 4 — Fail-QP-stale (정책 1년 경과) + +QP claim, `verifiedAt` = 14개월 전. `14개월 > 1년`. → `FAIL_CLAIM_STALE_QP`. 주의 — 이건 *정책* cap 경과이지 법규 위반이 아니다. 내부 로그에 "비법규 cap"임을 남긴다. + +### 7.5 Test 5 — Boundary (정확히 상한 / 1초 초과) + +AI claim, `T_tx − verifiedAt`가 정확히 5년(초 단위 동일)이면 → **PASS**(기간 *포함*). 5년 + 1초면 → `FAIL_CLAIM_STALE_AI`. QP도 동일 논리(정확히 1년 PASS / 초과 FAIL). 이는 *초 단위 timestamp 구현에서의 경계 사양*이며, strict 초과(`>`)만 stale이라는 §5.3 원칙을 명시 확인한다 — 다만 "date" 기준 법문 대비 초 단위 granularity 자체는 §12 Open Issue(#5)다(법규가 초 단위를 확정한 것은 아님). + +### 7.6 Test 6 — Issuer-expiry 우선 + +AI claim, `claim.expiry` = 발급 + 1년(규제 상한 5년보다 짧음), `T_tx` = 13개월. `effectiveExpiry = min(verifiedAt+5y, claim.expiry) = claim.expiry`. `13개월 > 1년`. → `FAIL_CLAIM_EXPIRED`(더 짧은 발급자 만료가 이김). "규제 상한이 5년이니 통과"로 처리하면 오작동. + +### 7.7 Test 7 — No-verifiedAt (스키마 결함) + +`verifiedAt` = 0. → `FAIL_NO_VERIFIED_AT`. 판정 대상 시점이 없으므로 산술 이전에 탈락. 발급자에 스키마 누락 보고. + +### 7.8 Test 8 — Cascade 독립성 (A-11은 시간만) + +**8a (독립):** AI claim은 fresh인데 A-03 실체 판정이 FAIL(미지원 카테고리). → A-11 자체는 **PASS**(시간은 유효), 거래는 A-03에서 FAIL. A-11이 자격 실체를 대신 판단하지 않음을 확인. + +**8b (역):** claim이 stale인데 A-03 실체는 PASS. → A-11 **FAIL** → 거래 차단. 누적 AND이므로 시간·실체 둘 다 통과해야 진행. A-11의 시간 게이트가 실체 통과를 뒤집지는 않지만, 자기 항에서 막는다. + +--- + +## §8. (α) 증명서 확인형 패턴 — A-11은 "직접계산"형 + +### 8.1 검증 3패턴 중 A-11의 자리 + +Decipher의 검증 방식은 세 패턴이다 — (A) 직접계산(코드가 스스로 산술·비교), (B) 증명서 확인(판단은 밖, 코드는 서명된 claim 확인), (C) oracle(외부 데이터 주입). A-11은 **(A) 직접계산**형이다. + +### 8.2 왜 A-11이 직접계산인가 + +A-03/A-13이 "증명서형(B)"인 것은 자격 실체 판단(소득·자산·look-through)이 온체인 산술로 재현 불가하기 때문이다. A-11이 다루는 것은 그런 판단이 아니라 *timestamp 두 개의 차이*다 — 현재 블록 시간과 `verifiedAt`. 이건 온체인에서 결정론적으로 완결되므로 외부 판단(증명서)이나 외부 데이터(oracle)가 필요 없다. A-11은 A-03/A-13이 만든 증명서의 *시간 필드 하나*를 계산하는 보조 모듈이다. + +### 8.3 법적 토대 — 왜 `verifiedAt` 신뢰가 정당한가 + +A-11이 산술하는 `verifiedAt`은 Trusted Issuer가 서명한 값이다. 그 신뢰의 법적 토대는 두 겹이다 — ① Rule 2a51-1(h)/506(c)의 reasonable belief·reasonable steps 구조가 "발급자가 검증하고 그 결과를 신뢰"하는 모델을 뒷받침하고, ② (E)의 "written representation at the time of sale"이 재사용 기간(5년)의 근거를 준다. 즉 A-11의 결정론적 계산은 이 신뢰 모델 위에서만 의미를 갖는다(§5.5·§10). + +**두 가지 좁힘 (제출 방어 포인트).** (가) *AI 5년의 성격.* A-11의 AI 5년 PASS는 (E)의 *시간 요건*만 충족한다 — (E) method 전체 성립은 sale 시점 written representation(A-03)과 contrary-information 부재(A-12)를 함께 요구하므로, A-11 단독 PASS를 "506(c) 검증 safe harbor 전체 PASS"로 읽으면 안 된다. (나) *issuer-specificity / cross-issuer 재사용.* (E)는 "**the issuer** previously took reasonable steps"로 원칙상 *그 issuer*가 이전에 검증한 자에 관한 조항이다. Decipher는 Trusted Issuer가 여러 issuer를 대신해 claim을 발급하므로, 그 claim을 다른 issuer가 (E) safe harbor로 *재사용*하려면 — ① Trusted Issuer가 해당 issuer의 agent/on-behalf-of로 검증했거나, ② 새 issuer가 그 verification package를 자기 reasonable steps로 채택했다는 *운영 기록*이 있어야 한다. 이 구조가 없으면 A-11의 5년 cap은 *법규상 safe harbor가 아니라 Decipher 내부 freshness policy*로만 기능한다(§12 OD). + +--- + +## §9. (β) Cross-Element·Cross-Recipe Coordination — 혼자 움직이지 않는다 + +### 9.1 책임 경계 (A-11이 하는 것 / 넘기는 것) + +**A-11이 직접 책임지는 것:** claim에 `verifiedAt`이 있는지 / `(T_tx − verifiedAt)`가 cap(type) 이내인지 / issuer-set `claim.expiry`가 더 짧으면 그것으로 막는지. + +**A-11 밖의 문제:** 자격 실체(A-03·A-13) · "반대 정보 부지"(A-12) · 증권 보유기간(C-01, 별개 시계) · claim 발급 적정성((C) 3개월, A-03) · `T_tx` 데이터 소스(acquisition registry, CR-3). + +### 9.2 Element Cascade Map + +``` +자격 게이트 (A-03 AI / A-13 QP) + └── (보조 cascade) ──▶ A-11 (claim 유효기간) + │ 전제: A-04(신원 중복)·B-01(manifest 정합) + └─ 위임: A-12(반대정보) · C-01(증권 보유기간, 별개) +``` + +A-11은 자격 게이트의 하위 보조로 호출된다. A-08 §9.2의 cascade 목록도 A-11을 "증명 만료"로 명시한다 — A-11은 여러 자격·라우팅 경로에서 공통으로 얹히는 시간 검사다. + +### 9.3 Recipe Orchestration (거래 맥락 활성) + +- **R1(발행) · R2 중 §4(a)(7) resale:** A-03(AI)에 붙어 AI claim 5년 창을 검사(현 매트릭스 ●). **Rule 144 resale**은 buyer-AI가 요건이 아니라 A-11-AI가 자동 부착되지 않는다 — 그 경로는 C-01(보유기간)·A-06(affiliate) 등 seller-side 검사가 담당한다. +- **R3(펀드):** A-13(QP)에 붙어 QP claim 1년 창을 검사(부착은 §9.6 audit·§12 대상). +- 모든 경로에서 A-11은 누적 AND의 한 항으로 동작하며, 다른 부품 뒤·앞 어디에 두어도 결과가 같다(STATELESS). + +### 9.4 Conflict Resolution — A-11은 상충하지 않는다 + +A-11은 다른 부품의 PASS를 뒤집거나 막지 않는다 — 시간 게이트는 누적 AND의 독립 항이다. 자격 실체가 PASS여도 시간이 stale이면 A-11이 자기 항에서 FAIL을 낼 뿐, 이는 충돌이 아니라 정상적 AND 결합이다(§7.8b). + +### 9.5 Manifest 무결성 (B-01) + +A-11이 쓰는 cap(AI 5년·QP 1년)과 자산의 Manifest(펀드 면제 통로·claim 스키마)는 정합해야 한다. B-01이 Manifest hash·facts 정합을 검사하며, cap 정책값(특히 QP 1년)이 발급기준서·Manifest와 어긋나면 시간 검사의 전제가 흔들린다. + +### 9.6 \[해설\] A-11의 R3(QP-freshness) 부착과 매트릭스 갭, 그리고 공유 T_tx + +부착 매트릭스(08 자료 §2.5.4)는 A-11을 R1·R2에만(●) 표기한다. 그러나 A-11의 freshness 로직은 QP claim(R3 / A-13)에도 적용되며(본 문서 §1.3·§3.5·§5.3의 1년 cap), A-13 claim 스키마도 "claim이 아직 유효한지"를 전제한다. 따라서 (가) A-11이 R3의 QP-freshness까지 *공유 라이브러리*로 담당하도록 매트릭스를 보강하거나, (나) A-13이 QP-freshness를 *내장*하도록 명시하거나 — 둘 중 하나로 정리해야 한다. **권고: (가)** — Element는 Recipe-agnostic 공유 라이브러리이고, 같은 시간 검사를 두 곳에 복제하면 cap 갱신이 분기될 위험이 있다. + +또 하나 — `T_tx`(어느 on-chain 사건이 법적 취득·매도인가)는 A-11만의 문제가 아니다. **A-08 OD-1·A-13 §12 OD-1이 동일 쟁점을 공유**하며(entity 임계값 freshness·activeRecipes 기준 시점도 같은 시점 정의에 걸린다), acquisition registry(CR-3)로 *공동 설계*해야 한다(§12). + +--- + +## §10. (γ) 3-Layer Solution — 증거 신뢰를 세 겹으로 + +### 10.1 왜 3겹 구조인가 + +A-11의 결정론적 산술은 `verifiedAt`이라는 눈금의 신뢰 위에서만 성립한다(§5.5). 그 신뢰를 세 겹으로 나눈다 — 진술·발급·점검. + +### 10.2 각 층의 법적 토대 + +- **Layer 1 · Self-Attest(자기진술).** (E)의 "written representation at the time of sale" — 투자자가 지금도 자격을 갖췄다고 서면진술. A-11은 이 진술의 진위를 판단하지 않는다; 진술의 존재는 `verificationBasis`로 A-03이 기록하고, A-11은 시간 창만 본다. +- **Layer 2 · Trusted Issuer(신뢰 발급).** `verifiedAt`은 Trusted Issuer가 검증 시점에 찍고 서명한다. A-11의 산술은 이 서명된 timestamp를 신뢰하는 데서 성립한다(Rule 2a51-1(h) reasonable belief). 발급기준서는 `verifiedAt`을 *실제 검증 완료일*로 정확히 기록하도록 규정해야 한다(임의 미래/과거 날짜 금지). 나아가 AI 쪽에서 (E) safe harbor를 쓰려면 발급기준서가 Trusted Issuer의 issuer agency/on-behalf-of 관계 또는 새 issuer의 verification 채택을 문서화해야 한다 — 그렇지 않으면 5년은 내부 정책일 뿐 법규상 재사용이 아니다(§8.3·§12). +- **Layer 3 · Spot-Check(주기 점검).** cap 만료 전 재검증 트리거(§11). 만료 임박 claim을 사전 갱신해 freshness를 유지한다. + +### 10.3 층 간 escalation 규칙 + +만료가 임박하면(예: cap의 90% 경과) 프런트가 재검증을 안내(L3→L1·L2로 순환)한다. 이미 만료됐으면 거래 차단 후 재검증만이 회복 경로다 — 층을 건너뛰는 override는 없다(§6.3). + +### 10.4 Liability(책임) 분배 — `verifiedAt` 오기입으로 만료를 오판한 경우 + +Trusted Issuer가 `verifiedAt`을 실제보다 늦은 날짜로 잘못 찍어(또는 위조), 실제로는 만료된 증명이 A-11 산술상 유효로 나온 경우 — 책임은 A-11(코드)이 아니라 그 눈금을 보증한 Trusted Issuer(발급)와, 진술이 허위였다면 self-attest(투자자)에 있다. A-11의 책임 범위는 "주어진 `verifiedAt`으로 정확히 산술했는가"에 한정된다. 요약: 발급 정확성 = Trusted Issuer / 시간 산술 = A-11(코드) / 재검증 유도 = 운영층 / 진술 진위·반대정보 = 투자자·A-12. + +--- + +## §11. (δ) Frontend·Off-chain Operator Layer — 4-Layer로는 안 끝난다 + +### 11.1 왜 별도 레이어가 필요한가 + +A-11의 온체인 판정은 "만료됐는가"만 답한다. "만료 전에 미리 갱신하게 하는" 일은 온체인 밖 프런트·운영의 몫이다 — 그래야 경계 거래의 실패를 사전 예방한다. + +### 11.2 Frontend — 만료 임박 알림 + +claim이 cap의 일정 시점(예: 만료 30일 전)에 들면 프런트가 보유자에게 재검증을 안내한다. QP(1년)는 AI(5년)보다 갱신 주기가 짧으므로 알림 빈도를 다르게 잡고, BUIDL처럼 두 축이 겹치는 자산은 *더 짧은 QP 시계* 기준으로 안내한다(§3.0.1). + +### 11.3 Off-chain Operator — 재검증 플로우 + +보유자 → Trusted Issuer 재검증(소득·자산·전문가 확인 또는 (E) 서면진술) → 새 `verifiedAt`·서명 → claim 갱신. 갱신 즉시 freshness 시계가 재시작한다. + +### 11.4 (수동검토 큐 없음 — 자동 갱신으로 대체) + +A-13/A-08과 달리 A-11에는 수동검토 큐가 없다(§6.3). 사람의 개입은 "판정 재량"이 아니라 "재검증으로 새 눈금 생성"뿐이므로, 운영은 만료 임박 claim의 *자동 갱신 유도*에 집중한다 — 큐에 쌓아 사람이 판단하는 구조가 아니다. + +### 11.5 아키텍처 함의 + +A-11은 온체인에서 가볍고(산술만) 결정적이지만, 그 가벼움은 오프체인의 정확한 발급·성실한 갱신 운영을 전제한다. 즉 "가벼운 온체인 게이트 + 무거운 오프체인 신뢰·운영"이라는 Decipher 아키텍처의 전형을 A-11이 가장 순수하게 보여준다. + +--- + +## §12. Open Issues — 변호사·설계 follow-up + +| # | 질문(무엇을 결정해야 하나) | 왜 필요한가 | Priority | 해소 경로(권고) | +|---|---------------------------|-------------|----------|-----------------| +| 1 | QP cap = 1년은 정책(비법규) — §3(c)(7)은 취득시점·무만료. 1년이 적정 완충인가 | 정책값을 법규처럼 두면 안 됨; 발급기준서·코드 주석에 "정책" 명시 필요 | 높음 | Decipher 정책 결정 + 변호사 confirm | +| 2 | `T_tx` = 어느 on-chain 사건(§5.4) — mint / 풀 예치 / swap / 정산 중 법적 "매도·취득" | 비교식의 한쪽 끝; **A-08 OD-1·A-13 §12 OD-1과 동일 쟁점**, acquisition registry(CR-3) 직결 | ⚠ 즉시 | 변호사 + 개발 공동(CR-3) | +| 3 | A-11의 R3(QP-freshness) 부착(§9.6) — 매트릭스는 R1·R2만 표기 | 같은 시간검사 중복/cap 분기 위험; 공유 라이브러리 원칙과 충돌 | 높음 | 매트릭스 보강 (Recipe 명세 시) | +| 3b | **AI (E) 5년의 cross-issuer 재사용** — 공통 Trusted Issuer claim을 여러 issuer가 (E) safe harbor로 재사용할 수 있는가(§8.3) | (E)는 "the issuer previously"로 issuer-specific; agency/채택 구조 없으면 5년은 법규 safe harbor가 아니라 내부 정책 | 높음 | Trusted Issuer를 각 issuer의 agent로 지정 또는 verification 채택 운영기록 설계 + 변호사 confirm | +| 3c | **entity AI claim에 (E) 5년 적용** — 법인 AI claim에 (E)의 5년 재사용을 그대로 법규 safe harbor로 볼 수 있는가(§3.3) | (c)(2)(ii) 열거 방법·Instruction 1은 "natural persons who are purchasers" 검증용((E) 포함); 법인 AI는 원칙기반 reasonable steps 소관이라 5년을 법규 safe harbor로 단정하면 공격 여지 | 높음 | entity AI claim은 5년을 내부 freshness policy / principles-based reasonable steps 보조 기준으로 취급 + issuer/on-behalf-of 검증기록 보존 + 변호사 confirm | +| 4 | 고액최소투자 경로 freshness — 이 경로는 **SEC Staff Position**(2025 CorpFin no-action letter + C&DI)이지 binding rule이 아니며, Rule 506(c)(2)(ii)(E)의 5년 safe harbor 기간을 *자동으로 갖지 않는다*(재사용 기간 미규정) | (E) 5년이 지배하는지, 더 짧은 정책인지(A-03 미결 #2·#4와 조율) | 중간 | Decipher + A-03(staff position임을 명시) | +| 5 | cap 경계 granularity(§5.3·§7.5) — 5년/1년 경계를 초/일 중 무엇으로 | 조문은 "for a period of five years from the **date**"만, 초 단위 미명시 → §5.3·§7.5의 "정확히 5년 PASS/초과 FAIL"은 초 단위 구현 사양 | 중간 | Decipher 구현 결정 | +======= ### 4.1 어떤 데이터가 필요한가 본 부품은 *새 증거를 모으지 않는다.* 이미 발급된 claim의 *날짜 필드*와 *거래 시점*만 비교한다. @@ -291,11 +923,55 @@ A-09(look-through) ── 구성원 claim ──▶ A-11: 각 구성원 claim 3. **만료 경계 inclusive/exclusive** 🟡 — 만료일 당일 거래의 통과 여부(§5.4). 변호사 확인. 4. **QP의 5년 신뢰 적용 여부** 🟡 — 506(c)(2)(ii)(E)의 5년 신뢰는 *accredited 검증* 규정이다. QP(§3(c)(7)) 맥락에 동일 5년 신뢰가 적용되는지, 아니면 더 보수적이어야 하는지 변호사 확인. 5. **금액 신선도 vs 신원 신선도 분리** 🟡 — investments 평가(2a51-1(d)) 신선도와 자격 검증 신선도를 별도 cap으로 둘지. +>>>>>>> 8a8c56fb2fa198184523ac3ed682e3cb027fcfbf --- ## §13. 파일명 규칙 (Naming Convention) +<<<<<<< HEAD +- Element: `A-11_claim-freshness.md` · 위치 `산출물/elements/` +- 빌드 산출: 동명 `.docx`(pandoc + CJK 패치). 도표 2종 임베드 — `A-11_fig30.png`(§3.0 법조문 관계 흐름) · `A-11_flow.png`(§5.0 판정 로직 흐름). + +--- + +— 이하 부록 A·B는 A-13 양식엔 대응 슬롯이 없는 A-11 고유 내용으로 보존한다. — + +## 부록 A. Authority Verification Table — Official URLs Only + +| Issue | Correct Authority | Direct/Supporting | A-11 반영 | Official URL | +|-------|-------------------|-------------------|-----------|--------------| +| 506(c) 일반광고·검증의무 입법 지시 | JOBS Act §201(a), Pub. L. 112-106 | Background | 검증의무 statutory hook(연혁) | govinfo.gov | +| 모든 purchaser AI 요건 | Rule 506(c)(2)(i), 17 C.F.R. §230.506(c)(2)(i) | Background | freshness 필요성 | ecfr.gov | +| reasonable steps to verify 틀 | Rule 506(c)(2)(ii), 17 C.F.R. §230.506(c)(2)(ii) | Supporting | 검증 틀 | ecfr.gov | +| prior-verification 5년 재사용 | Rule 506(c)(2)(ii)(E), 17 C.F.R. §230.506(c)(2)(ii)(E) | **Direct** | AI claim 5년 상한 | ecfr.gov | +| 제3자 확인 "within prior three months" | Rule 506(c)(2)(ii)(C), 17 C.F.R. §230.506(c)(2)(ii)(C) | Conditional | (C) 발급 시점 신선도 (A-03) | ecfr.gov | +| qualified purchaser 정의 | ICA §2(a)(51), 15 U.S.C. §80a-2(a)(51) | Background | QP claim 대상(자격=A-13) | uscode.house.gov | +| "취득 시점" QP 보유 면제 (무만료) | ICA §3(c)(7), 15 U.S.C. §80a-3(c)(7) | Supporting | QP 법규상 신선도 없음 → 정책 | uscode.house.gov | +| (E) 5년 재사용 신설(2021-03-15 시행) | Release No. 33-10884(2020), 86 FR 3496(본문 3598) | **Direct** | AI 5년 상한 해석 근거 | sec.gov | +| accredited investor 정의 확대(2020) — (E) 출처 아님 | Release No. 33-10824(2020), 85 FR 64234 | Background | AI 카테고리 배경(A-03) | sec.gov | +| 506(c) 채택·원칙기반 verify | Release No. 33-9415(2013) | Background | 검증 틀 배경 | sec.gov | + +## 부록 B. 안전한 표현 / 위험한 표현 (데모 가이드) + +**써도 되는 표현** + +- A-11은 이미 발급된 자격 증명이 거래 시점에 유효기간 내인지 확인하는 기계적 pre-trade gate입니다. +- AI 증명의 5년 상한은 Rule 506(c)(2)(ii)(E)에 근거합니다(거래 시점 서면진술·반대정보 부지 전제). +- QP 증명의 1년 상한은 Decipher 정책이며, ICA §3(c)(7)은 취득 시점 기준일 뿐 법규상 만료 조항이 없습니다. +- A-11은 자격을 판단하지 않습니다 — 자격 실체는 A-03/A-13이, 시간만 A-11이 봅니다. +- 만료된 증명의 유일한 cure는 재검증(새 `verifiedAt`)이며, 운영자가 만료를 임의 연장할 수 없습니다. + +**위험한 표현 (피하기)** + +- ✕ "QP 증명은 법적으로 1년마다 만료된다" — 1년은 정책이지 법규가 아닙니다. +- ✕ "A-11이 보유기간을 검사한다" — 그건 C-01(Rule 144)입니다. A-11은 증명 유효기간입니다(다른 시계·다른 조문). +- ✕ "검증 한 번이면 영구 유효" — AI는 5년, QP는 1년(정책), 그 후 재검증이 필요합니다. +- ✕ "(C)의 3개월이 A-11의 상한이다" — 3개월은 발급 시점 요건(A-03)이고, A-11의 재사용 상한은 (E)의 5년입니다. +- ✕ "A-11이 애매한 경우 사람이 판단한다" — 시간 산술은 결정적이라 수동검토가 없습니다; 유일한 개입은 재검증입니다. + +문서 끝. +======= ``` 파일명 규칙: A-XX_부품영문이름.md (Element) 본 부품: A-11_claim-freshness.md · 산출물/elements/ @@ -306,3 +982,4 @@ A-09(look-through) ── 구성원 claim ──▶ A-11: 각 구성원 claim ## §14. 변경 로그 - [2026-06-17] v1.0 작성. *자격 증명서 유효기간*("at the time of acquisition") 검사 부품 심층 walkthrough 신설. ① 규제 맥락(자격=스냅샷 → §3(c)(7)(A) 시점 기준·506(c) 5년 신뢰·2a51-1(d) → 블록체인 취득 시점 난점 → 한국 전문투자자 확인 유효기간 anchor), ② 법적 근거(§3(c)(7)(A)·506(c)(2)(ii)(E)·2a51-1(d)·SEC C&DIs), ③ 입력(verifiedAt·acquisition_ts·cap), ④ 판정 로직(만료 pseudocode·5년 신뢰 구간·취득 timestamp 4후보·경계 inclusive), ⑤ 테스트 6종(pass·만료·경계·5년신뢰·5년초과·timestamp경계), 패턴 A(날짜 산수, 단 입력 시점은 정책), A-03/A-13/A-09 공유 유틸 coordination, 3-Layer, frontend(만료 임박·경계 조기안내·갱신), Open Issues 5종(취득 timestamp ADR·cap값·경계·QP 5년신뢰·금액vs신원 신선도). **인용 검증은 후속 일괄 패스 대상.** A-13 §5.2와 cap·timestamp 기준 일치 전제. 취득 timestamp는 ADR 고정 필요. +>>>>>>> 8a8c56fb2fa198184523ac3ed682e3cb027fcfbf diff --git a/docs/compliance/elements/A-12.md b/docs/compliance/elements/A-12.md new file mode 100644 index 0000000..c165b9e --- /dev/null +++ b/docs/compliance/elements/A-12.md @@ -0,0 +1,742 @@ +# ELE.A-12_red-flag-knowledge-bar + +# A-12 모름 항변 차단(Red Flag Knowledge Bar) — 부품 심층 인수인계 문서 (Walkthrough) + +**이 문서는 무엇인가.** Decipher RWA DEX의 컴플라이언스 부품 중 하나인 「모름 항변 차단」 부품(내부 식별자 A-12)을, 미국 증권 규제를 처음 보는 사람도 이해할 수 있도록 풀어 쓴 인수인계 문서다. 개발자·법무팀·외부 자문 변호사·학회원이 각자 작업의 base로 그대로 쓸 수 있도록 — ① 이 규제가 어디서 왔고 왜 존재하는지, ② 어떤 사실을 입력받아 ③ 어떤 로직으로 판정하고 ④ 적신호가 잡히면 어떻게 처리하며 ⑤ 어떤 테스트로 검증하는지를, 기술 요소마다 풀이를 함께 붙여 설명한다. + +**한 줄 정의.** A-12는 *"이 거래에서 발행자·매도인·플랫폼이 나중에 '몰랐다'고 항변할 수 없게 만드는 객관적 적신호(red flag)가 존재하는가"*를 거래 직전에 스크리닝한다. 적신호가 잡히면 **차단하지 않고** 표시(flag)하여 운영자 검토 큐로 라우팅한다 — 이것이 A-12가 다른 자격 부품(A-03·A-06·A-11)과 결이 다른 이유다. 저들은 서명된 자격 증명서를 확인하는 게이트지만, A-12는 그 증명서가 액면상 유효해도 그것으로 가려지지 않는 위험 신호를 감시하는 부품이다. + +**자체완결 원칙.** 이 문서는 다른 내부 문서를 열지 않아도 단독으로 이해되도록 작성했다. 인용은 미국 연방법·연방규칙·SEC·판례 등 외부 공식 자료만 사용한다. + +**출처 기준 (Version 1.0, 2026-07-22).** 본 부품의 미국 증권법 인용은 다음 1차 출처를 기준으로 한다 — 15 U.S.C. §77b(a)(11)·§77d·§77q(a)는 uscode.house.gov 현행본(§77d는 "in effect on June 5, 2026", §77q는 "in effect on May 10, 2026"), 17 CFR §230.502·§230.506·§240.10b-5는 eCFR 현행본(Title 17 up to date as of 2026-07-17), JOBS Act §201(a)(Pub. L. 112-106)와 SEC Release No. 33-9415(78 FR 44771, 2013-07-24)는 각각 uscode.house.gov note와 sec.gov다. Rule 144·Rule 405 자구는 A-06 검증분(ecfr.gov, 2026-07-01 현행)을 재사용한다. 제정법 출처는 uscode.house.gov로 통일했으며, govinfo.gov 딥링크도 동일한 1차 출처다. + +**테스트 토큰 전제 (중요).** 본 문서는 실제 BlackRock BUIDL의 발행 표준, transfer architecture, 또는 현재 운영 조건을 단정하지 않는다. 본 프로젝트는 BUIDL-like §3(c)(7) private fund interest를 ERC-3643 테스트 토큰으로 모델링하여, 자격 게이트와 나란히 작동하는 red-flag pre-trade 스크리닝을 검증하는 것이다. 이하 'BUIDL'·'ERC-3643' 관련 서술은 모두 이 모델링 전제 하의 것이다. + +## §1. 규제 맥락 — 이 부품이 다루는 규제는 어디서 왔는가 (Context First) + +**왜 맥락부터 읽어야 하나.** A-12는 특정 조문 하나를 판정하는 부품이 아니다. 미국 증권법 여러 곳에 흩어져 있는 하나의 공통 원리 — *"면제·안전항·항변이 행위자의 '합리적 신뢰(reasonable belief)' 또는 '알 만한 이유(reason to know)'에 걸려 있을 때, 객관적 적신호를 무시하면 그 신뢰·항변이 깨진다"* — 를 코드로 옮긴다. 그래서 조문만 들이밀면 왜 이런 부품이 필요한지 알 수 없다. 큰 그림(미국 증권법의 구조 → 이 원리가 생긴 이유 → 두 개의 다른 축 → 우리 시스템에서의 의미)을 먼저 깐다. + +### 1.1 미국 증권법의 4개 기둥(4 Pillar)과 A-12의 자리 + +미국 연방 증권규제는 한국처럼 하나의 「자본시장법」으로 통합돼 있지 않고, 시대별로 따로 만들어진 4개의 큰 법률이 각자 다른 국면을 맡는다. 쉽게 말하면 한국은 증권 규제가 한 건물 안의 여러 부서라면, 미국은 길 건너 따로 선 4개의 건물이다. + +| 기둥(법률) | 맡는 국면 | 핵심 관심사 | 한국법 대응(직관용) | +| --- | --- | --- | --- | +| Securities Act of 1933(1933년법) | 증권의 발행·재판매(거래) | "등록 없이 팔아도 되나 + 사기 아닌가" | 자본시장법 증권신고서·공모·부정거래 규제 | +| Securities Exchange Act of 1934(1934년법) | 유통·거래소·중개업자(2차 시장) | "시세조종·사기 없는 공정한 시장인가" | 자본시장법 유통시장·불공정거래 규정 | +| Investment Company Act of 1940(ICA) | 집합투자기구(펀드) 자체 | "펀드 구조가 투자자를 착취하지 않는가" | 자본시장법 집합투자(펀드) 규제 | +| Investment Advisers Act of 1940 | 투자자문업자 | "남의 돈을 굴리는 자의 신인의무" | 자본시장법 투자자문·일임업 | + +본 부품(A-12)은 첫 번째와 두 번째 기둥에 걸쳐 있다. 구체적으로 두 갈래다. **재판매 면제 축**은 1933년법 §4(a)(1)·§4(a)(7)과 그 하위 Reg D Rule 502(d)에서 나온다 — "이 재판매가 등록 없이 적법하려면 매도인이 underwriter(유통 도관)가 아니어야 하고, 그러려면 매수인이 되팔 의도가 있는지 등을 reasonable inquiry로 확인해야 한다." **사기·시세조종 축**은 1933년법 §17(a)와 1934년법 §10(b)·Rule 10b-5에서 나온다 — "발행·매매에서 기망·부실표시·시세조종을 하면 안 되고, 적신호를 알면서 눈감은(reckless) 것도 여기에 포함된다." + +**쉽게 말하면:** 같은 토큰 한 건의 거래라도 A-12가 보는 것은 "자격이 있느냐"(그건 A-03·A-13의 몫)가 아니라 *"이 거래에 나중에 '몰랐다'로 빠져나갈 수 없는 위험 신호가 있느냐"*다. A-13이 "이 사람은 펀드를 살 자격이 있는가"를 묻는 검사원이라면, A-12는 "액면상 서류는 멀쩡한데, 이 거래에 눈에 띄는 이상한 점은 없는가"를 살피는 감시원이다. + +### 1.2 왜 이 원리가 존재하는가 — 등록 면제의 조건과 willful blindness + +1933년법의 대원칙은 "증권을 팔려면 SEC에 등록(공시)하라"이고, §4·§17은 그 예외와 한계를 정한다. 여기서 A-12의 뿌리가 되는 두 가지 긴장이 나온다. + +**첫째, 등록 면제는 공짜가 아니다 — 도관(conduit) 방지.** 사모(§4(a)(2)·506)로 산 사람이 그걸 대중에게 되팔면, 결국 등록 없는 공모가 완성된다. 그래서 법은 재판매하는 자가 "underwriter"(§2(a)(11): 발행자로부터 *유통 목적으로* 매수했거나 발행자를 위해 파는 자)가 아닐 것을 요구한다. 재판매 면제(§4(a)(1)·§4(a)(7)·Rule 144)는 이 underwriter 리스크에 대한 안전항이고, 그 핵심은 *"매도인이 도관 역할을 하고 있지 않은가"*의 판단이다. Rule 502(d)가 발행자에게 "매수인이 underwriter가 아님을 보증할 reasonable care"와 그 예시인 "reasonable inquiry(매수인이 자기 것으로 사는지, 남을 위해 사는지 확인)"를 요구하는 것이 그 구현이다. 적신호 — 예컨대 방금 받은 토큰을 즉시 되파는 패턴 — 를 무시하면 이 reasonable care가 깨진다. + +**둘째, '몰랐다'는 그냥 통하지 않는다 — willful blindness.** 사기금지 조항(§17(a)·§10(b)·Rule 10b-5)의 위반에는 scienter(고의)가 필요한데, 미국 법원은 여기에 **recklessness(중대한 부주의)** 를 포함시킨다. 즉 명백한 위험 신호를 의도적으로 외면하는 "willful blindness(고의적 외면)"는 "몰랐다"는 항변으로 면책되지 않는다. 플랫폼이 자전거래·시세조종의 뚜렷한 패턴을 보고도 기계적으로 통과시키면, 나중에 "우리는 자동화된 코드일 뿐이라 몰랐다"고 해도 그 무지 자체가 reckless로 평가될 수 있다. + +**세 문장 요약.** ① 면제·안전항·항변은 행위자의 상태(무엇을 알았거나 알 만했는가)에 걸린다. ② 법은 그 상태를 판단할 때 객관적 적신호를 무시한 자에게 "몰랐다"를 허용하지 않는다. ③ 따라서 컴플라이언스 시스템은 자격 서류만 확인하고 끝낼 게 아니라, 서류로 가려지지 않는 적신호를 별도로 감시해야 한다 — 그 감시가 A-12다. + +### 1.3 두 개의 다른 축 — 재판매 안전항과 사기금지 + +A-12를 헷갈리게 만드는 지점은, 이 부품이 *서로 다른 두 법적 축*을 하나의 적신호 감시로 묶는다는 데 있다. 두 축은 목적도, 걸리는 시점도, 위반의 효과도 다르다. + +| 구분 | 축 A — 재판매 안전항(underwriter 회피) | 축 B — 사기·시세조종 금지 | +| --- | --- | --- | +| 근거 | §4(a)(1)·§4(a)(7)+§4(d) · Rule 502(d) · §2(a)(11) | §17(a) · §10(b)+Rule 10b-5 · §9(a) | +| 묻는 질문 | "이 재판매가 등록 면제를 유지하는가(매도인이 도관 아닌가)" | "이 거래가 사기·기만·시세조종이 아닌가" | +| A-12가 보는 적신호 | 되팔 의도·지배관계 미공개·자격 claim과 모순되는 사실 | 자전거래 클러스터·임계 회피 분할·NAV 이탈 가격 | +| 위반의 효과 | 면제 상실 → §5 등록 위반(발행자·매도인 책임) | 사기 책임(민·형사) + 시장 신뢰 훼손 | +| 상태 요건 | 매도인의 reasonable care·reason to know | 행위자의 scienter(recklessness 포함) | +| Decipher Recipe | R2(재판매) 조건부 부착(affiliate 매도 시) | R4(시장행위) 핵심 부착 | + +두 축은 "1차=A, 2차=B"처럼 단계로 갈리지 않는다. 축 A는 재판매(2차) 거래에서, 축 B는 발행·유통 어디서든 걸린다. A-12가 이 둘을 하나의 부품으로 묶는 이유는 *실행 메커니즘이 동일*하기 때문이다 — 둘 다 "객관적 적신호를 자동 탐지 → 사람의 판단이 필요한 위험으로 표시"라는 패턴 C(감시형) 구조를 쓴다. 다만 A-12는 이 두 축의 적신호를 *taxonomy(분류 체계)로 정의하고 pre-trade에서 스크리닝*할 뿐, 축 B의 시계열·누적 패턴 탐지(자전거래를 여러 거래에 걸쳐 추적)는 별도 상태추적형 부품 F-02·F-03의 몫이다(§9.6에서 경계 상술). + +### 1.4 Decipher 시스템에서 왜 중요한가 — willful blindness 책임과 audit trail + +**핵심 위험.** DEX는 본질적으로 자동화된 거래 체결 인프라다. 그런데 자동화는 양날의 검이다 — 코드가 액면상 유효한 claim을 기계적으로 통과시키는 동안, 사람이라면 즉시 알아챘을 적신호(방금 발행받은 물량을 곧바로 되파는 매도인, 같은 실소유자가 양측에 선 거래, 임계선 바로 아래로 쪼갠 주문)를 그냥 지나칠 수 있다. 문제는 이 "몰랐음"이 법적으로 방패가 되지 못한다는 것이다. 오히려 *명백한 적신호를 감지·처리할 능력이 있었는데 그러지 않은 설계*는 recklessness의 증거가 된다. + +**A-12가 하는 일.** A-12는 이 위험을 두 방향에서 막는다. 첫째, 거래 직전에 객관적 적신호를 스캔해 위험한 거래가 아무 기록 없이 통과되는 것을 막는다. 둘째 — 이게 더 중요한데 — 적신호가 잡히면 그것을 *표시하고 운영자 검토로 라우팅*함으로써, "우리는 위험을 감지했고, 사람이 판단하도록 절차를 밟았다"는 **reasonable inquiry의 audit trail**을 남긴다. 이 audit trail이야말로 나중에 willful blindness 주장에 대한 방어가 된다. 즉 A-12의 산출물은 "차단"이 아니라 "기록된 주의(documented diligence)"다. + +**왜 차단이 아니라 표시인가.** 적신호의 존재 자체는 위법을 확정하지 않는다. "되파는 것처럼 보인다"가 실제 underwriter 도관인지, "같은 클러스터"가 실제 자전거래인지, "임계 바로 아래"가 실제 회피 의도인지는 — 고의·목적·정황을 따지는 *사람의 법적 판단*이다. 코드가 이걸 자동으로 "위법"으로 확정해 차단하면, 정당한 거래를 막아 별도 책임(거래 방해)을 지고, 코드가 할 수 없는 판단을 하는 척하게 된다. 그래서 A-12는 패턴 C를 쓴다 — 객관 신호는 기계가 탐지하되, "그래서 위법인가"의 판단은 사람에게 넘긴다. (이 설계 선택의 법적 근거는 §8에서, 사람 판단 층의 구조는 §11에서 상술한다.) + +**한국 실무자를 위한 대비.** 한국 자본시장법의 부정거래(§178)·시장질서 교란행위(§178-2)·의심거래보고(자금세탁방지)에서도 유사한 구조가 있다 — 객관적 이상거래를 탐지해 보고·검토하는 체계. A-12는 그 미국판을 온체인 pre-trade 스크리닝으로 구현한 것으로 보면 직관이 맞는다. 다만 미국법의 willful blindness·recklessness 기준은 "몰랐다"의 방어 여지를 한국법보다 좁게 보는 경향이 있어, 적신호 감지 능력을 갖춘 플랫폼일수록 그것을 실제로 작동시킬 책임이 무겁다는 점이 핵심이다. + +## §2. 메타 정보 (Internal Identifier Box) + +| 항목 | 값 | +| --- | --- | +| 부품 ID | A-12 | +| 부품 이름 | 모름 항변 차단 (Red Flag Knowledge Bar) | +| 도메인 | A — 신원·자격 (매수인·매도인 측) | +| 검증 대상 | 재판매·시장행위에서 reasonable belief·reason to know·scienter를 깨는 객관적 red flag의 존재 | +| 성숙도 | 부분(R-3 클러스터에 통합 — A-06·F-01과 함께) | +| 검증 패턴 | 패턴 C — 감시형(flag, 차단 아님) | +| Timing | pre-trade (거래 직전 스크리닝) | +| Stateful? | STATELESS (거래시점 판정 가능분만 · 시계열 누적 탐지는 F-02·F-03) | +| 소속 Recipe | R2(§4(a)(7)·Rule 144 재판매) 조건부 · R4(시장행위 감시) 핵심 | +| 활성 조건 | R2: 매도인이 affiliate일 때 / R4: 항상 | +| 주요 조문 | §2(a)(11) · §4(a)(1)·§4(a)(7)+§4(d) · Rule 502(d) · §17(a) · §10(b)+Rule 10b-5 | +| 직접 cascade | A-06(affiliate 판정) · A-03(AI 검증) · F-02·F-03(시계열 시장감시) · C-08·D-01(임계) | +| 출력 | disposition ∈ {CLEAR, FLAG, REVIEW} — BLOCK 없음 | +| 거절(표시) 코드 | FLAG_RESALE_INTENT · FLAG_CONTROL_UNDISCLOSED · FLAG_AI_INCONSISTENT · FLAG_WASH_CLUSTER · FLAG_STRUCTURING · FLAG_PRICE_ANOMALY · FLAG_SUSPICIOUS_PATTERN · REVIEW_REDFLAG_UNCERTAIN | +| ERC-3643 매핑 | Compliance 모듈의 pre-trade hook에서 red-flag 평가 → REVIEW 큐(onchain event) · 자격 claim 게이트와 별개 layer | +| 파일 | A-12_모름항변차단.md (+ 패치된 .docx) | + +## §3. 법적 근거 (Layer 1 → 2 → 3) + +**이 절의 구성.** A-13 v1 형식을 따라, 아래 표의 "종류" 칸이 그대로 Layer에 대응한다 — Statute = Layer 1, SEC Rule = Layer 2, SEC Release·Case = Layer 3. 다만 A-12는 하나의 조문이 아니라 *두 축(재판매 안전항·사기금지)에 걸친 조문 묶음*을 다루므로, 각 조문을 Layer 묶음 헤더 없이 논리 흐름 순서(§3.1~§3.9)로 독립 번호를 매긴다. 각 조문 블록은 6-필드(조항·핵심 원문·한국어·쉬운 설명·적신호 반영·ERC-3643 변환)로 통일했다. + +### 3.0 법조문 관계 플로우차트 (개발자용) + +아래 그림(fig30)은 A-12의 법적 뼈대다. 위쪽의 공통 문제("몰랐다"가 통하지 않는 구조)에서 두 축이 갈라진다 — 왼쪽 R2 축(재판매·underwriter)은 §2(a)(11) → §4(a)(1)·§4(a)(7)+§4(d) → Rule 502(d)로, 오른쪽 R4 축(사기·시세조종)은 §17(a) → §10(b)/Rule 10b-5 → recklessness로. 두 축은 모두 "객관적 red flag 탐지 → 더 이상 몰랐다 불가 → 가중 심사"로 수렴하고, 그것을 감시형(Pattern C)으로 구현한 것이 A-12다. + +![fig30 A-12 법조문·논리 흐름](fig/fig30_a12_statute.png) + +**범례.** 파랑 = 재판매(R2) 축 · 보라 = 사기(R4) 축 · 주황 = 두 축의 수렴점 · ★ = 축의 핵심 조문(§4(d)(3)(K)·Rule 502(d)·10b-5). + +### 3.0.1 실제 BUIDL은 어떻게 적용되나 + +BUIDL-like §3(c)(7) 토큰의 한 거래(예: BlackRock affiliate인 김 부장이 자기 물량을 DEX에서 Acme Capital에 매도)를 생각하면, A-12는 두 축에서 동시에 걸린다. + +- **R2 축(재판매).** 김 부장은 affiliate이므로 그의 재판매는 §2(a)(11) underwriter 리스크를 피해야 §4(a)(7)/Rule 144 안전항이 성립한다. A-12는 여기서 "김 부장이 사실상 발행자를 위한 도관 아닌가", "Acme가 되팔 의도로 사는 것 아닌가", "김 부장이 §4(d)(3)(K)의 '위반 없다는 믿음'을 진정으로 가질 수 있는가"를 깨는 적신호(즉시 전매·지배관계 미공개·자격 모순)를 스캔한다. +- **R4 축(시장행위).** 이 거래 자체가 §17(a)·10b-5의 사기·시세조종이 아니어야 한다. A-12는 "김 부장과 Acme가 같은 실소유 클러스터 아닌가(자전거래)", "주문이 임계(2,000-holder·물량)를 회피하려 쪼개졌나", "가격이 NAV에서 이상하게 이탈했나"를 스캔한다. + +두 축의 어느 적신호든 잡히면 A-12는 거래를 차단하지 않고 표시하여 운영자 검토로 보낸다. 실제 BUIDL의 발행·거래 조건은 본 문서가 단정하지 않으며, 위는 모델링 전제 하의 예시다. + +### 3.0.2 조문 순서·중요성 한눈에 보기 (법 리스트) + +**표 1 — Authority(근거 자료)** + +| 종류 | Authority | 내용 | A-12 관련성 | 태그 | Official URL | +| --- | --- | --- | --- | --- | --- | +| Statute | §2(a)(11) · 15 U.S.C. §77b(a)(11) | underwriter 정의(distribution 도관) + issuer에 지배관계인 포함 | 재판매 적신호가 회피하려는 리스크 자체 | Direct | uscode.house.gov | +| Statute | §4(a)(1) · 15 U.S.C. §77d(a)(1) | issuer·underwriter·dealer 아닌 자의 거래 면제 | underwriter면 이 면제가 없음 | Supporting | uscode.house.gov | +| Statute | §4(a)(7)+§4(d) · 15 U.S.C. §77d(a)(7)·(d) | AI 전용 재판매 면제 + 요건((d)(1)AI·(d)(2)무권유·(d)(3)(K)무위반믿음·(d)(7)underwriter금지) | R2 적신호의 직접 조문 근거 | Direct | uscode.house.gov | +| Statute | §4(e)(1)(B) · 15 U.S.C. §77d(e)(1)(B) | §4(a)(7) 거래는 §2(a)(11) distribution 아님(면책) | 적신호가 깨뜨리는 안전항의 효과 | Conditional | uscode.house.gov | +| SEC Rule | Rule 502(d) · 17 CFR §230.502(d) | 매수인이 underwriter 아님을 보증할 reasonable care + reasonable inquiry | R2 적신호 스크리닝의 규칙상 뿌리 | Direct | ecfr.gov | +| Statute/Rule | JOBS Act §201(a) · Rule 506(c) reasonable steps | AI 검증의 "reasonable steps to verify" mandate | reason-to-question(적신호) 패러다임(A-03 소관) | Supporting | uscode.house.gov · ecfr.gov | +| Statute | §17(a) · 15 U.S.C. §77q(a) | 증권 발행·매도의 사기금지(3 prong) | R4 적신호의 직접 조문 근거 | Direct | uscode.house.gov | +| SEC Rule | Rule 10b-5 · 17 CFR §240.10b-5 | 매매 관련 기망·부실표시·사기 금지(§10(b) 하위) | R4 적신호의 직접 조문 근거 | Direct | ecfr.gov | +| Statute | §9(a) · 15 U.S.C. §78i(a) | 시세조종(wash sale·matched order 등) 금지 | 시세조종 적신호의 배경 근거 | Background | uscode.house.gov | +| SEC Release | Release No. 33-9415 (78 FR 44771) | Rule 506(c) 채택 — reasonable steps는 objective facts-and-circumstances; reason-to-question 시 부담 상승 | red-flag 판단 기준의 해석 자료 | Supporting | sec.gov | +| Case | recklessness = scienter (10b-5 willful blindness) | 적신호에 대한 고의적 외면 = 몰랐다 불성립 | scienter 기준의 해석 자료 | Supporting | govinfo.gov | +| Rule(재사용) | Rule 144(a)(1)·(b)(1)·(b)(2)·(a)(2) · Rule 405 Control | affiliate·control 정의(A-06 검증분) | 지배관계 적신호의 참조 축 | Background | ecfr.gov | + +**표 2 — 조문 순서·중요성 한눈에 보기** + +| 순서 | 조문 | 중요성 | A-12가 그걸로 하는 일 | +| --- | --- | --- | --- | +| §3.1 | §2(a)(11) underwriter | 핵심 | 재판매 적신호가 무엇을 회피하려는지 정의(도관 리스크) | +| §3.2 | §4(a)(1) 재판매 면제 | 보조 | underwriter면 면제 없음 — 적신호의 이해관계 확정 | +| §3.3 | §4(a)(7)+§4(d) | 핵심 | R2 적신호를 직접 도출((d)(3)(K)·(d)(1)·(d)(7)) | +| §3.4 | §4(e)(1)(B) safe harbor | 조건부 | 적신호가 깨뜨리는 not-a-distribution 효과 | +| §3.5 | Rule 502(d) reasonable care | 핵심 | RF_RESALE_INTENT의 규칙상 근거(reasonable inquiry) | +| §3.6 | §201(a)·Rule 506(c) 검증 | 보조 | RF_AI_INCONSISTENT의 패러다임(reason-to-question) | +| §3.7 | §17(a) 사기금지 | 핵심 | R4 적신호를 직접 도출(발행·매도 사기) | +| §3.8 | §10(b)+Rule 10b-5 | 핵심 | R4 적신호를 직접 도출(매매 사기·시세조종) | +| §3.9 | Release 33-9415 · 판례(Layer 3) | 보조 | 안 함 — 적신호 판단·scienter 해석 자료 | +| §3.10 | Sub-요건 분해 매트릭스 | — | 위 조문을 red-flag 카테고리로 분해 | +| §3.11 | ERC-3643 변환·redFlag.category 총정리 | — | §3.1~§3.8의 적신호 매핑을 한 표로 | + +**경계 — 이 부품이 다루지 않는 것.** 아래는 같은 거래에 걸리지만 A-12가 아니라 다른 부품·레이어가 책임진다 — 누락이 아니라 소관 분리다. + +- **자격 판정 그 자체.** "매수인이 AI인가/QP인가"는 A-03·A-13의 몫이다. A-12는 그 자격 claim을 *깨뜨리는 적신호*만 본다(claim의 존재·진위·신선도는 A-03·A-11·A-06). +- **누가 affiliate인가.** control의 질적 판정은 A-06의 몫이다. A-12는 A-06의 결과와 *모순되는 지배관계 징표*(적신호)만 표시한다. +- **시계열·누적 시장감시.** 자전거래·허수주문을 여러 거래에 걸쳐 STATEFUL하게 추적하는 것은 F-02·F-03의 몫이다. A-12는 *거래시점에 판정 가능한* 적신호만 pre-trade에서 스크리닝한다(§9.6에서 경계 상술). + +### 3.1 §2(a)(11) — Underwriter 정의와 지배관계인 확장 [출처: uscode.house.gov] + +**핵심 원문:** The term "underwriter" means any person who has purchased from an issuer with a view to, or offers or sells for an issuer in connection with, the distribution of any security, or participates or has a direct or indirect participation in any such undertaking, or participates or has a participation in the direct or indirect underwriting of any such undertaking; but such term shall not include a person whose interest is limited to a commission from an underwriter or dealer not in excess of the usual and customary distributors' or sellers' commission. As used in this paragraph the term "issuer" shall include, in addition to an issuer, any person directly or indirectly controlling or controlled by the issuer, or any person under direct or indirect common control with the issuer. + +**한국어:** "underwriter"란 발행자로부터 증권의 distribution을 목적으로(with a view to) 매수하였거나, 발행자를 위하여(for an issuer) 그 distribution과 관련하여 청약·매도하는 모든 자, 또는 그러한 사업에 직접·간접으로 참여하거나 그 직접·간접 인수에 참여하는 모든 자를 뜻한다; 다만 그 이익이 underwriter 또는 dealer로부터 통상적·관례적 유통·판매 수수료를 넘지 않는 수수료에 한정되는 자는 제외한다. 이 항에서 "issuer"에는 발행자에 더하여, 발행자를 직접 또는 간접으로 지배하거나 발행자에 의하여 지배되는 모든 자, 또는 발행자와 직접·간접의 공동지배 아래 있는 모든 자가 포함된다. + +**쉬운 설명:** 사모로 산 증권을 대중에게 되파는 "도관"이 되면 underwriter가 되고, underwriter가 되면 §4(a)(1)의 재판매 면제를 못 쓴다. 마지막 문장이 A-12의 R2 축 뿌리다 — "issuer"에 지배관계인(affiliate)이 포함되므로, *affiliate로부터 유통 목적으로 매수하거나 affiliate를 위해 파는 자*도 underwriter가 될 수 있다. 그래서 affiliate(예: 김 부장)가 매도하는 재판매는 특히 조심스럽고, "매수인이 되팔 의도로 사는가", "매도인이 사실상 도관인가" 같은 적신호가 여기서 의미를 갖는다. + +**적신호 반영:** 직접 ○ — RF_RESALE_INTENT의 법정 뿌리. underwriter 리스크가 있다는 것 자체는 차단 사유가 아니라, "이 재판매가 도관이 아님을 확인할 가중 주의가 필요하다"는 표시 사유다. + +**ERC-3643 변환:** redFlag.axis = RESALE. 온체인 코드는 매도인의 affiliate 여부(A-06 결과)와 거래 패턴(취득 후 경과·즉시 전매 여부)을 입력받아 RF_RESALE_INTENT 후보를 평가. 판단은 off-chain 운영자, 온체인엔 flag event만. + +### 3.2 §4(a)(1) — 발행자·underwriter·dealer 아닌 자의 거래 면제 [출처: uscode.house.gov] + +**핵심 원문:** The provisions of section 77e of this title shall not apply to— (1) transactions by any person other than an issuer, underwriter, or dealer. + +**한국어:** 이 편 §77e(§5 등록의무)의 규정은 다음에 적용되지 아니한다 — (1) 발행자, underwriter 또는 dealer가 아닌 모든 자에 의한 거래. + +**쉬운 설명:** 일반 투자자가 자기 증권을 되파는 것은 등록 없이 가능하다는 기본 재판매 면제다. 핵심은 조건이 "underwriter가 아닐 것"이라는 데 있다 — §3.1과 연결하면, affiliate가 되팔거나 매수인이 도관이면 이 "아닌 자" 요건이 깨져 면제가 사라진다. A-12의 R2 적신호는 결국 이 요건이 깨질 위험 신호를 잡는 것이다. + +**적신호 반영:** 간접 ✕ — 직접 red-flag 근거는 아니고, RF_RESALE_INTENT가 걸릴 때 "무엇을 잃는가"(이 면제)를 확정하는 이해관계 조문이다. + +**ERC-3643 변환:** (온체인 직접 구현 없음) — 재판매 Recipe(R2)가 의존하는 면제 전제. A-12는 이 면제가 위태로워질 적신호를 표시하는 역할. + +### 3.3 §4(a)(7) + §4(d) — AI 전용 재판매 면제와 그 요건 [출처: uscode.house.gov] + +**핵심 원문:** [§4(a)(7)] (7) transactions meeting the requirements of subsection (d). [§4(d), 발췌] The transactions referred to in subsection (a)(7) are transactions meeting the following requirements: (1) Accredited investor requirement.—Each purchaser is an accredited investor, as that term is defined in section 230.501(a) of title 17, Code of Federal Regulations (or any successor regulation). (2) Prohibition on general solicitation or advertising.—Neither the seller, nor any person acting on the seller's behalf, offers or sells securities by any form of general solicitation or general advertising. ... (3) ... (K) To the extent that the seller is a control person with respect to the issuer, a brief statement regarding the nature of the affiliation, and a statement certified by such seller that they have no reasonable grounds to believe that the issuer is in violation of the securities laws or regulations. ... (7) Underwriter prohibition.—The transaction is not with respect to a security that constitutes the whole or part of an unsold allotment to, or a subscription or participation by, a broker or dealer as an underwriter of the security or a redistribution. + +**한국어:** [§4(a)(7)] (7) subsection (d)의 요건을 충족하는 거래. [§4(d)] subsection (a)(7)이 지칭하는 거래는 다음 요건을 충족하는 거래이다: (1) 적격투자자 요건 — 각 매수인은 17 CFR §230.501(a)에 정의된 accredited investor이다. (2) 일반청약권유·광고 금지 — 매도인도, 매도인을 위하여 행위하는 자도, 어떠한 형태의 general solicitation·general advertising으로도 증권을 청약·매도하지 아니한다. … (3) … (K) 매도인이 발행자에 대한 control person인 한도에서, 그 지배관계의 성격에 관한 간략한 진술, 그리고 발행자가 증권법령을 위반하고 있다고 믿을 reasonable grounds가 없다는(no reasonable grounds to believe) 매도인의 인증서. … (7) underwriter 금지 — 그 거래는 broker·dealer가 underwriter로서 보유한 미판매 배정분의 전부·일부, 또는 그에 의한 subscription·participation, 또는 재유통(redistribution)에 관한 것이 아니다. + +**쉬운 설명:** §4(a)(7)은 "각 매수인이 AI인 재판매"를 위한 법정 면제다. A-12에 결정적인 것은 두 조각이다. **(d)(3)(K)** — 매도인이 affiliate(control person)이면, "발행자가 증권법을 위반하고 있다고 믿을 만한 reasonable grounds가 없다"고 인증해야 한다. 이것이 교과서적 "모름 항변 차단" 조항이다: 적신호가 있으면 매도인은 이 인증을 진정으로 할 수 없다(위반을 의심할 근거가 생기므로). **(d)(1)** — 각 매수인이 AI여야 하므로, 매수인의 AI claim과 모순되는 적신호(RF_AI_INCONSISTENT)는 이 요건을 위태롭게 한다. **(d)(7)** — 그 거래가 underwriter의 재유통이 아니어야 하므로, 도관 신호(RF_RESALE_INTENT)가 여기 걸린다. + +**적신호 반영:** 직접 ○ — (d)(3)(K)는 RF_CONTROL_UNDISCLOSED·RF_SUSPICIOUS_PATTERN의, (d)(1)은 RF_AI_INCONSISTENT의, (d)(7)은 RF_RESALE_INTENT의 직접 근거. 어느 적신호도 이 요건들을 "자동 위반"으로 만들지 않고, "인증을 진정으로 할 수 있는지 사람이 확인하라"는 표시로 이어진다. + +**ERC-3643 변환:** redFlag.axis = RESALE. (d)(3)(K) 인증서는 off-chain 매도인 attestation으로 수집되고, 그 인증을 무효화할 적신호가 잡히면 A-12가 REVIEW로 라우팅. claim.controlPersonCert = {PRESENT, ABSENT, CONTRADICTED}. + +### 3.4 §4(e)(1)(B) — §4(a)(7) 거래의 not-a-distribution 안전항 [출처: uscode.house.gov] + +**핵심 원문:** (1) In general.—With respect to an exempted transaction described under subsection (a)(7): (A) Securities acquired in such transaction shall be deemed to have been acquired in a transaction not involving any public offering. (B) Such transaction shall be deemed not to be a distribution for purposes of section 77b(a)(11) of this title. (C) Securities involved in such transaction shall be deemed to be restricted securities within the meaning of Rule 144 (17 CFR 230.144). + +**한국어:** (1) 총칙 — subsection (a)(7)에 기술된 면제 거래에 관하여: (A) 그 거래에서 취득한 증권은 어떠한 public offering도 수반하지 아니하는 거래에서 취득한 것으로 간주된다. (B) 그 거래는 §77b(a)(11)(§2(a)(11)) 목적상 distribution이 아닌 것으로 간주된다. (C) 그 거래에 관련된 증권은 Rule 144상 restricted securities로 간주된다. + +**쉬운 설명:** §4(a)(7)을 제대로 충족하면, 그 거래는 §2(a)(11)의 "distribution"이 아닌 것으로 간주되어 매도인이 underwriter가 되는 리스크를 차단한다. 이것이 R2 축이 지키려는 안전항의 효과다. A-12의 관점에서 중요한 함의는 — 적신호가 §4(a)(7) 요건(§3.3)을 깨면 이 (B)의 간주가 무너지고, 매도인이 다시 underwriter 리스크에 노출된다는 것이다. 즉 적신호는 "안전항이 성립하는지"를 사람이 재확인해야 할 신호다. + +**적신호 반영:** 조건부 △ — 직접 red-flag를 만드는 조문은 아니지만, R2 적신호가 걸릴 때 그 법적 파장(안전항 상실)을 규정하는 조건 조문. A-12가 표시로 그치고 차단하지 않는 이유의 일부이기도 하다(안전항 성립 여부는 사람이 판단). + +**ERC-3643 변환:** (온체인 직접 구현 없음) — R2 Recipe의 안전항 상태 판단 입력. A-12의 flag가 이 상태를 "재확인 필요"로 표시. + +### 3.5 Rule 502(d) — 재판매 제한과 reasonable care [출처: ecfr.gov] + +**핵심 원문:** (d) Limitations on resale. Except as provided in § 230.504(b)(1), securities acquired in a transaction under Regulation D shall have the status of securities acquired in a transaction under section 4(a)(2) of the Act and cannot be resold without registration under the Act or an exemption therefrom. The issuer shall exercise reasonable care to assure that the purchasers of the securities are not underwriters within the meaning of section 2(a)(11) of the Act, which reasonable care may be demonstrated by the following: (1) Reasonable inquiry to determine if the purchaser is acquiring the securities for himself or for other persons; (2) Written disclosure to each purchaser prior to sale that the securities have not been registered under the Act and, therefore, cannot be resold unless they are registered under the Act or unless an exemption from registration is available; and (3) Placement of a legend on the certificate or other document that evidences the securities stating that the securities have not been registered under the Act and setting forth or referring to the restrictions on transferability and sale of the securities. While taking these actions will establish the requisite reasonable care, it is not the exclusive method to demonstrate such care. Other actions by the issuer may satisfy this provision. In addition, § 230.502(b)(2)(vii) requires the delivery of written disclosure of the limitations on resale to investors in certain instances. + +**한국어:** (d) 재판매의 제한. §230.504(b)(1)에 정한 경우를 제외하고, Regulation D 거래에서 취득한 증권은 §4(a)(2) 거래에서 취득한 증권의 지위를 가지며, 등록 또는 면제 없이는 재판매될 수 없다. 발행자는 그 증권의 매수인이 §2(a)(11)상 underwriter가 아님을 보증할 reasonable care를 다하여야 하며, 그 reasonable care는 다음으로 증명될 수 있다: (1) 매수인이 그 증권을 자기를 위하여 취득하는지 아니면 타인을 위하여(for other persons) 취득하는지를 판단하기 위한 reasonable inquiry; (2) 매도 전에 각 매수인에게, 그 증권이 이 법에 따라 등록되지 아니하였으므로 등록되거나 면제가 이용가능하지 아니하면 재판매될 수 없다는 서면 고지; 그리고 (3) 그 증권을 표창하는 증서 등에, 그 증권이 미등록이며 양도·매도에 제한이 있음을 기재하거나 참조하는 legend의 부착. 이러한 조치를 취하면 요구되는 reasonable care가 성립하나, 그것이 유일한 증명 방법은 아니다. 발행자의 다른 조치도 이 규정을 충족할 수 있다. 또한 §230.502(b)(2)(vii)은 특정 경우 재판매 제한의 서면 고지 교부를 요구한다. + +**쉬운 설명:** 이 규칙이 A-12의 R2 축에서 가장 실무적인 근거다. (1)의 "reasonable inquiry to determine if the purchaser is acquiring the securities for himself or for other persons"가 핵심 — 매수인이 자기 것으로 사는지, 남을 위해(도관으로) 사는지를 합리적으로 조사할 의무를 못 박는다. 방금 발행받은 물량을 즉시 되파는 매도인, 또는 사자마자 되팔 정황이 있는 매수인은 이 "타인을 위한 취득"의 적신호다. A-12가 그 적신호를 자동 탐지해 표시하면, 운영자가 실제 inquiry를 수행한 기록(§1.4의 audit trail)이 되어 reasonable care를 뒷받침한다. (2)·(3)의 고지·legend는 Decipher 토큰이 어차피 restricted flag·transfer 제한(B-03)으로 구현하므로, A-12는 (1)의 inquiry 축에 집중한다. + +**적신호 반영:** 직접 ○ — RF_RESALE_INTENT의 규칙상 직접 근거. "reasonable care"는 규칙 문언 그대로이며, 실무상 상당한 주의가 요구된다는 취지와 규칙 문언을 구분한다(규칙은 예시적 3조치를 든다). + +**ERC-3643 변환:** redFlag.axis = RESALE. inquiry.result = {SELF, FOR_OTHERS, UNKNOWN}. A-12가 FOR_OTHERS 또는 UNKNOWN 적신호를 잡으면 REVIEW. legend·고지는 B-03(transfer restriction metadata)이 별도 담당. + +### 3.6 JOBS Act §201(a) · Rule 506(c) — reasonable steps to verify (패러다임) [출처: uscode.house.gov · ecfr.gov] + +**핵심 원문:** [JOBS Act §201(a), Pub. L. 112-106 note] Such rules shall require the issuer to take reasonable steps to verify that purchasers of the securities are accredited investors, using such methods as determined by the Commission. [Rule 506(c)(2)(i)] All purchasers of securities sold in any offering under paragraph (c) of this section are accredited investors. + +**한국어:** [JOBS Act §201(a)] 그 규칙은 발행자에게, 증권의 매수인이 accredited investor임을 verify할 reasonable steps를, Commission이 정하는 방법으로 취할 것을 요구하여야 한다. [Rule 506(c)(2)(i)] paragraph (c)에 따른 모든 offering에서 매도된 증권의 모든 매수인은 accredited investor이다. + +**쉬운 설명:** 이 조항 자체는 발행(R1) 단계의 AI 검증 mandate이고, 그 검증의 본체는 부품 A-03의 소관이다. A-12가 이를 인용하는 이유는 *"reasonable steps to verify"의 판단 기준이 red-flag 패러다임이기 때문*이다. SEC의 채택 release(33-9415, §3.9)는 이 verification이 objective한 facts-and-circumstances 판단이고, *발행자가 매수인의 AI 지위를 의심할 "reason to question"이 있으면(즉 적신호가 있으면) 요구되는 검증 강도가 올라간다*고 설명한다. 이 "적신호가 있으면 더 파고들어야 한다"는 원리가 A-12의 RF_AI_INCONSISTENT를 정당화한다 — 매수인 자격 claim과 모순되는 사실은, A-03이 발급·신뢰한 claim에도 불구하고 사람이 재확인해야 할 신호다. + +**적신호 반영:** 조건부 △ — RF_AI_INCONSISTENT의 패러다임 근거(직접 조문은 §4(d)(1)·§3.3). 검증 자체는 A-03, A-12는 그 검증을 흔드는 사후 모순 신호를 표시. + +**ERC-3643 변환:** (온체인 직접 구현 없음, A-03 소관) — A-12는 A-03이 발급한 AI claim과 거래시점 사실의 불일치를 RF_AI_INCONSISTENT로 표시. verify.reasonToQuestion = true → REVIEW. + +### 3.7 §17(a) — 증권 발행·매도의 사기금지 [출처: uscode.house.gov] + +**핵심 원문:** It shall be unlawful for any person in the offer or sale of any securities (including security-based swaps) or any security-based swap agreement (as defined in section 78c(a)(78) of this title) by the use of any means or instruments of transportation or communication in interstate commerce or by use of the mails, directly or indirectly— (1) to employ any device, scheme, or artifice to defraud, or (2) to obtain money or property by means of any untrue statement of a material fact or any omission to state a material fact necessary in order to make the statements made, in light of the circumstances under which they were made, not misleading; or (3) to engage in any transaction, practice, or course of business which operates or would operate as a fraud or deceit upon the purchaser. + +**한국어:** 누구든지 증권(security-based swaps 포함)의 offer 또는 sale에서 주간(州間) 통상의 운송·통신 수단이나 우편을 사용하여 직접·간접으로 다음의 행위를 하는 것은 위법이다 — (1) 기망하기 위한 device·scheme·artifice를 사용하는 것, 또는 (2) 중요한 사실에 관한 untrue statement, 또는 그 진술을 하게 된 정황에 비추어 진술이 오해를 일으키지 않도록 하기 위하여 필요한 중요 사실의 omission을 수단으로 금전·재산을 취득하는 것, 또는 (3) 매수인에 대하여 사기 또는 기만으로 작용하거나 작용할 수 있는 transaction·practice·course of business에 종사하는 것. + +**쉬운 설명:** §17(a)는 증권을 팔 때의 사기를 금지하는 1933년법의 반사기 조항이다. A-12의 R4 축에서, (3)의 "any transaction, practice, or course of business which operates or would operate as a fraud or deceit"가 특히 넓다 — 자전거래로 거래량을 부풀리거나, 임계를 회피하려 거래를 쪼개거나, NAV와 동떨어진 가격으로 조작적으로 매매하는 것은 이 "사기로 작용하는 거래·관행"의 적신호다. 중요한 점은 §17(a)(2)·(3)은 판례상 scienter 없이도(즉 과실로도) 성립할 수 있다고 해석되어 왔다는 것 — 그래서 플랫폼이 적신호를 감지·처리할 능력을 갖추고도 방치하면 책임 위험이 더 커진다. + +**적신호 반영:** 직접 ○ — RF_WASH_CLUSTER·RF_STRUCTURING·RF_PRICE_ANOMALY·RF_SUSPICIOUS_PATTERN의 직접 근거(발행·매도 국면). 적신호는 위법의 확정이 아니라, 사기·기만으로 "작용할 수 있는지" 사람이 판단해야 할 표시. + +**ERC-3643 변환:** redFlag.axis = MARKET_CONDUCT. 온체인 pre-trade hook이 상대방 클러스터·주문 구조·가격-NAV 괴리를 평가해 후보 적신호를 표시. 판단(사기·기만 여부)은 off-chain 운영자. + +### 3.8 §10(b) + Rule 10b-5 — 매매 관련 기망·시세조종 금지 [출처: uscode.house.gov · ecfr.gov] + +**핵심 원문:** [Rule 10b-5] It shall be unlawful for any person, directly or indirectly, by the use of any means or instrumentality of interstate commerce, or of the mails or of any facility of any national securities exchange, (a) To employ any device, scheme, or artifice to defraud, (b) To make any untrue statement of a material fact or to omit to state a material fact necessary in order to make the statements made, in the light of the circumstances under which they were made, not misleading, or (c) To engage in any act, practice, or course of business which operates or would operate as a fraud or deceit upon any person, in connection with the purchase or sale of any security. + +**한국어:** [Rule 10b-5] 누구든지 주간 통상의 수단, 우편, 또는 national securities exchange의 설비를 사용하여 직접·간접으로, 증권의 purchase 또는 sale과 관련하여(in connection with) 다음의 행위를 하는 것은 위법이다 — (a) 기망하기 위한 device·scheme·artifice를 사용하는 것, (b) 중요한 사실에 관한 untrue statement를 하거나, 진술이 오해를 일으키지 않도록 하기 위하여 필요한 중요 사실을 omission하는 것, 또는 (c) 누구에 대하여든 사기 또는 기만으로 작용하거나 작용할 수 있는 act·practice·course of business에 종사하는 것. + +**쉬운 설명:** Rule 10b-5는 §10(b) 하위의 가장 넓은 반사기·반시세조종 규칙으로, "매매와 관련한" 모든 기망을 포괄한다. §17(a)와 달리 10b-5 위반에는 scienter가 필요한데, 미국 순회법원들은 그 scienter에 recklessness를 포함시킨다 — 즉 명백한 적신호를 알면서 눈감은 것(willful blindness)은 "몰랐다"로 면책되지 않는다. 이것이 §1.2·§1.4에서 말한 A-12의 존재 이유를 법문으로 못 박는 지점이다. 자전거래(같은 실소유자 양측), 허수성 주문, 조작적 가격은 10b-5(c)의 "사기로 작용하는 행위"의 적신호이고, 플랫폼이 이를 감지하고도 표시·검토 없이 통과시키면 recklessness가 인정될 여지가 커진다. + +**적신호 반영:** 직접 ○ — RF_WASH_CLUSTER·RF_PRICE_ANOMALY·RF_SUSPICIOUS_PATTERN의 직접 근거(매매 국면). scienter의 recklessness 포함이 "감지 능력 있으면 작동시킬 책임"의 근거. + +**ERC-3643 변환:** redFlag.axis = MARKET_CONDUCT. A-12는 거래시점 판정 가능분(양측 identity 동일 클러스터·가격-NAV 괴리)을 표시. 시계열 wash-trade·spoofing 패턴은 F-02(STATEFUL, post-trade)가 담당하며 A-12의 taxonomy를 공유. + +### 3.9 판례·발행문서 (Layer 3) + +A-12의 적신호 판단·scienter 해석은 아래 자료가 배경이 된다. 어느 것도 A-12가 직접 "판정"하지 않으며, 운영자 판단(§11)과 변호사 follow-up(§12)의 기준으로 참조된다. + +- **SEC Release No. 33-9415 (78 FR 44771, 2013-07-24)** — Rule 506(c) 채택 release. "reasonable steps to verify"는 획일적 방법이 아니라 objective facts-and-circumstances 판단이며, 발행자가 매수인의 AI 지위를 의심할 "reason to question"이 있을수록 요구되는 검증 강도가 높아진다고 설명한다. 이것이 RF_AI_INCONSISTENT의 "적신호가 있으면 더 파고들어야 한다"는 원리의 해석 근거다. +- **recklessness = scienter (Rule 10b-5)** — 미국 순회법원들은 10b-5의 scienter에 recklessness(명백한 위험의 고의적 외면, willful blindness)를 포함시켜 왔다. A-12가 "몰랐다"를 방어로 쓸 수 없게 하는 법리적 근거이며, 정확한 기준선(무엇이 reckless인가)은 사실관계별 판단이므로 §12 Open Issue. +- **SEC v. Ralston Purina Co., 346 U.S. 119 (1953)** — public offering의 기능적 기준(투자자가 스스로 보호할 수 있는가). R2 축에서 "이 재판매·유통이 사실상 공모로 흐르는가"의 배경 기준으로, DEX 2차 거래 환경의 공모 유발 여부(A-13 §9.6·Recipe-level 쟁점)와 연결된다. + +### 3.10 Sub-요건 분해 매트릭스 + +위 조문·규칙을 A-12가 실제로 스크리닝하는 red-flag 카테고리로 분해하면 두 축·일곱 갈래가 된다. 각 행은 소리 내 읽어도 문장이 되도록 풀어 썼다. **연산자 주의 ⚠ — 이 매트릭스의 어떤 임계 수치도 PASS/FAIL 규칙이 아니다.** 수치·패턴은 오직 "표시(flag)와 REVIEW 라우팅"의 입력이며, 위법 확정은 사람이 한다(A-06의 bright-line 금지 원칙과 동일). + +| 축 | red-flag 카테고리 | 트리거(풀어 읽기) | 근거 | Decipher 연동 | +| --- | --- | --- | --- | --- | +| 재판매(R2) | RF_RESALE_INTENT | 매수인이 자기가 아니라 타인을 위해 취득하는 정황이거나, 매도인이 방금 취득한 물량을 즉시 되파는 도관 패턴이다 | §2(a)(11)·§4(d)(7)·Rule 502(d)(1) | C-01(보유기간)·A-06 | +| 재판매(R2) | RF_CONTROL_UNDISCLOSED | 매도인의 지배관계 징표가 (d)(3)(K) 인증·A-06 판정과 불일치한다 | §4(d)(3)(K)·§2(a)(11) | A-06 | +| 재판매(R2) | RF_AI_INCONSISTENT | 매수인의 자격(AI/QP) claim과 거래시점 사실이 실질적으로 모순된다(reason to question) | §4(d)(1)·§201(a)·506(c) | A-03·A-13·A-11 | +| 시장행위(R4) | RF_WASH_CLUSTER | 매수인과 매도인이 같은 실소유 클러스터에 속한다(자전거래 정황) | §17(a)(3)·10b-5(c)·§9(a) | F-02·A-04 | +| 시장행위(R4) | RF_STRUCTURING | 거래가 임계(2,000-holder·물량·금액) 바로 아래로 쪼개진 정황이다 | §17(a)(3)·10b-5(c) | C-08·D-01 | +| 시장행위(R4) | RF_PRICE_ANOMALY | 체결 가격이 기준가(NAV)에서 조작적으로 이탈한다 | §17(a)·10b-5·§9(a) | (오라클 NAV) | +| 시장행위(R4) | RF_SUSPICIOUS_PATTERN | 위 유형에 딱 들어맞지 않으나 사기·시세조종으로 작용할 수 있는 기타 객관 패턴이다 | §17(a)(3)·10b-5(c) | F-03 | + +**해설:** 재판매 축 셋(RF_RESALE_INTENT·RF_CONTROL_UNDISCLOSED·RF_AI_INCONSISTENT)은 R2에서 매도인이 affiliate일 때 활성화되고, 시장행위 축 넷은 R4에서 항상 활성화된다. 어느 카테고리든 결과는 "차단"이 아니라 "표시 + REVIEW"이며, 이 일곱 갈래가 §4(어떤 증거가 필요한가)와 §5(어떻게 스크리닝하는가)의 토대다. + +### 3.11 ERC-3643 변환·redFlag.category 총정리 + +A-12의 법조문이 실제 ERC-3643/T-REX 토큰에서 어떻게 구현되는지를 두 표로 정리한다. 핵심 원칙 하나 — A-12는 자격 claim 게이트(Identity Registry의 isVerified())와 *별개 layer*다. 자격 게이트는 "claim이 없으면 transfer 거부"로 차단하지만, A-12는 "claim이 있어도 적신호가 있으면 표시 + REVIEW"로 사람에게 넘긴다. 위법 판정은 전부 off-chain 운영자가 하고, 온체인에는 그 표시(flag event)만 기록된다. + +**표 1 — 조항 → ERC-3643 변환** + +| 조항 | ERC-3643 변환 | 간략 설명 | +| --- | --- | --- | +| §2(a)(11)·§4(d)(7)·Rule 502(d)(1) | Compliance pre-trade hook의 RF_RESALE_INTENT 평가 | 매도인 affiliate 여부(A-06)·취득 후 경과(C-01)·즉시 전매 패턴을 입력 | +| §4(d)(3)(K) | controlPersonCert 상태 확인 + 불일치 시 RF_CONTROL_UNDISCLOSED | off-chain 인증서와 A-06 판정의 정합을 온체인 flag로 | +| §4(d)(1)·§201(a)·506(c) | AI/QP claim과 거래시점 사실 대조 → RF_AI_INCONSISTENT | A-03·A-13 claim은 그대로 두고, 모순 신호만 표시 | +| §17(a)·10b-5·§9(a) (자전거래) | 양측 ONCHAINID 실소유 클러스터 대조 → RF_WASH_CLUSTER | A-04(신원 dedup) 클러스터 데이터 활용, 시계열은 F-02 | +| §17(a)·10b-5 (구조화) | 주문 분할·임계 근접 탐지 → RF_STRUCTURING | C-08·D-01 임계 근처의 반복 쪼개기 표시 | +| §17(a)·10b-5·§9(a) (가격) | NAV 오라클 대비 체결가 괴리 → RF_PRICE_ANOMALY | 오라클 NAV 입력, 괴리 임계는 REVIEW 라우팅 입력일 뿐 | +| §17(a)(3)·10b-5(c) (기타) | 기타 객관 패턴 → RF_SUSPICIOUS_PATTERN | 미분류 위험을 포괄, F-03 SAR 경로와 연동 | + +**표 2 — 판정 결과 → disposition / 플래그 값** + +| 항목 | disposition / 플래그 값 | 간략 설명 | +| --- | --- | --- | +| 적신호 없음 | disposition = CLEAR | A-12는 통과 사유를 추가하지 않고 "red flag 없음"만 기록 | +| 재판매 도관 신호 | FLAG_RESALE_INTENT → REVIEW | 502(d) reasonable inquiry 필요 표시 | +| 지배관계 불일치 | FLAG_CONTROL_UNDISCLOSED → REVIEW | (d)(3)(K) 인증 진정성 확인 필요 | +| 자격 모순 | FLAG_AI_INCONSISTENT → REVIEW | AI/QP 재확인 필요(A-03·A-13 재검토 트리거) | +| 자전거래 정황 | FLAG_WASH_CLUSTER → REVIEW | 동일 클러스터 양측 — F-02 시계열 검토 연계 | +| 임계 회피 정황 | FLAG_STRUCTURING → REVIEW | 쪼개기 의도 확인 필요 | +| 가격 이탈 | FLAG_PRICE_ANOMALY → REVIEW | NAV 괴리 사유 확인 필요 | +| 기타 위험 패턴 | FLAG_SUSPICIOUS_PATTERN → REVIEW | 미분류 위험 — SAR 판단 연계 | +| 경계·복합 | REVIEW_REDFLAG_UNCERTAIN | 자동 분류 애매 — 운영자 큐로 직행 | +| redFlag 축 | redFlag.axis ∈ {RESALE, MARKET_CONDUCT} | 어느 법적 축의 신호인지 | +| 감지 시점 | screenedAt = block.timestamp | pre-trade 스크리닝 시점 스냅샷 | + +## §4. 입력 사실 — 스크리닝에 필요한 데이터 + +### 4.1 본 부품이 스크리닝하려면 어떤 증거가 필요한가 + +쉽게 말하면, A-12가 "이 거래에 적신호가 있다/없다"고 말하려면 세 종류의 입력이 거래시점에 모여 있어야 한다. + +- **거래 자체의 사실.** 매도인·매수인의 지갑, 체결 물량·가격, 주문 구조, 그리고 매도인이 그 물량을 언제 취득했는지(즉시 전매 판정용). +- **다른 부품의 산출.** 매도인의 affiliate 여부(A-06), 매수인의 AI/QP claim(A-03·A-13), 양측의 실소유 클러스터(A-04), 임계 근접 상태(C-08·D-01), 기준가 NAV(오라클). +- **off-chain attestation.** 매도인이 affiliate이면 (d)(3)(K)의 "무위반 믿음" 인증서, 그리고 매수인의 취득 목적(자기/타인) 자기신고. + +이 입력을 모으는 주체는 DEX의 Compliance layer이고, A-12는 이들을 대조해 red-flag 카테고리별로 "신호 있음/없음/애매"를 결정한다. 핵심은 — A-12는 새로운 실사를 하는 게 아니라, *이미 다른 부품이 만든 사실들 사이의 모순·이상을 포착*한다는 것이다. + +### 4.2 Data field — DEX가 실제로 읽는 항목 + +아래 필드 이름·ONCHAINID 구조 등은 Decipher의 ERC-3643 호환 구현을 전제한 예시 스펙이다(구현 시 확정). 각 행에 "이 필드가 왜 필요한가"를 함께 적었다. + +| 필드 | 유형 | 출처 | 무엇을 말해주나 | +| --- | --- | --- | --- | +| seller.isAffiliate | enum | A-06 결과 | R2 재판매 축 활성 여부(affiliate 매도인) | +| seller.controlPersonCert | enum | off-chain attestation | (d)(3)(K) 인증서 존재·내용({PRESENT, ABSENT, CONTRADICTED}) | +| seller.acquiredAt | timestamp | blockchain | 매도인의 취득 시점(즉시 전매 판정용, C-01 연계) | +| buyer.acquisitionPurpose | enum | 매수인 자기신고 | 자기/타인 취득({SELF, FOR_OTHERS, UNKNOWN}) | +| buyer.claim.basis | enum | A-03·A-13 claim | 매수인 자격 갈래(모순 대조용) | +| parties.ownerCluster[] | array | A-04(신원 dedup) | 양측 실소유 클러스터(자전거래 대조용) | +| order.split / order.threshold | struct | Compliance | 주문 분할·임계 근접(구조화 대조용, C-08·D-01) | +| trade.price / oracle.nav | uint256 | 체결·NAV 오라클 | 체결가·기준가(가격 이탈 대조용) | +| block.timestamp | timestamp | blockchain | 스크리닝 시점 스냅샷(screenedAt) | + +**쉽게 말하면:** A-12는 매수인의 자산 명세나 KYC 원본을 직접 보지 않는다. 대신 *다른 부품이 이미 정리해 둔 결과값들*(affiliate 여부·claim·클러스터·임계·NAV)을 한자리에 모아 대조한다. 대조에서 모순·이상이 나오면 적신호다. + +### 4.3 수집 경로 — 4단계 흐름 + +``` +1단계 전제 부품 실행 A-06(affiliate)·A-03/A-13(claim)·A-04(클러스터) 선행 판정 + ↓ +2단계 거래 컨텍스트 조립 체결 물량·가격·주문 구조·취득시점 + 오라클 NAV 수집 + ↓ +3단계 A-12 스크리닝 red-flag 카테고리별 대조 → CLEAR / FLAG / REVIEW + ↓ +4단계 라우팅 FLAG·REVIEW면 운영자 큐 + flag event 기록(audit trail) +``` + +**각 단계 누가·무엇을·결과:** 1단계(전제 부품들이, 자격·지배관계·클러스터를 판정하고, A-12의 대조 재료가 준비된다) → 2단계(Compliance layer가, 거래·시장 데이터를 모으고, 스크리닝 입력이 완성된다) → 3단계(A-12가, 카테고리별로 대조하고, disposition이 정해진다) → 4단계(FLAG/REVIEW면, 운영자 큐로 보내고, 감지 기록이 남는다). CLEAR면 거래는 다른 게이트들의 결과에 따라 진행된다. + +### 4.4 red-flag 카테고리별 확인 항목 (전부 필요) + +| 카테고리 | 필수 확인 항목(전부 필요) | 무엇을 포착하나 | +| --- | --- | --- | +| (공통 — 모든 카테고리) | ① 거래 컨텍스트(당사자·물량·가격) · ② A-12 활성 여부(R2 affiliate / R4 항상) · ③ 감지 시점 스냅샷 | 스크리닝의 전제 | +| RF_RESALE_INTENT | ① seller.isAffiliate · ② seller.acquiredAt vs 현재(즉시 전매) · ③ buyer.acquisitionPurpose(타인) | 도관·재유통 정황(§2(a)(11)·502(d)(1)·§4(d)(7)) | +| RF_CONTROL_UNDISCLOSED | ① A-06 affiliate 판정 · ② controlPersonCert 내용 · ③ 양자 정합 | (d)(3)(K) 인증과 실제 지배관계의 불일치 | +| RF_AI_INCONSISTENT | ① buyer.claim.basis · ② 거래시점 사실(자산·행태) · ③ 모순 여부(reason to question) | 자격 claim을 흔드는 사후 모순(§4(d)(1)·506(c)) | +| RF_WASH_CLUSTER | ① 매수인 ownerCluster · ② 매도인 ownerCluster · ③ 동일 여부 | 자전거래 정황(§17(a)(3)·10b-5(c)·§9(a)) | +| RF_STRUCTURING | ① 임계 근접(C-08·D-01) · ② 주문 분할 패턴 · ③ 반복성 | 임계 회피 쪼개기(§17(a)(3)·10b-5(c)) | +| RF_PRICE_ANOMALY | ① 체결가 · ② 오라클 NAV · ③ 괴리 정도 | 조작적 가격 이탈(§17(a)·10b-5·§9(a)) | +| RF_SUSPICIOUS_PATTERN | ① 미분류 객관 패턴 · ② 사기·기만 작용 가능성 · ③ F-03 SAR 연계 | 위 유형 밖의 위험(§17(a)(3)·10b-5(c)) | + +**주의 ⚠ — 확인 항목은 "표시 근거"이지 "차단 규칙"이 아니다.** 예컨대 RF_STRUCTURING의 "임계 근접"은 특정 %·금액을 넘으면 자동 차단하는 규칙이 아니라, 그 근처에서 반복 쪼개기가 보이면 사람이 회피 의도를 검토하도록 라우팅하는 입력일 뿐이다. + +## §5. 판정 로직 — 어떻게 CLEAR / FLAG / REVIEW가 결정되는가 + +### 5.0 판정 흐름 플로우차트 + +아래 그림(fig50)은 §5.2의 스크리닝 pseudocode를 흐름으로 옮긴 것이다 — 거래 컨텍스트 조립부터 A-12 활성 여부, red-flag 카테고리별 스캔, 그리고 CLEAR·FLAG·REVIEW disposition 반환까지. **차단(BLOCK) 경로가 없다**는 점이 자격 게이트 부품과의 결정적 차이다. + +![fig50 A-12 런타임 판정 흐름](fig/fig50_a12_runtime.png) + +**범례.** 파랑 = 입력 · 회색 = 분기 노드 · 초록 = CLEAR(적신호 없음) · 빨강 = FLAG(표시) · 주황 = REVIEW(운영자 판단). + +### 5.1 전체 흐름 (사람 말로) + +거래 컨텍스트가 조립된 뒤, 온체인 코드는 다음 순서로 확인한다 — ① A-12가 이 거래에 활성인가(R2 affiliate 매도 또는 R4) → ② 재판매 축·시장행위 축의 red-flag 카테고리를 하나씩 대조 → ③ 적신호가 하나도 없으면 CLEAR, 하나라도 있으면 그 카테고리 코드를 붙여 FLAG하고 REVIEW 큐로 라우팅. A-12는 거래를 차단하지 않는다 — 거래의 최종 진행·suspend는 Recipe 정책과 운영자 판단이 결정한다. + +### 5.2 Pseudocode + 단계별 해설 + +**검사 순서 한눈에 보기 — 왜 이 순서인가** + +| 순서 | 검사 | 무엇을 확인 | 출력(표시) | 비용 | 왜 이 위치인가 | +| --- | --- | --- | --- | --- | --- | +| 1 | 활성 여부 | R2(affiliate 매도) 또는 R4인가 | CLEAR(비활성) | 매우 낮음 | 비활성이면 스크리닝 대상 자체가 없음 | +| 2 | 재판매 축 | RESALE 카테고리 3종 대조 | FLAG_RESALE_* | 낮음(결과값 대조) | affiliate 매도일 때만 활성 | +| 3 | 시장행위 축 | MARKET_CONDUCT 카테고리 4종 대조 | FLAG_WASH_* 등 | 중(클러스터·NAV 조회) | R4에서 항상 활성 | +| 4 | 종합·라우팅 | 적신호 유무 → disposition | CLEAR / REVIEW | 낮음 | 표시·라우팅은 마지막에 종합 | + +``` +function screen_A_12(tx, ctx): + # 1. 활성 여부 (비활성이면 스크리닝 없음) + active_resale = ctx.recipe.R2 and A06.isAffiliate(tx.seller) + active_market = ctx.recipe.R4 + if not (active_resale or active_market): + return {disposition: CLEAR, flags: [], note: "A-12 비활성"} + + flags = [] + + # 2. 재판매 축 (affiliate 매도일 때) + if active_resale: + # RF_RESALE_INTENT — 502(d)(1)·§2(a)(11)·§4(d)(7) + if tx.buyer.acquisitionPurpose == FOR_OTHERS + or is_immediate_flip(tx.seller.acquiredAt, now): # 즉시 전매 정황 + flags.append(FLAG_RESALE_INTENT) + elif tx.buyer.acquisitionPurpose == UNKNOWN: + flags.append(FLAG_RESALE_INTENT) # 미확인도 표시(inquiry 필요) + + # RF_CONTROL_UNDISCLOSED — §4(d)(3)(K) + if tx.seller.controlPersonCert in {ABSENT, CONTRADICTED} + or mismatch(A06.result(tx.seller), tx.seller.controlPersonCert): + flags.append(FLAG_CONTROL_UNDISCLOSED) + + # RF_AI_INCONSISTENT — §4(d)(1)·506(c) reason-to-question + if reason_to_question(tx.buyer.claim, ctx.trade_time_facts): + flags.append(FLAG_AI_INCONSISTENT) + + # 3. 시장행위 축 (R4에서 항상) + if active_market: + # RF_WASH_CLUSTER — §17(a)(3)·10b-5(c)·§9(a) + if same_owner_cluster(A04.cluster(tx.buyer), A04.cluster(tx.seller)): + flags.append(FLAG_WASH_CLUSTER) + + # RF_STRUCTURING — 임계 회피 (수치는 라우팅 입력일 뿐) + if near_threshold(ctx.C08, ctx.D01) and split_pattern(tx.order): + flags.append(FLAG_STRUCTURING) + + # RF_PRICE_ANOMALY — NAV 괴리 + if price_deviates(tx.price, oracle.nav()): + flags.append(FLAG_PRICE_ANOMALY) + + # RF_SUSPICIOUS_PATTERN — 기타 + if other_objective_flag(tx, ctx): + flags.append(FLAG_SUSPICIOUS_PATTERN) + + # 4. 종합·라우팅 (차단 없음) + if flags == []: + return {disposition: CLEAR, flags: [], note: "red flag 없음"} + if ambiguous(flags): + return {disposition: REVIEW, code: REVIEW_REDFLAG_UNCERTAIN, flags: flags} + return {disposition: REVIEW, flags: flags} # FLAG 기록 + 운영자 큐 (BLOCK 아님) +``` + +**단계별 해설.** 1단계는 fail-fast 게이트다 — 비활성이면 즉시 CLEAR. 2단계 재판매 축은 affiliate 매도일 때만 돌며, 세 카테고리 모두 "다른 부품 결과값의 대조"라 비용이 낮다. 특히 `is_immediate_flip`·`reason_to_question`·`mismatch`는 *임계 비교가 아니라 정황 대조*임에 유의 — 구체적 판단(실제 도관인가, 실제 모순인가)은 사람이 한다. 3단계 시장행위 축은 R4에서 항상 돌며, 클러스터·NAV 조회로 비용이 조금 더 든다. 4단계는 적신호를 종합해 disposition을 정하되 **어떤 경우에도 BLOCK을 반환하지 않는다** — A-12는 표시·라우팅만 하고, 거래 차단·suspend는 Recipe·운영자 소관이다. + +### 5.3 red-flag 카테고리 매트릭스 (표시 기준) + +| 카테고리 | 트리거 조건(대조) | 출력 코드 | 연산자 주의 | +| --- | --- | --- | --- | +| RF_RESALE_INTENT | 매수 목적 = 타인, 또는 즉시 전매 정황, 또는 목적 미확인 | FLAG_RESALE_INTENT | "즉시"의 경계일은 라우팅 입력 — C-01과 조율, 자동 차단 아님 | +| RF_CONTROL_UNDISCLOSED | (d)(3)(K) 인증 부재·모순, 또는 A-06과 불일치 | FLAG_CONTROL_UNDISCLOSED | 지분율은 판정 기준 아님(A-06 원칙) | +| RF_AI_INCONSISTENT | 자격 claim과 거래시점 사실의 실질 모순 | FLAG_AI_INCONSISTENT | "모순"은 사람이 확정 — 표시는 reason-to-question 수준 | +| RF_WASH_CLUSTER | 매수·매도 실소유 클러스터 동일 | FLAG_WASH_CLUSTER | 동일 클러스터 = 자전거래 확정 아님, 검토 신호 | +| RF_STRUCTURING | 임계 근접(초과 아님) + 반복 분할 | FLAG_STRUCTURING | 임계는 표시 입력 · 넘김(>) 여부는 C-08·D-01이 별도 판정 | +| RF_PRICE_ANOMALY | 체결가가 NAV에서 유의하게 이탈 | FLAG_PRICE_ANOMALY | 괴리 임계는 라우팅 입력, 조작 여부는 사람 | +| RF_SUSPICIOUS_PATTERN | 기타 객관 패턴 | FLAG_SUSPICIOUS_PATTERN | 포괄 카테고리 — 남용 방지 위해 근거 기록 필수 | + +### 5.4 스크리닝 시점 — 블록체인의 어느 시점을 스냅샷으로 보나 + +A-12는 STATELESS·pre-trade이므로, 스크리닝은 *거래 확정 직전(block.timestamp)* 시점의 상태를 스냅샷으로 본다. 여기에 두 가지 함의가 있다. 첫째, 매도인의 "즉시 전매" 판정은 seller.acquiredAt과 현재의 차이로 계산하되, 그 경계(며칠을 "즉시"로 볼지)는 C-01의 보유기간 기준과 조율해야 하며 임의로 정하면 경계 거래를 오분류한다(§12 Open Issue). 둘째, 시계열이 필요한 신호(여러 거래에 걸친 wash·spoofing 패턴)는 A-12의 stateless 스냅샷으로는 완결되지 않으므로 F-02·F-03(STATEFUL, post-trade)가 이어받는다 — A-12는 *이번 한 거래에서 보이는* 자전거래 정황(양측 동일 클러스터)만 표시한다. + +### 5.5 왜 표시이고 차단이 아닌가 — scienter의 비결정성 + +A-12가 자격 게이트처럼 "적신호 있으면 BLOCK"으로 만들 수 없는 이유는, 적신호가 가리키는 위법(underwriter 도관·사기·시세조종)의 성립이 *사람의 판단을 요하는 요소*(고의·목적·정황·reasonable grounds·reason to know)에 걸려 있기 때문이다. "같은 클러스터"가 실제 자전거래인지, "즉시 전매"가 실제 도관인지, "임계 근접"이 실제 회피 의도인지는 온체인 코드가 결정론적으로 판정할 수 없다. 코드가 이를 자동으로 "위법"으로 확정해 차단하면 두 방향으로 틀린다 — 정당한 거래를 막아 별도 책임(거래 방해)을 지고, 코드가 할 수 없는 법적 판단을 하는 척하게 된다. 그래서 A-12는 *객관적으로 판정 가능한 신호만 기계가 탐지*하고, *그 신호가 위법을 뜻하는지의 판단은 사람에게* 넘긴다. 이 분리가 §8(패턴)·§11(운영자 층)의 핵심이다. + +## §6. 표시·처리 — 적신호가 잡히면 어떻게 되는가 + +### 6.1 전체 흐름 (사람 말로) + +A-12의 산출은 세 갈래다 — CLEAR(적신호 없음, 기록만), FLAG(적신호 있음, 코드 부여 + 운영자 큐), REVIEW(경계·복합, 운영자 큐 직행). 어느 경우에도 A-12 단독으로 거래를 차단하지 않는다. FLAG·REVIEW가 뜨면 거래는 Recipe 정책에 따라 (a) 그대로 진행되되 사후 검토 대상이 되거나, (b) 검토 완료까지 suspend된다 — 이 선택은 Recipe·운영자의 몫이며 A-12는 신호와 기록만 제공한다. + +### 6.2 표시(flag) 코드 + +| 코드 | 축 | 뜻 | 후속 | +| --- | --- | --- | --- | +| FLAG_RESALE_INTENT | RESALE | 도관·재유통 정황 | 502(d) reasonable inquiry 수행·기록 | +| FLAG_CONTROL_UNDISCLOSED | RESALE | (d)(3)(K) 인증 부재·모순 | 인증 진정성 확인, 필요 시 A-06 재검토 | +| FLAG_AI_INCONSISTENT | RESALE | 자격 claim과 사실 모순 | A-03·A-13 재확인 트리거 | +| FLAG_WASH_CLUSTER | MARKET | 양측 동일 실소유 클러스터 | F-02 시계열 검토 연계 | +| FLAG_STRUCTURING | MARKET | 임계 회피 쪼개기 정황 | C-08·D-01 맥락에서 의도 검토 | +| FLAG_PRICE_ANOMALY | MARKET | NAV 대비 가격 이탈 | 괴리 사유 확인 | +| FLAG_SUSPICIOUS_PATTERN | MARKET | 기타 위험 패턴 | F-03 SAR 판단 연계 | +| REVIEW_REDFLAG_UNCERTAIN | 공통 | 자동 분류 애매 | 운영자 큐 직행, 근거 기록 | + +### 6.3 Review Path (FLAG·REVIEW 처리) + +``` +1. A-12가 FLAG·REVIEW 반환 + flag event 온체인 기록 +2. 거래는 Recipe 정책에 따라 진행 또는 suspend (A-12는 결정 안 함) +3. Decipher Trust Operations 큐로 라우팅 +4. 운영자 검토: 적신호별 실사 → reason-to-know·scienter 판단 → (필요 시) 변호사 escalate +5. 결정: (해소) 거래 정상화 / (위험 확인) suspend·SAR / (경계) 추가 증거 요청 +6. 모든 결정·근거를 Compliance Log에 기록 (reasonable inquiry의 audit trail) +``` + +핵심은 6번이다 — A-12의 진짜 산출물은 "차단"이 아니라 *"우리는 적신호를 감지했고, 사람이 검토했으며, 그 근거를 남겼다"는 기록*이다(§1.4). 이 기록이 willful blindness 주장에 대한 방어가 된다. + +### 6.4 메시지 분리 — 당사자 노출용 vs 내부 기록용 + +적신호 표시는 사기·시세조종 조사와 연결될 수 있으므로, 당사자에게 노출하는 메시지와 내부 기록을 엄격히 분리한다. 당사자에게는 "추가 검토 중"(중립적)만 노출하고, 어떤 적신호가 어떤 근거로 잡혔는지(예: "귀하가 자전거래 클러스터로 탐지됨")는 노출하지 않는다 — 이는 tipping-off(조사 사실 누설) 방지와 오탐 시 명예 보호를 위해서다. 내부 기록에는 카테고리·근거·대조 데이터·운영자 판단을 상세히 남긴다. + +## §7. 테스트 케이스 — 스펙이 제대로 작동하는지 검증 + +### 7.1 Test 1 — CLEAR (적신호 없음) + +**상황:** 비-affiliate 매수인이 자기 계산으로 BUIDL을 매수, 매도인은 1년 이상 보유한 비-affiliate, 양측 클러스터 상이, 가격은 NAV 근처, 임계에서 멀다. +**기대:** R2 재판매 축은 매도인 비-affiliate라 비활성(RESALE 카테고리 미평가), R4 시장행위 축은 활성이나 어느 카테고리도 트리거 안 됨 → disposition = CLEAR, flags = []. A-12는 "red flag 없음"만 기록하고 거래는 다른 게이트 결과로 진행. + +### 7.2 Test 2 — FLAG_RESALE_INTENT (도관 정황) + +**상황:** BlackRock affiliate인 매도인이 *3일 전 취득한* 물량을 매도, 매수인의 acquisitionPurpose = FOR_OTHERS. +**기대:** R2 활성(affiliate 매도). `is_immediate_flip`(3일)와 `buyer.purpose == FOR_OTHERS` 둘 다 트리거 → flags = [FLAG_RESALE_INTENT], disposition = REVIEW. 운영자 큐로 라우팅되어 502(d) reasonable inquiry 수행. 거래는 Recipe 정책에 따라 진행/suspend. **차단은 A-12가 하지 않음.** + +### 7.3 Test 3 — Boundary (임계 근접 구조화) + +**상황:** 매도인이 D-01의 2,000-holder 임계 *바로 아래*가 되도록, 그리고 C-08 물량 임계를 *넘지 않도록*(초과 아님) 주문을 여러 건으로 쪼갠 정황. 각 건은 개별 게이트를 통과. +**기대:** 개별 게이트(C-08은 임계 초과 아니므로 PASS, D-01은 임계 미도달)는 통과하지만, A-12의 RF_STRUCTURING이 "임계 근접 + 반복 분할"을 포착 → flags = [FLAG_STRUCTURING], disposition = REVIEW. **경계 명시:** 여기서 A-12는 "임계를 넘었다"를 판정하지 않는다(그건 C-08·D-01의 > 판정). A-12는 "임계 바로 아래로 쪼개는 회피 의도가 의심된다"를 표시할 뿐이고, 실제 회피 의도는 운영자가 판단한다. + +### 7.4 Test 4 — FLAG_WASH_CLUSTER (자전거래 정황) + +**상황:** 매수인 지갑과 매도인 지갑이 A-04(신원 dedup)에서 *같은 실소유 클러스터*로 판정된 상태에서 서로 거래. +**기대:** R4 활성. `same_owner_cluster` 트리거 → flags = [FLAG_WASH_CLUSTER], disposition = REVIEW. F-02(시계열 시장감시)로 연계되어 반복 자전거래 패턴 여부 검토. **경계:** 한 번의 동일-클러스터 거래가 곧 위법 자전거래는 아니다(예: 동일인의 지갑 정리). A-12는 정황을 표시하고, 위법성은 F-02 시계열 + 운영자 판단이 확정. + +### 7.5 Test 5 — 오탐 → 운영자 CLEAR (false positive 처리) + +**상황:** Test 4의 동일-클러스터 거래가 실은 매수인이 자기 hot wallet에서 cold wallet으로 옮기며 발생한 정당한 자기이전(A-04가 같은 사람의 두 지갑으로 이미 인지). +**기대:** A-12는 여전히 FLAG_WASH_CLUSTER를 표시(객관 신호는 동일). 운영자 검토에서 "동일인 자기이전, 시장 왜곡 없음"으로 판단 → 거래 정상화, 근거를 Compliance Log에 기록. **함의:** 오탐이 나와도 A-12의 표시는 잘못이 아니다 — 표시의 목적은 위법 확정이 아니라 "사람이 확인했다는 기록"을 남기는 것이고, 그 기록 자체가 reasonable inquiry의 증거다. 오탐률이 높으면 라우팅 임계·대조 로직을 조정하되, "적신호를 아예 안 보는" 방향으로 가서는 안 된다(그것이 willful blindness). + +## §8. 감시형(Pattern C) 패턴 — 왜 이 방식인가 + +### 8.1 Decipher의 검증 방식 3패턴 + +Decipher는 법적 판정을 온체인 코드로 옮기는 방식을 세 가지로 나눈다. + +| 패턴 | 이름 | 작동 방식 | 예시 | +| --- | --- | --- | --- | +| A | 직접 계산형 | 온체인 코드가 직접 비교·계산해 PASS/FAIL | 나이 ≥ 18, 보유기간, 제재명부 매칭 | +| B | 증명서 확인형 | off-chain 신뢰기관이 판단 → 서명 claim → DEX는 claim만 확인 | AI·QP·affiliate 판정(A-03·A-13·A-06) | +| C | 감시형 | 객관 신호만 자동 표시, 판단은 운영자가 | 시세조종·사기 감시, red flag(A-12·F-02·F-03) | + +### 8.2 A-12에 패턴 C가 유일한 선택인 이유 + +**패턴 A는 불가능하다.** A-12가 가리키는 위법(underwriter 도관·사기·시세조종)의 성립은 §5.5에서 본 대로 고의·목적·정황·reasonable grounds·reason to know 같은 *사람의 판단 요소*에 걸린다. "같은 클러스터 = 자전거래", "즉시 전매 = 도관", "임계 근접 = 회피"를 코드가 결정론적으로 확정할 수 없다. 조건문으로 만들면 정당한 거래를 오차단한다. + +**패턴 B도 맞지 않는다.** 패턴 B는 "자격이 있는가"처럼 off-chain 기관이 *사전에 판단해 서명*할 수 있는 사안에 쓴다. 그러나 적신호는 거래 시점에 발생하는 *상황적 신호*라, 사전에 특정 매수인에 대해 "이 사람은 앞으로 적신호를 만들지 않는다"고 서명해 둘 수 없다. 적신호 감시는 거래마다 실시간으로 이뤄져야 한다. + +**그래서 패턴 C만 남는다.** 온체인 코드가 *객관적으로 판정 가능한 신호만* 탐지·표시하고, *그 신호가 위법을 뜻하는지의 판단은 사람*이 한다. 이것이 A-12를 "차단 게이트"가 아니라 "감지·라우팅 장치"로 만드는 이유다. + +### 8.3 패턴 C의 법적 토대 — reason to know·scienter의 구조 + +이 방식이 법적으로 성립하는 근거는 두 겹이다. 첫째, 재판매 축에서 §4(d)(3)(K)·Rule 502(d)는 "reasonable grounds to believe"·"reasonable care"·"reasonable inquiry"를 요구하는데, 이는 *결과의 보증*이 아니라 *합리적 주의의 과정*을 요구한다. A-12의 표시 + 운영자 검토 + 기록은 바로 그 "합리적 주의의 과정"을 구현한다. 둘째, 시장행위 축에서 §17(a)·10b-5의 scienter가 recklessness(적신호에 대한 willful blindness)를 포함하므로, *적신호를 감지·검토하는 절차 자체*가 recklessness를 부정하는 방어가 된다. 즉 A-12의 산출물은 "이 거래는 적법하다"는 확정이 아니라 "우리는 위험을 보았고 합리적으로 대응했다"는 *과정의 증거*다. 이 점에서 A-12는 자격 게이트(결과를 확정)와 근본적으로 다른 종류의 부품이다. + +**다시 강조:** A-12는 위법을 판정하지 않는다. 위법 판정은 SEC·법원의 몫이고, A-12는 그 판정에 앞서 *합리적 주의를 다했다는 기록*을 만드는 장치다. 이 구분을 흐리면(코드가 위법을 확정하는 것처럼 설계하면) 법적으로도 실무적으로도 틀린다. + +## §9. Cross-Element·Cross-Recipe Coordination — 혼자 움직이지 않는다 + +### 9.1 본 부품의 책임 경계 + +A-12는 **적신호의 탐지·표시·라우팅만** 책임진다. 세 가지를 책임지지 *않는다* — ① 자격 판정 자체(A-03·A-13), ② affiliate/control의 질적 판정(A-06), ③ 시계열·누적 시장감시(F-02·F-03). A-12의 결과는 다른 부품·레시피와 누적적으로(cumulative) 작동하며, 특히 R2(재판매)와 R4(시장행위)에서 서로 다른 역할로 켜진다. + +### 9.2 Element cascade map + +``` +A-12 (red flag screen) ──┬─ (R2 활성: affiliate 매도) ──► A-06 (affiliate 판정 결과 소비) + │ └─ RF_CONTROL_UNDISCLOSED ─► A-06 재검토 트리거 + │ + ├─ RF_AI_INCONSISTENT ──────────► A-03 / A-13 재확인 트리거 + ├─ RF_RESALE_INTENT ───────────► C-01 (보유기간·즉시전매 조율) + │ + └─ (R4 활성) RF_WASH_CLUSTER ───► A-04 (클러스터) → F-02 (시계열) + RF_STRUCTURING ───► C-08 · D-01 (임계 맥락) + RF_SUSPICIOUS ────► F-03 (SAR) +``` + +| cascade 트리거 | 관련 부품 | 관계 | +| --- | --- | --- | +| R2 활성 판단 | A-06 | A-06의 affiliate 결과를 *소비*(A-12는 재판정 안 함) | +| RF_CONTROL_UNDISCLOSED | A-06 | 인증-실제 불일치 시 A-06 재검토 트리거 | +| RF_AI_INCONSISTENT | A-03·A-13·A-11 | 자격 claim 재확인 트리거(claim 자체는 저들 소관) | +| RF_RESALE_INTENT | C-01 | "즉시 전매"의 경계일을 보유기간 기준과 조율 | +| RF_WASH_CLUSTER | A-04 → F-02 | A-04 클러스터 소비 → F-02 시계열로 연계 | +| RF_STRUCTURING | C-08·D-01 | 임계 맥락 소비(넘김 판정은 저들, A-12는 근접 표시) | +| RF_SUSPICIOUS_PATTERN | F-03 | SAR 판단으로 연계 | + +**해설:** A-12는 대부분의 입력을 *다른 부품이 만든 결과값*에서 가져온다(affiliate·claim·클러스터·임계). A-12의 고유 기여는 그 결과값들 사이의 *모순·이상을 포착해 표시*하는 것이다. 그래서 A-12는 "혼자 판정하는 부품"이 아니라 "여러 부품의 산출을 교차 대조하는 감시 부품"이다. + +### 9.3 Recipe orchestration + +| Recipe | 본 부품 발동 조건 | 본 부품의 역할 | +| --- | --- | --- | +| R2 (§4(a)(7)·Rule 144 재판매) | 조건부 — 매도인이 affiliate일 때 | 재판매 축 적신호(도관·지배관계·자격 모순) 표시 | +| R4 (시장행위 감시) | 핵심 — 항상 | 시장행위 축 적신호(자전거래·구조화·가격) 표시 | +| R1 (Reg D 506(c) 발행) | 비활성(원칙) | A-12는 재판매·유통 국면 부품 — 발행은 A-03·E-03 소관 | +| R3 (ICA §3(c)(7) 펀드) | 비활성 | 펀드 자격은 A-13·D-01 소관 | + +### 9.4 Conflict resolution rule — 3가지 경우 + +**경우 1 — A-12는 FLAG인데 모든 자격 게이트는 PASS.** 흔한 경우다. 매수인 AI claim도 유효(A-03 PASS)하고 매도인 보유기간도 충족(C-01 PASS)인데 A-12가 RF_RESALE_INTENT를 표시할 수 있다. 이때 게이트 PASS가 A-12 표시를 무효화하지 *않는다* — 두 부품이 보는 것이 다르기 때문이다(게이트는 자격, A-12는 적신호). 거래는 Recipe 정책에 따라 진행/suspend하되, A-12의 표시와 운영자 검토는 반드시 기록된다. + +**경우 2 — A-12 RF_CONTROL_UNDISCLOSED와 A-06 결과 충돌.** A-06이 "비-affiliate"로 판정했는데 A-12가 지배관계 징표를 포착하면, A-12는 A-06을 뒤집지 않고 *A-06 재검토를 트리거*한다. 최종 판단은 A-06(운영자·Trusted Issuer)이 하며, 재검토 결과가 A-12 표시를 해소하거나 확정한다. **A-12는 affiliate 여부를 스스로 판정하지 않는다**(A-06의 소관, 그리고 A-06의 bright-line 금지 원칙 준수). + +**경우 3 — A-12 RF_WASH_CLUSTER와 F-02의 시계열 판정 충돌.** A-12는 *이번 한 거래*의 동일-클러스터를 표시하지만, 그것이 위법 자전거래인지는 F-02의 *시계열 패턴*(반복성·거래량 부풀리기)과 운영자 판단이 확정한다. A-12 표시는 F-02 검토의 입력이며, F-02가 "정당한 자기이전"으로 판단하면 해소된다. 순서: A-12(pre-trade 표시) → F-02(post-trade 시계열) → 운영자(확정). + +### 9.5 Manifest 무결성과의 조율 + +A-12의 결과(CLEAR·FLAG·REVIEW + 카테고리)는 자산의 컴플라이언스 상태를 담는 Asset Compliance Manifest에 누적 기록된다. 거래 체결 직후(post-trade commit) Manifest 무결성 부품(B-01)이 R2·R4 각 부품 결과가 서로 모순되지 않는지 재검증한다. 특히 A-12가 FLAG인데 아무 운영자 기록도 없이 거래가 완결된 경우, B-01이 audit alert를 띄운다 — "적신호를 표시했는데 검토 기록이 없다"는 것 자체가 willful blindness 리스크이므로, 이 정합성 검사가 A-12의 audit trail 목적을 뒷받침한다. + +### 9.6 [해설] A-12의 경계 — A-06·A-03·F-02/F-03와 무엇이 다른가 + +A-12는 인접 부품들과 개념이 겹쳐 보이기 쉬워, 경계를 명시적으로 정리한다. 붙잡을 직관 하나 — **A-12는 "판정"하지 않는다. 다른 부품이 만든 판정·사실 사이의 모순·이상을 "표시"할 뿐이다.** + +| 구분 | 그 부품이 하는 일 | A-12가 하는 일 | +| --- | --- | --- | +| A-06 (affiliate) | 누가 affiliate인가를 질적으로 판정(Pattern B) | A-06 결과와 모순되는 지배관계 징표를 표시 | +| A-03·A-13 (자격) | AI/QP 자격을 검증·서명(Pattern B) | 그 claim과 거래시점 사실의 모순을 표시 | +| A-04 (신원 dedup) | 실소유 클러스터를 확정(Pattern B) | 그 클러스터가 양측에 동일한지를 표시 | +| C-08·D-01 (임계) | 물량·보유자 임계 초과(>)를 판정 | 임계 *근접* + 쪼개기 정황을 표시(넘김 판정 아님) | +| F-02·F-03 (시장감시) | 시계열·누적 패턴을 STATEFUL 추적(post-trade) | 이번 한 거래의 정황을 pre-trade STATELESS로 표시 | + +**세 가지 오해 방지.** + +- **A-06과의 관계.** A-12는 affiliate를 판정하지 않는다. A-06이 판정하고, A-12는 그 결과를 소비하거나(R2 활성 판단) 그 결과와 어긋나는 신호를 표시(재검토 트리거)한다. 지분율을 A-12의 판정 기준으로 코딩하면 A-06의 bright-line 금지 원칙을 위반한다. +- **A-03과의 관계.** A-12는 자격을 재검증하지 않는다. A-03이 발급한 claim은 유효한 것으로 전제하되, 그 claim과 *거래시점 사실이 모순*되면(reason to question) 표시해 A-03 재확인을 부른다. 이는 Release 33-9415의 "적신호가 있으면 검증 강도를 높인다"는 원리의 구현이다. +- **F-02/F-03과의 관계.** 이것이 가장 헷갈리는 경계다. A-12와 F-02/F-03은 *같은 red-flag taxonomy를 공유*하지만 시점·상태가 다르다. A-12는 **pre-trade·STATELESS** — 이번 거래에서 즉시 판정 가능한 정황(양측 동일 클러스터·NAV 괴리·임계 근접)을 표시. F-02/F-03은 **post-trade·STATEFUL** — 여러 거래에 걸친 패턴(반복 자전거래·spoofing·의심거래 누적)을 추적. 한 줄로: **A-12는 "이 거래에 이상 신호가 있다"를, F-02/F-03은 "이 계정·자산의 거래 이력에 조작 패턴이 있다"를 본다.** A-12가 taxonomy와 pre-trade 스크린을 정의하고, F-02/F-03이 그것을 시계열로 확장한다. + +## §10. 3-Layer Solution — 적신호 신뢰를 세 겹으로 + +### 10.1 왜 3겹 구조인가 + +적신호 판단에 쓰이는 입력은 여러 곳에서 온다 — 자기신고, 다른 부품의 결과, 오라클. 각 출처는 신뢰·비용·오탐률의 trade-off가 다르다. Decipher는 이를 세 겹으로 나눠 각 층의 역할·책임을 분리한다. + +| 층 | 무엇 | 커버리지 | 오탐 관리 | 법적 의미 | +| --- | --- | --- | --- | --- | +| Layer 1 — 자동 스크린 | 온체인 A-12의 객관 신호 탐지 | 넓음(모든 거래) | 높음(보수적 표시) | reasonable inquiry의 시작점 | +| Layer 2 — 운영자 검토 | Trust Operations의 사람 판단 | 표시된 거래 | 오탐 해소 | reason-to-know·scienter 판단 주체 | +| Layer 3 — 변호사·SAR | 경계·중대 사안의 법적 escalate | 소수(중대) | 최종 판단 | 위법 판정·보고의 문턱 | + +### 10.2 각 층의 법적 토대 + +**Layer 1 — 자동 스크린.** 객관적 신호를 넓게, 보수적으로 표시한다. 표시 자체는 위법 판정이 아니므로 오탐이 나와도 무방하다 — 목적은 "위험을 보았다"는 기록이다. 이 넓은 스크린이 §17(a)·10b-5의 recklessness를 부정하는 첫 번째 방어다. + +**Layer 2 — 운영자 검토.** 여기서 reason-to-know·scienter·reasonable grounds의 실질 판단이 이뤄진다. 운영자가 각 적신호를 실사해 "위험 확인/오탐 해소/경계"로 분류하고, 그 근거를 기록한다. 502(d)의 "reasonable inquiry"와 (d)(3)(K)의 "reasonable grounds" 판단이 여기서 구현된다. + +**Layer 3 — 변호사·SAR.** 경계 사안·중대 위험은 변호사 검토와 (해당 시) 의심거래보고로 escalate된다. 위법 확정·보고의 문턱을 넘는 판단은 이 층에서 이뤄진다. + +### 10.3 층 간 escalation 규칙 + +``` +Layer 1 (자동 스크린): 모든 거래 · 보수적 표시 + ↓ (FLAG·REVIEW 발생 시) +Layer 2 (운영자 검토): 표시된 거래 · reason-to-know 판단 + ↓ (경계·중대 위험 시) +Layer 3 (변호사·SAR): 위법 판정·보고 문턱 +``` + +### 10.4 Liability(책임) 분배 — 적신호를 방치해 위법이 드러난 경우 + +플랫폼이 명백한 적신호(예: 반복 자전거래)를 감지할 능력이 있었는데 표시·검토 없이 통과시켰고, 사후에 시세조종으로 드러났다고 하자. 누가 책임지는가? + +| 행위자 | 책임 측면 | +| --- | --- | +| 거래 당사자 | 실제 자전거래·사기 시 직접 사기·시세조종 책임(§17(a)·10b-5, 민·형사) | +| Decipher(인프라) | 적신호 감지 능력이 있었는데 방치하면 recklessness(willful blindness) 방조 위험 — A-12 + 운영자 검토 + 기록이 그 방어 | +| Fund(BlackRock) | 재판매 도관이 면제를 깨면 §3(c)(7)·§5 리스크 — A-12의 R2 축 표시가 조기 경보 | +| Trusted Issuer | 자격 claim이 적신호로 흔들렸는데 갱신 없이 방치하면 과실 | + +이 cascade의 정확한 경계 — 특히 "인프라 제공자가 적신호를 어디까지 감시할 의무가 있는가"(BD/ATS 지위 미결과 연동) — 는 변호사 follow-up의 핵심이다(§12). 쉽게 말하면 — "우리는 판이 깔리는 코드만 제공했다"는 항변이, *적신호를 감지할 수 있었던 플랫폼*에도 통하는지를 변호사가 정리해 줘야 한다. A-12는 어느 쪽 결론이든 "우리는 감시하고 기록했다"는 사실을 확보해 두는 장치다. + +## §11. Frontend·Off-chain Operator Layer — 사람 판단이 부품의 절반이다 + +### 11.1 사람 판단 층이 필요한 이유 + +A-12는 패턴 C이므로, 온체인 코드만으로는 완결되지 않는다 — 오히려 부품의 *절반이 사람 판단 층*이다. 온체인 스크린이 적신호를 표시해도, "그래서 위법인가"의 판단(reason to know·scienter·reasonable grounds)은 운영자가 해야 하고, 그 판단과 근거가 기록되어야 비로소 A-12의 법적 목적(reasonable inquiry의 audit trail)이 달성된다. 자동 표시만 있고 사람 검토·기록이 없으면, 오히려 "위험을 알고도 방치했다"는 반대 증거가 된다. + +### 11.2 Red-Flag Review Flow (운영자 관점) + +``` +[Trust Operations Layer — Off-chain] +1. A-12 flag event 수신 (카테고리·근거·대조 데이터 포함) +2. 카테고리별 실사: + - RF_RESALE_INTENT → 매수인에게 취득 목적 확인(502(d) reasonable inquiry) + - RF_CONTROL_UNDISCLOSED → (d)(3)(K) 인증·A-06 재대조 + - RF_AI_INCONSISTENT → A-03·A-13 claim 재확인 요청 + - RF_WASH_CLUSTER → A-04 클러스터·F-02 시계열 검토 + - RF_STRUCTURING → C-08·D-01 맥락에서 의도 확인 + - RF_PRICE_ANOMALY → NAV 괴리 사유 확인 +3. 판단: 해소(오탐) / 위험 확인(suspend·SAR) / 경계(변호사 escalate) +4. 결정·근거를 Compliance Log에 기록 (audit trail) +5. 필요 시 관련 claim 갱신 요청 또는 거래 suspend +``` + +### 11.3 Off-chain Operator의 자격 요건 + +A-12의 품질은 코드가 아니라 *적신호를 판단하는 사람의 역량*에 달려 있다. 운영자는 단순 모니터링 요원이 아니라, §2(a)(11) 도관 법리·§4(d)(3)(K) reasonable grounds·§17(a)/10b-5 scienter·자전거래/시세조종 유형을 이해하고 적용할 수 있어야 한다. Trusted Issuer가 자격 검증을 맡듯, red-flag 검토는 이 컴플라이언스 역량을 갖춘 Trust Operations 팀이 맡는다. + +### 11.4 Manual Review Path (REVIEW_REDFLAG_UNCERTAIN) + +``` +1. 온체인 A-12가 REVIEW_REDFLAG_UNCERTAIN 반환(자동 분류 애매) +2. 거래는 Recipe 정책에 따라 진행/대기 (A-12는 결정 안 함) +3. Trust Operations 큐로 직행 +4. 수동 검토: 추가 데이터 수집 → 카테고리 확정 또는 해소 → (필요 시) 변호사 +5. 결정 + 근거 기록, 재발 시 스크린 로직 조정 검토 +``` + +### 11.5 아키텍처 함의 + +A-12는 Decipher 공식 4층(Element·Recipe·Manifest·Operator) 중 *Operator 층에 특히 무겁게 의존*하는 부품이다. 자격 게이트(Pattern B)가 "Trusted Issuer의 판단 역량"에 의존하듯, A-12(Pattern C)는 "Trust Operations의 red-flag 판단 역량"에 의존한다. 따라서 운영자 선정·교육·상시 모니터링, 그리고 무엇보다 *검토 기록의 규율*(모든 FLAG에 대응 기록)이 A-12 운영 설계의 핵심이다. 쉽게 말하면 — 이 부품의 법적 가치는 온체인 코드가 아니라, *적신호에 사람이 어떻게 대응하고 기록했는가*에서 나온다. + +## §12. Open Issues — 변호사 follow-up 대상 + +본 부품의 스펙이 완전해지려면 풀어야 할 질문들이다. 각 항목은 완결된 질문 + 왜 필요한지 + 해소 경로(권고)로 적었다. + +| # | 질문(무엇을 결정해야 하나) | 왜 필요한가 | Priority | 해소 경로(권고) | +| --- | --- | --- | --- | --- | +| 1 | 인프라 제공자(Decipher)의 red-flag 감시 의무 범위 — BD/ATS 지위 미결과 연동해, "판이 깔리는 코드만 제공"하는 플랫폼이 적신호를 어디까지 감지·표시·보고할 법적 의무가 있는가 | 의무 범위가 A-12 스크린의 커버리지·강도를 정함. 과소하면 recklessness, 과대하면 BD/ATS 등록 논쟁 촉발 | 즉시 | 변호사 follow-up + SEC Crypto Task Force 문의(BD/ATS 프로젝트와 통합) | +| 2 | "즉시 전매(immediate flip)"의 경계 — RF_RESALE_INTENT에서 취득 후 며칠·어떤 패턴을 도관 정황으로 표시하나 | 경계 임의 설정 시 정당한 조기 매도를 오표시하거나 실제 도관을 놓침. C-01 보유기간 기준과 조율 필요 | 높음 | 변호사 + Decipher 자체 정리(C-01·502(d) 판례 검토) | +| 3 | scienter/recklessness의 실무 기준선 — 어떤 적신호를 어느 강도로 방치하면 willful blindness로 평가되나. A-12의 표시·검토가 충분한 방어가 되는 조건 | Layer 1 스크린 설계와 Layer 2 검토 SLA(며칠 내 처리)를 정함 | 높음 | 변호사 follow-up(10b-5 recklessness 순회법원 기준 정리) | +| 4 | RF_AI_INCONSISTENT의 발동 문턱 — 자격 claim과 어떤 사실이 어느 정도 모순되어야 "reason to question"인가(Release 33-9415 적용) | 과민하면 A-03과 충돌·거래 지연, 과소하면 자격 우회 방치 | 높음 | 변호사 + A-03 팀과 조율(33-9415 원문 기준) | +| 5 | A-12(pre-trade)와 F-02/F-03(post-trade)의 taxonomy·핸드오프 표준 — 같은 적신호를 어느 부품이 어느 시점에 소유하나, 중복·누락 방지 | 경계 불명 시 자전거래가 양쪽에서 빠지거나 이중 표시. §9.6 경계의 구현 확정 | 높음 | Decipher 자체 정리 + F-02/F-03 스펙과 통합 | +| 6 | tipping-off·프라이버시 경계 — 적신호 표시를 당사자·제3자에게 어디까지 노출하나(§6.4), 오탐 시 명예·차별 방지 | 노출 과다 시 조사 누설·명예훼손, 과소 시 당사자 방어권 문제 | 중간 | 변호사 follow-up(SAR 비밀유지·개인정보 규제) | +| 7 | 추가 red-flag 카테고리 — 본 7종 외 RWA·DEX 특유 위험(예: 오라클 조작·MEV·크로스체인 우회)의 taxonomy 편입 | 신종 위험 미포착 시 스크린 사각. 확장 시 오탐 관리 | 중간 | Decipher 자체 작성 + 변호사 검증 | + +**참고:** 위 1~3번은 A-12의 법적 방어력에 직결되는 immediate 항목이다. 특히 1번(감시 의무 범위)이 BD/ATS 지위와 함께 정리되지 않으면, A-12를 얼마나 넓고 강하게 작동시켜야 하는지의 기준 자체가 서지 않는다. + +## §13. 파일명 규칙 (Naming Convention) + +Decipher Element / Recipe 산출물 명명 규칙: + +- **Element:** A-XX_부품이름.md (예: A-12_모름항변차단.md) +- **Recipe:** R-XX_Recipe이름.md (예: R2_resale-4a7-144.md) + +Element 부품 ID 체계(앞글자 = 카테고리): + +| 앞글자 | 카테고리 | +| --- | --- | +| A | 신원·자격 (매수인·매도인 측) ← 본 부품(A-12)이 여기 | +| B | 자산·기술 메타 | +| C | 거래 경로·시점 | +| D | 집계·누적 | +| E | 발행자 측 | +| F | 행위·운영(시장감시) | + +본 부품: **A-12 = 신원·자격 카테고리의 red-flag 감시 부품** (재판매 축은 R2 조건부, 시장행위 축은 R4 핵심). \ No newline at end of file diff --git a/docs/compliance/elements/A-13_qualified-purchaser.md b/docs/compliance/elements/A-13_qualified-purchaser.md index 2399ce2..c02f26f 100644 --- a/docs/compliance/elements/A-13_qualified-purchaser.md +++ b/docs/compliance/elements/A-13_qualified-purchaser.md @@ -1,136 +1,128 @@ ---- -type: element-walkthrough -element-id: A-13 -element-name: Qualified Purchaser -parent-recipe: R3 (ICA §3(c)(7) Fund) -internal-id: ELE.A-13 -status: v2.1 — 공유 산출물 form (citation 검증 정정 반영·자체완결·규제맥락 우선) -audience: 개발팀·법무팀·외부 consultant·학회원 -related-external-sources: - - "15 USC § 80a-2(a)(51) — Qualified Purchaser 정의: https://www.law.cornell.edu/uscode/text/15/80a-2" - - "15 USC § 80a-3(c)(7) — ICA §3(c)(7) 면제: https://www.law.cornell.edu/uscode/text/15/80a-3" - - "17 CFR § 270.2a51-1 — Investments 정의·valuation·reasonable belief(h): https://www.law.cornell.edu/cfr/text/17/270.2a51-1" - - "17 CFR § 270.2a51-3 — Certain companies as qualified purchasers(목적형성 회사 look-through): https://www.law.cornell.edu/cfr/text/17/270.2a51-3" - - "17 CFR § 270.3c-5 — Knowledgeable Employee 제외: https://www.ecfr.gov/current/title-17/chapter-II/part-270/section-270.3c-5" - - "SEC v. Ralston Purina Co., 346 U.S. 119 (1953): https://supreme.justia.com/cases/federal/us/346/119/" - - "SEC v. W.J. Howey Co., 328 U.S. 293 (1946): https://supreme.justia.com/cases/federal/us/328/293/" - - "Oxford Univ. Bank v. Lansuppe Feeder, 933 F.3d 99 (2d Cir. 2019): https://law.justia.com/cases/federal/appellate-courts/ca2/16-4061/16-4061-2019-08-05.html" - - "SEC Release IC-22597, 62 FR 17512 (Apr. 9, 1997) — Privately Offered Investment Companies(adopting release): https://www.federalregister.gov/" -created: 2026-06-13 -updated: 2026-06-14 -tags: [element, A-13, qualified-purchaser, walkthrough, spec-sheet, R3, ICA-§3c7] ---- +# ELE.A-13_qualified-purchaser # A-13 Qualified Purchaser — 부품 심층 인수인계 문서 (Walkthrough) -> **이 문서는 무엇인가.** Decipher RWA DEX의 컴플라이언스 부품 중 하나인 **Qualified Purchaser 부품**(내부 식별자 A-13)을, 미국 펀드 규제를 처음 보는 사람도 이해할 수 있도록 풀어 쓴 인수인계 문서다. 개발자·법무팀·외부 자문 변호사·학회원이 각자 작업의 base로 그대로 쓸 수 있도록 — ① 이 규제가 어디서 왔고 왜 존재하는지, ② 어떤 사실을 입력받아 ③ 어떤 로직으로 판정하고 ④ 실패하면 어떻게 처리하며 ⑤ 어떤 테스트로 검증하는지를, 기술 요소마다 풀이를 함께 붙여 설명한다. +> **이 문서는 무엇인가.** Decipher RWA DEX의 컴플라이언스 부품 중 하나인 Qualified Purchaser 부품(내부 식별자 A-13)을, 미국 펀드 규제를 처음 보는 사람도 이해할 수 있도록 풀어 쓴 인수인계 문서다. 개발자·법무팀·외부 자문 변호사·학회원이 각자 작업의 base로 그대로 쓸 수 있도록 — ① 이 규제가 어디서 왔고 왜 존재하는지, ② 어떤 사실을 입력받아 ③ 어떤 로직으로 판정하고 ④ 실패하면 어떻게 처리하며 ⑤ 어떤 테스트로 검증하는지를, 기술 요소마다 풀이를 함께 붙여 설명한다. > -> **자체완결 원칙.** 이 문서는 다른 내부 문서를 열지 않아도 단독으로 이해되도록 작성했다. 인용은 미국 연방법·연방규칙·SEC·판례 등 **외부 공식 자료만** 사용한다. +> **자체완결 원칙.** 이 문서는 다른 내부 문서를 열지 않아도 단독으로 이해되도록 작성했다. 인용은 미국 연방법·연방규칙·SEC·판례 등 외부 공식 자료만 사용한다. -> ⚠️ **출처 검증 정정 노트 (v2.1, 2026-06-14).** -> 본 부품의 1차 리서치 및 v1.0·v2.0 초안에는 아래 인용 오류가 있었고, v2.1에서 연방규칙 원문(eCFR·Cornell LII)을 대조해 정정했다. 읽는 사람은 아래를 정확한 것으로 보면 된다. -> - **Knowledgeable Employee(펀드 임직원) 규칙은 Rule 2a51-3이 아니라 Rule 3c-5**(17 CFR § 270.3c-5)다. 또한 정확한 메커니즘은 "KE를 QP로 *간주*"가 아니라, **KE 보유분을 'exclusively QP' 판정에서 *제외***(Rule 3c-5(b))하는 것이다. -> - **Rule 2a51-3은 "목적형성 회사(formed for the specific purpose)" look-through 규칙**이다. (KE 규칙이 아님 — 둘이 뒤바뀌어 있었음) -> - **Reasonable Belief(합리적 신뢰) 안전항은 Rule 2a51-1(h)**다. ((g)가 아님. (g)는 QIB·합산투자 등 특칙) 또한 종전 인용문의 "reasonable care" 문구는 본 규칙 텍스트에 **존재하지 않는다** — 실제 (h)는 "Relying Person이 합리적으로 QP라고 믿으면 충분하다"는 더 단순한 문장이다. -> - **투자 취득용 차입금(Outstanding Indebtedness) 차감은 Rule 2a51-1(e)·(f)**, **주거·사업용 부동산 제외는 Rule 2a51-1(c)**다. ((d)는 평가 방법 — FMV 또는 cost — 규정) -> - **Oxford Univ. Bank 판결의 holding은 ICA §47(b)의 묵시적 사적 소권(rescission)**이다. "§3(c)(7) 자체에 관한 직접 판시"가 아니라, 펀드가 면제를 잃을 때 투자자가 매수계약 *해제*를 청구할 수 있는 *경로*를 확인해 준 판결이다. -> - **SEC Release IC-22597은 1997년 adopting release**(62 FR 17512, 1997-04-09)다. (종전 "1996" 표기는 부정확) +**출처 기준 (Version 1.0, 2026-06-22).** 본 부품의 미국 증권법 인용은 다음 1차 출처를 기준으로 한다 — 15 U.S.C. §80a-2(a)(51)·§80a-3(c)(7)은 uscode.house.gov 현행본, 17 CFR §270.2a51-1·2a51-2·2a51-3·3c-1·3c-5·3c-6은 eCFR 현행본(Title 17), JOBS Act §201(b)(2)(Pub. L. 112-106)와 판례는 govinfo.gov(U.S. Reports / U.S. Courts Opinions / Public Laws), SEC Release IC-22597(62 FR 17512, 1997-04-09)·관련 No-Action Letter·C&DI는 sec.gov다. 제정법 출처는 uscode.house.gov로 통일했으며, govinfo.gov/link/uscode/... 딥링크도 동일한 1차 출처다. + +> **테스트 토큰 전제 (중요).** 본 문서는 실제 BlackRock BUIDL의 발행 표준, transfer architecture, 또는 현재 운영 조건을 단정하지 않는다. 본 프로젝트는 BUIDL-like §3(c)(7) private fund interest를 ERC-3643 테스트 토큰으로 모델링하여, QP-based pre-trade transfer restriction을 검증하는 것이다. 이하 'BUIDL'·'ERC-3643' 관련 서술은 모두 이 모델링 전제 하의 것이다. --- ## §1. 규제 맥락 — 이 부품이 다루는 규제는 어디서 왔는가 (Context First) -> **왜 맥락부터 읽어야 하나.** 이 부품은 한 줄로 말하면 *"이 매수인이 BlackRock BUIDL 같은 펀드 토큰을 살 자격이 있는가"*를 거래 직전에 판정한다. 그런데 "자격"의 기준인 **Qualified Purchaser**(QP)는 미국 펀드 규제의 깊은 곳에서 나온 개념이라, 조문만 들이밀면 *왜* 이런 기준이 있는지 알 수 없다. 그래서 큰 그림(미국 증권법의 구조 → 이 규제가 생긴 역사 → 우리 시스템에서의 의미 → 한국법과의 비교)을 먼저 깐다. +> **왜 맥락부터 읽어야 하나.** 이 부품은 한 줄로 말하면 *"이 매수인이 BlackRock BUIDL 같은 펀드 토큰을 살 자격이 있는가"를* 거래 직전에 판정한다. 그런데 "자격"의 기준인 Qualified Purchaser(QP)는 미국 펀드 규제의 깊은 곳에서 나온 개념이라, 조문만 들이밀면 왜 이런 기준이 있는지 알 수 없다. 그래서 큰 그림(미국 증권법의 구조 → 이 규제가 생긴 역사 → 우리 시스템에서의 의미 → 한국법과의 비교)을 먼저 깐다. ### 1.1 미국 증권법의 4개 기둥(4 Pillar)과 그중 ICA 1940의 자리 -미국 연방 증권규제는 한국처럼 하나의 「자본시장법」으로 통합돼 있지 않고, **시대별로 따로 만들어진 4개의 큰 법률**이 각자 다른 국면을 맡는다. 쉽게 말하면 한국은 증권 관련 규제가 *한 건물 안의 여러 부서*라면, 미국은 *길 건너 따로 선 4개의 건물*이다. +미국 연방 증권규제는 한국처럼 하나의 「자본시장법」으로 통합돼 있지 않고, 시대별로 따로 만들어진 4개의 큰 법률이 각자 다른 국면을 맡는다. 쉽게 말하면 한국은 증권 관련 규제가 한 건물 안의 여러 부서라면, 미국은 길 건너 따로 선 4개의 건물이다. | 기둥(법률) | 맡는 국면 | 핵심 관심사 | 한국법 대응(직관용) | |---|---|---|---| -| **Securities Act of 1933**(1933년법) | 증권의 **발행**(1차 시장) | "팔기 전에 등록·공시했는가" | 자본시장법 증권신고서·공모 규제 | -| **Securities Exchange Act of 1934**(1934년법) | 증권의 **유통·거래소·중개업자**(2차 시장) | "거래소·broker-dealer·계속공시" | 자본시장법 유통시장·금융투자업·거래소 규정 | -| **Investment Company Act of 1940**(ICA, 투자회사법) | **집합투자기구(펀드)** 자체의 규율 | "펀드 구조가 투자자를 착취하지 않는가" | 자본시장법 집합투자(펀드) 규제 | -| **Investment Advisers Act of 1940**(투자자문업자법) | **투자자문업자**(adviser) | "남의 돈을 굴려주는 자의 신인의무" | 자본시장법 투자자문·일임업 | +| Securities Act of 1933(1933년법) | 증권의 발행(1차 시장) | "팔기 전에 등록·공시했는가" | 자본시장법 증권신고서·공모 규제 | +| Securities Exchange Act of 1934(1934년법) | 증권의 유통·거래소·중개업자(2차 시장) | "거래소·broker-dealer·계속공시" | 자본시장법 유통시장·금융투자업·거래소 규정 | +| Investment Company Act of 1940(ICA, 투자회사법) | 집합투자기구(펀드) 자체의 규율 | "펀드 구조가 투자자를 착취하지 않는가" | 자본시장법 집합투자(펀드) 규제 | +| Investment Advisers Act of 1940(투자자문업자법) | 투자자문업자(adviser) | "남의 돈을 굴려주는 자의 신인의무" | 자본시장법 투자자문·일임업 | -**본 부품(Qualified Purchaser 부품)은 세 번째 기둥, 즉 ICA 1940의 영역에서 나온다.** 이 점이 중요하다. A-13은 *"증권을 발행할 때 등록했는가"*(1933년법)나 *"거래소·중개업자 등록을 했는가"*(1934년법)를 보는 부품이 아니다. 그것들은 완전히 별개의 법체계(legal regime)이고, Decipher에서는 다른 Recipe·다른 부품이 맡는다. A-13이 답하는 질문은 오직 하나다 — **"이 펀드의 지분을 사려는 사람이, ICA가 요구하는 *투자자 자격*을 갖췄는가."** +본 부품(Qualified Purchaser 부품)은 세 번째 기둥, 즉 ICA 1940의 영역에서 나온다. 이 점이 중요하다. A-13은 "증권을 발행할 때 등록했는가"(1933년법)나 "거래소·중개업자 등록을 했는가"(1934년법)를 보는 부품이 아니다. 그것들은 완전히 별개의 법체계(legal regime)이고, Decipher에서는 다른 Recipe·다른 부품이 맡는다. A-13이 답하는 질문은 오직 하나다 — "이 펀드의 지분을 사려는 사람이, ICA가 요구하는 투자자 자격을 갖췄는가." -쉽게 말하면: 같은 토큰 한 건의 거래라도 미국법은 *세 군데의 다른 관문*을 통과시킨다. (1) 발행이 적법했나(1933년법), (2) 거래 경로·중개가 적법한가(1934년법), (3) 그리고 — 그 토큰이 *펀드 지분*이라면 — 펀드가 등록 면제를 유지할 수 있는 투자자에게만 가는가(ICA 1940). A-13은 세 번째 관문의 핵심 검사원이다. +**쉽게 말하면:** 같은 토큰 한 건의 거래라도 미국법은 세 군데의 다른 관문을 통과시킨다. (1) 발행이 적법했나(1933년법), (2) 거래 경로·중개가 적법한가(1934년법), (3) 그리고 — 그 토큰이 펀드 지분이라면 — 펀드가 등록 면제를 유지할 수 있는 투자자에게만 가는가(ICA 1940). A-13은 세 번째 관문의 핵심 검사원이다. ### 1.2 왜 이 규제가 존재하는가 — 대공황과 investment trust 스캔들 -ICA 1940은 진공에서 태어난 법이 아니다. **1929년 대공황**의 직접적 산물이다. +ICA 1940은 진공에서 태어난 법이 아니다. 1929년 대공황의 직접적 산물이다. -쉽게 말하면 이렇다. 1920년대 미국에는 **investment trust**(오늘날의 펀드 조상)가 우후죽순 생겼다. 일반 대중의 돈을 모아 주식·채권에 굴리는 구조였는데, 당시엔 규제가 거의 없었다. 그 결과 1929년 붕괴 전후로 전형적인 병폐가 드러났다 — 운용자가 자기 잇속을 챙기는 **self-dealing(자기거래)**, 빚으로 빚을 쌓아 위험을 키우는 **excessive leverage·pyramiding(과도한 차입·피라미드 구조)**, 운용자와 투자자 이익이 부딪히는 **conflicts of interest(이해상충)**, 투자자가 펀드 안을 들여다볼 수 없는 **opaque governance(불투명한 지배구조)**가 그것이다. +쉽게 말하면 이렇다. 1920년대 미국에는 investment trust(오늘날의 펀드 조상)가 우후죽순 생겼다. 일반 대중의 돈을 모아 주식·채권에 굴리는 구조였는데, 당시엔 규제가 거의 없었다. 그 결과 1929년 붕괴 전후로 전형적인 병폐가 드러났다 — 운용자가 자기 잇속을 챙기는 self-dealing(자기거래), 빚으로 빚을 쌓아 위험을 키우는 excessive leverage·pyramiding(과도한 차입·피라미드 구조), 운용자와 투자자 이익이 부딪히는 conflicts of interest(이해상충), 투자자가 펀드 안을 들여다볼 수 없는 **opaque governance(불투명한 지배구조)가** 그것이다. -의회(Congress)의 결론은 *"펀드라는 구조 그 자체가 일반 투자자에게 독특한 위험(unique risk)을 안긴다"*는 것이었다. 그래서 ICA 1940은 **등록 펀드에 대단히 엄격한 규율**을 건다 — SEC 등록, 자산의 분리보관(custody), 독립이사 중심 governance, 차입(leverage) 한도, 이해관계자 거래(affiliate transaction) 제한 등. +의회(Congress)의 결론은 *"펀드라는 구조 그 자체가 일반 투자자에게 독특한 위험(unique risk)을 안긴다"는* 것이었다. 그래서 ICA 1940은 등록 펀드에 대단히 엄격한 규율을 건다 — SEC 등록, 자산의 분리보관(custody), 독립이사 중심 governance, 차입(leverage) 한도, 이해관계자 거래(affiliate transaction) 제한 등. -여기서 면제(exemption)의 필요가 생긴다. hedge fund·venture capital·private equity처럼 **세련된 투자자(sophisticated investor)만 상대하는 펀드**에까지 이 엄격한 규율을 강제하는 것은 과잉이다. 그래서 ICA §3(c)에 여러 면제 통로가 마련됐다. 그중 두 개가 핵심이다. +여기서 면제(exemption)의 필요가 생긴다. hedge fund·venture capital·private equity처럼 세련된 투자자(sophisticated investor)만 상대하는 펀드에까지 이 엄격한 규율을 강제하는 것은 과잉이다. 그래서 ICA §3(c)에 여러 면제 통로가 마련됐다. 그중 두 개가 핵심이다. | 면제 통로 | 투자자 수 제한 | 투자자 자격 조건 | |---|---|---| -| **§3(c)(1)**(1940년 제정) | beneficial owner **100인 이하** | 특별한 자격 요건 없음 | -| **§3(c)(7)**(1996년 NSMIA 신설) | 인원수 cap 없음(실무상 후술) | **모두 Qualified Purchaser** | +| §3(c)(1)(1940년 제정) | beneficial owner 100인 이하 | 특별한 자격 요건 없음 | +| §3(c)(7)(1996년 NSMIA 신설) | 인원수 cap 없음(실무상 후술) | 모두 Qualified Purchaser | -§3(c)(7)은 **1996년 NSMIA**(National Securities Markets Improvement Act, 전국증권시장개선법)로 신설됐다. 핵심 거래(trade-off)는 이렇다 — "투자자 머릿수 100인 cap을 풀어주는 대신, 한 명 한 명이 모두 QP여야 한다." 즉 *양(머릿수)을 풀고 질(자격)을 높인* 것이다. (다만 펀드가 실제로 투자자 수를 무한정 늘리지는 못한다. 1934년법 §12(g)의 등록 트리거 — 통상 record holder 2,000인 — 때문에, §3(c)(7) 펀드도 실무상 2,000인 미만으로 관리한다. 이건 ICA가 아니라 1934년법에서 오는 *별개의* 제약이다.) +§3(c)(7)은 1996년 NSMIA(National Securities Markets Improvement Act, 전국증권시장개선법)로 신설됐다. 핵심 거래(trade-off)는 이렇다 — "투자자 머릿수 100인 cap을 풀어주는 대신, 한 명 한 명이 모두 QP여야 한다." 즉 양(머릿수)을 풀고 질(자격)을 높인 것이다. (다만 펀드가 실제로 투자자 수를 무한정 늘리지는 못한다. 1934년법 §12(g)의 등록 트리거 — 통상 record holder 2,000인(JOBS Act가 종전 500인에서 상향) — 때문에, §3(c)(7) 펀드도 실무상 2,000인 미만으로 관리한다. 이건 ICA가 아니라 1934년법에서 오는 별개의 제약이다.) -**오늘날 토큰화된 RWA 펀드(BlackRock BUIDL, Ondo, Securitize 발행물 등) 대부분이 바로 이 §3(c)(7) 통로를 쓴다.** 그래서 A-13은 학술적 부품이 아니라, 실제 BUIDL을 거래소에 올리는 순간 작동해야 하는 부품이다. +**두 개의 다른 축 — 증권법(AI)과 투자회사법(QP).** BUIDL 같은 토큰은 서로 다른 두 법의 자격을 *둘 다* 통과해야 한다. **① 증권법 축 = Accredited Investor(AI).** 1933년법 Reg D Rule 506(c)는 *issuer의 발행(offering·sale)* 면제 구조로, 이를 쓰면 모든 purchaser가 AI여야 하고 issuer가 reasonable steps to verify를 취해야 한다(그 자체는 2차 재판매 통로가 아니며, 재판매는 §4(a)(7)·Rule 144 등 별도 resale exemption 소관 — §1.3). **② 투자회사법 축 = Qualified Purchaser(QP).** §3(c)(7) 펀드 면제를 유지하려면 보유하는 모든 사람이 취득 시점에 QP여야 한다. 주의 — 이 둘은 "1차=AI, 2차=QP"처럼 단계로 갈리는 게 아니다. 증권법(AI)은 발행이든 재판매든 거래마다, 투자회사법(QP)은 거래 시점과 무관하게 항상 걸린다(두 법이 무엇을 등록시키는지가 달라서다 — §1.3에서 상술). QP는 AI보다 훨씬 높은 문턱이라 AI를 통과했다고 QP가 되는 게 아니다(역도 성립 안 함). -### 1.3 Decipher 시스템에서 왜 중요한가 — Existential Risk +| 자격 | 근거 법 | 대략의 기준 | 쓰이는 곳 | Decipher 부품 | +|---|---|---|---|---| +| Accredited Investor (AI) | 1933년법 506(c)(발행)·§4(a)(7)(재판매) | 순자산 $1M(주거주택 제외) 또는 소득 $200K/$300K | 발행 면제(506(c)) · §4(a)(7) 재판매 면제 | A-03 | +| Qualified Purchaser (QP) | ICA §3(c)(7) | 투자자산(investments) $5M / $25M | 펀드 등록 면제(1940법, 상시) | A-13(본 부품) | -이제 우리 시스템으로 내려오자. BlackRock BUIDL이 Decipher DEX에 listing된다고 하자. BUIDL은 **§3(c)(7) 면제에 기대어** 투자회사 등록을 피하고 있다. §3(c)(7)의 핵심 요건을 다시 보면 — 펀드의 **모든 outstanding securities(발행된 전체 지분)**가, **취득 시점(at the time of acquisition)에 Qualified Purchaser인 자**에 의해 **배타적으로(exclusively)** 소유되어야 한다. +기준 자체도 다르다 — AI는 **순자산·소득**(net worth/income)으로 보고, QP는 **투자자산**(investments)으로 본다. 그래서 A-03(AI 검사)과 A-13(QP 검사)은 다른 데이터로 다른 문턱을 따지는 별개의 부품이고, 둘을 혼동해 "A-03을 통과했으니 A-13도 통과"로 처리하면 치명적 오작동이 된다. -여기서 "exclusively"가 무섭다. **단 한 명의 non-QP가 BUIDL을 취득하는 순간**, 그 펀드는 "QP에게만 배타적으로 소유된다"는 조건을 깨뜨린다. 결과는 단계적으로 파국이다. +오늘날 토큰화된 RWA 펀드(BlackRock BUIDL, Ondo, Securitize 발행물 등) 대부분이 바로 이 §3(c)(7) 통로를 쓴다. 그래서 A-13은 학술적 부품이 아니라, 이런 토큰(본 프로젝트에선 BUIDL-like §3(c)(7) 테스트 토큰)을 거래소에 올리는 순간 작동해야 하는 부품이다. -``` -non-QP 1명이 BUIDL 매수 - → §3(c)(7) "exclusively QP" 조건 위반 - → BUIDL의 §3(c)(7) 면제 status 상실 - → BUIDL이 "미등록 투자회사(unregistered investment company)"로 전락 - → ICA 위반 상태에서 운영 → 등록 의무(수개월·막대한 비용) 또는 거래 정지·강제 unwind - → (그리고 결정적으로) 투자자가 §47(b)로 매수계약 rescission(해제) 청구 가능 -``` +### 1.3 증권 등록 vs 펀드 등록 — 나란히 작동하는 두 축 -마지막 줄이 이 위험에 *법적 이빨*을 준다. **Oxford Univ. Bank v. Lansuppe Feeder, 933 F.3d 99 (2d Cir. 2019)** 판결에서 제2연방항소법원은 **ICA §47(b)가 묵시적 사적 소권(implied private right of action)을 만들어, ICA를 위반하는 계약의 당사자가 *해제(rescission)*를 청구할 수 있다**고 판시했다. 쉽게 말하면 — 펀드가 면제를 잃어 ICA 위반 상태가 되면, 그 손해를 본 투자자가 직접 법원에 가서 "내 매수계약을 무효로 돌려달라"고 할 수 있다는 뜻이다. 펀드(그리고 그 인프라)에게는 집단소송·환매청구가 현실이 된다. (이 판결은 §3(c)(7) 그 자체를 다룬 사건은 아니지만, 면제 상실이 *어떤 경로로* 구체적 손해배상·계약해제로 이어지는지를 보여주는 근거로 쓰인다.) +AI와 QP가 헷갈리는 뿌리는, 둘이 **서로 다른 두 법이고 등록시키는 "대상"이 다르다**는 데 있다. 하나는 거래(행위)를 등록시키고, 하나는 회사(주체)를 등록시킨다. -그래서 **DEX의 거래 직전 관문(pre-trade gate)에서 모든 prospective buyer의 QP 자격을 확인하는 일은 "있으면 좋은" 기능이 아니라 BUIDL listing의 존립을 좌우하는(existential) 안전장치**다. 업계 선례(Securitize·tZERO·INX)에서도 엄격한 pre-trade QP gating이 사실상 industry standard로 자리잡았다. A-13은 그 관문의 매수인 측 핵심 검사원이다. +**증권 등록(1933 증권법).** 등록 대상은 **증권을 파는 행위**(offering·sale)다. "이 증권을 공시(prospectus) 없이 팔아도 되나?"를 묻는다. 보호 방식은 사는 사람에게 정보를 주는 것이고, 거래마다 따진다(발행 한 번, 재판매 한 번). 공모면 등록(증권신고서), 사모면 면제 — Rule 506(c)는 매수인이 전부 AI면 일반청약하며 팔아도 된다고 면제해 준다(AI는 스스로 보호할 수 있어 공시가 덜 필요). -쉽게 말하면: A-13이 실수로 non-QP를 한 명 통과시키면, 잘못되는 것은 그 거래 하나가 아니라 *펀드 전체*다. 그래서 이 부품의 설계 철학은 시종 "보수적으로, 의심스러우면 막거나 사람에게 넘긴다"이다. +**발행 면제와 2차 재판매의 구분 (중요).** Rule 506(c)는 *issuer의 offering·sale* 면제(§4(a)(2) safe harbor)일 뿐, 일반적인 2차 재판매 통로가 아니다. 2차 재판매는 어떤 resale exemption을 쓰느냐에 따라 buyer-side AI 요건의 무게가 달라진다 — **§4(a)(7)**을 쓰면 buyer가 AI인지가 직접 요건이지만, **Rule 144**를 쓰면 핵심은 seller-side 요건(restricted securities holding period 6개월/1년, affiliate 여부, manner of sale, volume)이다. A-13은 이 Securities Act 축과 **별개로**, ICA §3(c)(7) fund status 유지를 위해 *buyer가 QP인지*를 본다. -### 1.4 한국 자본시장법과의 비교 — 전문투자자 vs Qualified Purchaser +**펀드 등록(1940 투자회사법).** 등록 대상은 **펀드라는 회사**(투자회사) 그 자체다. "이 펀드가 뮤추얼펀드처럼 SEC에 등록해 ICA 운영 규제(자산 보관·지배구조·레버리지·수수료 제한)를 받아야 하나?"를 묻는다. 보호 방식은 펀드 운영 전반을 감독하는 것이고, 거래가 아니라 기구의 상시 status다(계속 유지돼야 함). §3(c)(7)은 투자자가 전부 QP면 이 등록·규제를 면제해 준다(QP는 부유·정교해 그 보호가 불필요). -한국 변호사·개발팀이 직관을 잡도록, 한국 자본시장법과 나란히 놓아 보자. (아래는 *직관을 위한 비유*이며 법적 등가가 아니다 — 두 제도의 기준·효과는 다르다.) +| | 증권 등록(1933법) | 펀드 등록(1940법) | +|---|---|---| +| 등록 대상 | 증권의 offering·sale = 거래·행위 | 펀드 = 투자회사 = 회사·주체 | +| 묻는 질문 | "공시 없이 팔아도 되나?" | "투자회사로 등록·감독받아야 하나?" | +| 보호 방식 | 매수인에게 공시(prospectus) | 펀드 운영 전반 SEC 감독 | +| 단위 | 발행·재판매 매 거래마다 | 기구의 상시 status(계속) | +| 면제 통로 | §4(a)(2) · 506(c) | §3(c)(1) · §3(c)(7) | +| 면제 투자자 요건 | Accredited Investor (AI) | Qualified Purchaser (QP) | +| 언제 작동 | 1차 발행 + 2차 재판매(거래마다) | 발행·보유·2차 내내 항상 | -**구조의 차이.** 한국은 모든 집합투자기구를 「자본시장법」 하나에서 통합 규제하고, 공모(public offering)와 사모(private)를 **청약 권유 50인 기준**으로 가른다. 미국은 앞서 본 대로 4개 법률로 쪼개져 있고, 펀드 면제는 ICA §3(c) 안에서 별도 통로로 작동한다. +**BUIDL이 둘 다 걸리는 이유.** BUIDL은 (a) *팔리는 증권*이면서 동시에 (b) *자산을 굴리는 펀드*다. 그러니 증권법(파는 행위)과 투자회사법(펀드라는 회사)이 둘 다 적용되고, 증권법 면제엔 AI·펀드 면제엔 QP라는 서로 다른 두 자격을 둘 다 통과해야 한다. "1차=증권법, 2차=투자회사법"이 아니라 나란히 작동하는 다른 축이다 — 증권법은 거래라서 1차에도 2차 재판매에도 매번 면제(AI)가 필요하고, 투자회사법은 회사 status라서 거래 시점과 무관하게 항상 유지돼야 한다(QP). QP가 1·2차 내내 끊기면 안 되는 것도, "QP판 Rule 144"가 없는 것도 이 때문이다 — Rule 144는 거래(재판매) 면제일 뿐 회사 status 요건을 풀어주지 않는다. -**투자자 자격 개념의 차이 — 이게 핵심이다.** 한국 자본시장법에는 크게 **전문투자자**(금융기관·국가·상장법인 + 일정 자산·전문성 요건을 갖춘 개인)와 **일반투자자**의 *이층 구조*가 있다. 그런데 미국은 세련된 투자자를 **두 단계(two tiers)**로 더 잘게 나눈다. +**파는 건 회사인데 왜 요건이 매수인에게 걸리나.** 두 법의 보호 대상은 **투자자**(사는 사람)이지 파는 회사가 아니다. "이 거래에서 등록·공시라는 보호장치를 빼줘도 되나?"를 판단하려면, 사는 사람이 그 보호 없이도 스스로를 지킬 수 있는 부류인지를 봐야 한다 — 그래서 요건이 매수인에게 걸린다. 일반 개인에게 팔면 정보·협상력이 부족해 면제 불가, AI/QP에게만 팔면 스스로 실사·협상이 가능해 면제 가능. 즉 "누가 파느냐"가 아니라 "누가 사느냐"가 위험을 결정한다. -| 자격 | 근거 법 | 대략의 기준 | 쓰이는 곳 | Decipher 부품 | -|---|---|---|---|---| -| **Accredited Investor**(적격투자자) | 1933년법 / Reg D | 순자산 $1M(주거주택 제외) 또는 소득 $200K/$300K | 발행 면제(Reg D 506) | A-03 | -| **Qualified Purchaser**(QP) | ICA §3(c)(7) | **투자자산(investments) $5M / $25M** | 펀드 등록 면제(§3(c)(7)) | **A-13(본 부품)** | +다만 요건의 *대상*은 매수인이어도, 그걸 지키고 증명할 *책임*은 파는 회사(와 그 대리인)에게 있다. 506(c)의 "reasonable steps to verify", §3(c)(7)의 reasonable belief가 그것이다 — 비적격자에게 팔면 면제가 깨지고 회사가 책임진다. 그래서 Decipher에서는 **Trusted Issuer가 매수인 자격을 오프체인에서 검증**하고 claim에 서명한다. 한 줄로: 요건은 "사는 사람의 자질"에 걸리지만, 그 자질을 확인할 책임은 "파는 회사"가 진다. (투자회사법 §3(c)(7)은 한 겹 더 무겁다 — 펀드 회사의 면제 status가 "보유자 전원 QP"에 묶여 있어 한 명이라도 비-QP가 들어오면 회사 전체 면제가 깨진다. 그래서 매수인 자격이 1회성 발행 심사로 끝나지 않고 2차 거래까지 상시 유지돼야 한다.) + +### 1.4 Decipher 시스템에서 왜 중요한가 — Existential Risk + +이제 우리 시스템으로 내려오자. BlackRock BUIDL이 Decipher DEX에 listing된다고 하자. BUIDL은 §3(c)(7) 면제에 기대어 투자회사 등록을 피하고 있다. §3(c)(7)의 핵심 요건을 다시 보면 — 펀드의 **모든 outstanding securities(발행된 전체 지분)가**, 취득 시점(at the time of acquisition)에 Qualified Purchaser인 자에 의해 배타적으로(exclusively) 소유되어야 한다. + +여기서 "exclusively"가 핵심이다. **QP claim 없이 non-QP가 취득하거나, 펀드(또는 그 대리인)가 reasonable belief를 뒷받침할 검증 없이 이전을 허용하면**, 그 펀드는 "QP에게만 배타적으로 소유된다"는 조건이 훼손될 중대한 위험에 놓인다. (Rule 2a51-1(h)의 reasonable belief 안전항 — Relying Person이 검증에 근거해 합리적으로 QP라 믿었다면 사후에 실제로는 비-QP였음이 드러나도 곧바로 자동 붕괴하지는 않는다 — 이 완충을 제공한다. 그러나 그 검증 없이 비-QP가 유입되면 아래 경로가 현실이 된다.) 검증 실패 시 최악의 경로는 단계적이다. + +``` +검증(reasonable belief) 없이 non-QP가 BUIDL 매수 + → §3(c)(7) "exclusively QP" 조건 위반 + → BUIDL의 §3(c)(7) 면제 status 상실 + → BUIDL이 "미등록 투자회사(unregistered investment company)"로 전락 + → ICA 위반 상태에서 운영 → 등록 의무(수개월·막대한 비용) 또는 거래 정지·강제 unwind + → SEC enforcement · 계약 집행가능성(unenforceability) · 상업적 unwind · issuer/sponsor 계약 책임 +``` -쉽게 말하면: 한국의 "전문투자자"가 미국에 가면 *대략* accredited investor + qualified purchaser를 합쳐 놓은 자리쯤에 선다. 하지만 미국은 이 둘을 **다른 법, 다른 기준, 다른 목적으로 엄격히 구분**한다. accredited investor는 *발행* 단계의 문턱(상대적으로 낮음)이고, qualified purchaser는 *펀드 면제* 단계의 문턱(훨씬 높음)이다. 기준 자체도 다르다 — accredited는 **순자산·소득(net worth/income)**으로 보고, QP는 **투자자산(investments)**으로 본다. (이 차이는 §3에서 자세히 다룬다. 둘을 혼동하면 "A-03을 통과했으니 A-13도 통과"라는 치명적 오작동이 생긴다.) +위 마지막 줄들이 이 위험에 실질적 강제력을 부여한다 — 다만 그 강제력의 **경로는 2026년에 바뀌었다.** 과거 *Oxford Univ. Bank v. Lansuppe Feeder*, 933 F.3d 99 (2d Cir. 2019)에서 제2연방항소법원은 ICA §47(b)가 묵시적 사적 소권(implied private right of action)을 만들어 위반 계약 당사자가 rescission을 청구할 수 있다고 보았다. 그러나 **2026년 연방대법원의 *FS Credit Opportunities Corp. v. Saba Capital Master Fund, Ltd.*, 608 U.S. ___ (No. 24-345, 2026-06-11, 6-3, Barrett 집필)는 이를 번복**했다 — §47(b)는 private parties에게 독립적 rescission 소송권을 **부여하지 않으며**, 그 'at the instance of any party' 문구는 이미 법원 앞에 온 사건에서 법원의 remedial authority를 지시하는 것일 뿐이고 ICA는 SEC를 primary enforcer로 둔다(1980년 개정이 TAMA가 의존한 'shall be void' 문구를 삭제한 점이 근거). **따라서 '투자자가 §47(b)만으로 직접 rescission 소송을 제기할 수 있다'고 설명하면 현재 법리에 맞지 않는다.** non-QP 유입 리스크는 여전히 중대하지만, 그 실질 강제력은 §47(b) 사적 소권이 아니라 **미등록 투자회사 운영·SEC enforcement·계약 집행가능성(unenforceability)·상업적 unwind·issuer/fund sponsor의 계약상 책임**에서 나온다. (FS Credit은 §3(c)(7) 자체를 다툰 사건은 아니나, §47(b) 사적 소권을 부정한 지배적 선례로 인용한다.) -**Decipher에 주는 함의.** Decipher는 cross-border RWA tokenization을 다루므로, 한국 측 인력이 미국 QP 개념을 한국 전문투자자와 *대응*시켜 이해하되 *동일시*하지 않도록 하는 것이 중요하다. 그래서 본 문서는 미국 도메인 용어(qualified purchaser, investments, look-through 등)를 번역하지 않고 그대로 쓰되, 처음 나올 때 한국법 anchor를 붙인다. +그래서 DEX의 거래 직전 관문(pre-trade gate)에서 모든 prospective buyer의 QP 자격을 확인하는 일은 "있으면 좋은" 기능이 아니라 BUIDL listing의 존립을 좌우하는(existential) 안전장치다. 업계 선례(Securitize·tZERO·INX)에서도 엄격한 pre-trade QP gating이 사실상 industry standard로 자리잡았다. A-13은 그 관문의 매수인 측 핵심 검사원이다. + +**쉽게 말하면:** A-13이 실수로 non-QP를 한 명 통과시키면, 잘못되는 것은 그 거래 하나가 아니라 펀드 전체다. 그래서 이 부품의 설계 철학은 시종 "보수적으로, 의심스러우면 막거나 사람에게 넘긴다"이다. --- ## §2. 📋 메타 정보 (Internal Identifier Box) -> 아래는 Decipher 내부 PM 규약상의 식별자·분류값을 한곳에 모은 박스다. **본문에서는 이 코드들을 단독으로 쓰지 않고**, "본 부품"·"Qualified Purchaser 부품" 같은 자연어로 부른다. 코드는 시스템 추적용으로만 여기 둔다. +아래는 Decipher 내부 PM 규약상의 식별자·분류값을 한곳에 모은 박스다. 본문에서는 이 코드들을 단독으로 쓰지 않고, "본 부품"·"Qualified Purchaser 부품" 같은 자연어로 부른다. 코드는 시스템 추적용으로만 여기 둔다. | 항목 | 값 | 한 줄 풀이 | |---|---|---| -| 부품 이름 | **Qualified Purchaser** | 펀드 매수 자격 검사원 | -| 검사 대상 | ICA §3(c)(7) fund 매수 자격(§2(a)(51) 4 categories + Rule 3c-5 Knowledgeable Employee 제외) | "이 사람이 펀드를 살 자격이 있나" | +| 부품 이름 | Qualified Purchaser | 펀드 매수 자격 검사원 | +| 검사 대상 | ICA §3(c)(7) fund 매수 자격 — QP가 되는 5길(§2(a)(51)(A)(i)~(iv) + Rule 2a51-1(g)(1) QIB 간주)과 '안 세는 예외'(Rule 3c-5 KE 제외 · Rule 3c-6 비자발적 이전) | "이 사람이 펀드를 살 자격이 있나" | | Internal ID | A-13 (Decipher PM 규약) | 부품 일련번호 | -| 검증 방식 | **증명서형**(off-chain due diligence + on-chain claim 확인) | 기계가 직접 계산하지 않고, 신뢰기관의 서명 증명서를 확인 | -| Timing | **pre-trade**(거래 체결 직전) | 거래가 일어나기 전에 막는다 | -| Stateful 여부 | **STATELESS** | 매수 시점의 스냅샷만 보고 판정, 과거 상태를 누적하지 않음 | -| 주 활성화 Recipe | **R3**(ICA §3(c)(7) Fund) | 이 레시피가 본 부품을 부른다 | -| Cumulative Recipe | **R1**(Reg D 506(c) Issuance)·**R2**(§4(a)(7) Resale) | 함께 켜질 수 있는 레시피 | -| Cascade Element | **A-09**(Look-Through)·**A-08**(Affiliate)·**A-11**(Claim Freshness) | 본 부품이 추가로 호출하는 검사 부품 | +| 검증 방식 | 증명서형(off-chain due diligence + on-chain claim 확인) | 기계가 직접 계산하지 않고, 신뢰기관의 서명 증명서를 확인 | +| Timing | pre-trade(거래 체결 직전) | 거래가 일어나기 전에 막는다 | +| Stateful 여부 | STATELESS (Element 한정) | Element 자체는 매수 시점 claim 스냅샷만 본다. 다만 §3(c)(7) status는 holder composition·forced transfer/recovery 예외·Exchange Act §12(g) holder-count 등 stateful 정보에 걸려 있어, Recipe·Manifest·Operator layer가 이를 별도 관리한다 | +| 주 활성화 Recipe | R3(ICA §3(c)(7) Fund) | 이 레시피가 본 부품을 부른다 | +| Cumulative Recipe | R1(Reg D 506(c) Issuance)·R2(§4(a)(7) Resale) | 함께 켜질 수 있는 레시피 | +| Cascade Element | A-09(Look-Through)·A-06(Affiliate)·A-11(Claim Freshness) | 본 부품이 추가로 호출하는 검사 부품 | | 성숙도 | 🟡 R-1 단계(🔴 데모 핵심) | 데모에 필수, 후속 보완 진행 중 | | 파일·위치 | A-13_qualified-purchaser.md · 산출물/elements/ | 산출물 경로 | @@ -138,174 +130,478 @@ non-QP 1명이 BUIDL 매수 ## §3. ① 법적 근거 (Layer 1 → 2 → 3) -> **읽는 법.** 법적 근거는 세 겹이다. **Layer 1(조문)**은 의회가 만든 법률 텍스트(statute), **Layer 2(규칙)**는 SEC가 그 텍스트를 실무 수준으로 구체화한 연방규칙(rule), **Layer 3(해석)**은 판례·SEC 발행문서·No-Action Letter가 모호한 부분을 메운 해석이다. 아래로 갈수록 추상적인 법률이 구체적인 운영 기준으로 내려온다. +> **읽는 법.** 법적 근거는 세 겹이다 — **Layer 1**(조문)은 의회가 만든 법률 텍스트(statute), **Layer 2**(규칙)는 SEC가 그것을 실무 수준으로 구체화한 연방규칙(rule), **Layer 3**(해석)은 판례·SEC 발행문서·No-Action Letter가 모호한 부분을 메운 해석이다. 아래 §3.0.2 표의 **종류** 칸이 그대로 Layer에 대응한다 — Statute = Layer 1, SEC Rule = Layer 2, SEC Release·SEC Staff·Case = Layer 3. 본 절은 조문이 작동하는 **논리 흐름 순서**로 배열돼 §3.1~§3.20 번호를 유지하며, 각 항목이 어느 Layer인지는 표의 종류 칸으로 확인한다. -### 3.1 Layer 1 — Statutory base (조문 원문) +### 3.0 법조문 관계 플로우차트 (개발자용) -> **§ 2(a)(51)(A) — Qualified Purchaser 정의** [🔗 [Cornell LII](https://www.law.cornell.edu/uscode/text/15/80a-2)] -> -> **Original**: -> "Qualified purchaser" means— -> (i) any natural person ... who owns not less than $5,000,000 in investments, as defined by the Commission; -> (ii) any company that owns not less than $5,000,000 in investments and that is owned directly or indirectly by or for 2 or more natural persons who are related as siblings or spouse (including former spouses), or direct lineal descendants by birth or adoption, spouses of such persons, the estates of such persons, or foundations, charitable organizations, or trusts established by or for the benefit of such persons; -> (iii) any trust that is not covered by clause (ii) and that was not formed for the specific purpose of acquiring the securities offered, as to which the trustee or other person authorized to make decisions with respect to the trust, and each settlor or other person who has contributed assets to the trust, is a person described in clause (i), (ii), or (iv); or -> (iv) any person, acting for its own account or the accounts of other qualified purchasers, who in the aggregate owns and invests on a discretionary basis, not less than $25,000,000 in investments. -> -> **한글 해석**: "Qualified Purchaser"는 네 갈래다 — -> (i) **$5,000,000 이상의 investments(투자성 자산)를 보유한 자연인**, -> (ii) **$5,000,000 이상의 investments를 보유하고, 형제·배우자·직계존비속 등 *가족관계로 묶인 2인 이상*이 직간접 소유한 회사**("Family Company"), -> (iii) **특정 증권 취득을 위해 만들어진 것이 아니고, *수탁자(trustee)와 각 위탁자(settlor)가 모두* (i)·(ii)·(iv) 중 하나에 해당하는 trust**, -> (iv) **$25,000,000 이상의 investments를, 자기 계산 또는 다른 QP들의 계산으로, *재량(discretionary)으로* 보유·운용하는 자**(주로 기관·운용사). +아래 그림은 위 세 Layer의 조문·규칙이 QP/§3(c)(7) 판정에서 어떻게 연결되는지를 하나의 큰 흐름으로 정리한 것이다 — 거래 발생 → 매수인 6갈래 분기((i)~(iv)+QIB, KE 제외) → 회사·신탁이면 급조/비-급조 look-through 분기(요건은 회사 Rule 2a51-3 (a)/(b)·신탁 statute (iii), beneficial owner 산정은 §3(c)(1)·3c-1·2a51-2) → "Investments" 산정 → reasonable belief → 전원 QP 판정 → §3(c)(7) 두 조건의 통과/탈락. 각 조항의 상세는 §3.1~§3.20(특히 6갈래는 §3.1.1, 회사 look-through는 §3.16.1). -해설: (i)은 개인, (ii)는 가족회사, (iii)은 신탁, (iv)는 기관이라고 보면 된다. **자연인·가족회사는 $5M, 기관은 $25M**이라는 두 문턱이 핵심이다. 그리고 (ii)·(iii)은 *그 안의 사람들*까지 따져야 자격이 정해진다 — 이것이 뒤(§5·§7)에서 다룰 **look-through(들여다보기)**의 법적 뿌리다. +![그림 3.0 — QP/§3(c)(7) 법조문 관계 흐름: 거래에서 조항, QP 판정, §3(c)(7) PASS/FAIL까지 (개발자용)](fig/fig30.png) -> **§ 3(c)(7)(A) — ICA 등록 면제 조건** [🔗 [Cornell LII](https://www.law.cornell.edu/uscode/text/15/80a-3)] -> -> **Original**: -> "Any issuer, the outstanding securities of which are owned exclusively by persons who, at the time of acquisition of such securities, are qualified purchasers, and which is not making and does not at that time propose to make a public offering of such securities. Securities ... received ... as a gift or bequest, or [by] ... legal separation, divorce, death, or other involuntary event, shall be deemed to be owned by a qualified purchaser ..." -> -> **한글 해석**: 펀드의 모든 outstanding securities가 **취득 시점에 QP인 자**에 의해 **배타적으로(exclusively) 소유**되고, 그 시점에 **public offering(공모)을 하지 않으며** 향후 할 의도도 없는 issuer는 투자회사 등록이 면제된다. (단, 증여·상속·이혼·사망 등 *비자발적 사유*로 QP에게서 넘겨받은 지분은 QP가 소유한 것으로 간주한다.) +**범례.** -해설: §3(c)(7) 면제에는 **두 개의 조건**이 있다 — ① "모든 지분이 *취득 시점에* QP에게 배타적으로 소유"(Condition 1), ② "public offering을 하지 않음"(Condition 2). **본 부품(A-13)이 책임지는 것은 Condition 1**이다. Condition 2(공모 금지)는 부품 하나로 끝나지 않고 DEX 거래환경 전체에 걸리는 Recipe-level 문제이며, 이 문서 §9·§12에서 별도로 다룬다. +- 파랑 = 핵심(Direct: §3(c)(7)·§2(a)(51)(A)·Rule 2a51-1 본체·(h) 안전항) +- 회색 = 분기·판정 노드 +- 초록 = PASS·예외 카브아웃(KE 제외·비자발적 이전 Rule 3c-6·506(c) 청약 JOBS Act §201(b)(2) 등 판정을 깨지 않는 경로) +- 빨강 = FAIL +- 주황 = 전환·참고(§3(c)(7)(B) grandfather·Exchange Act §12(g) 2000-holder) -> **§ 3(c)(7)(B) — 기존 §3(c)(1) 펀드의 전환 경과조항(transition)** [🔗 [Cornell LII](https://www.law.cornell.edu/uscode/text/15/80a-3)] -> -> **Original**(요지): -> "Notwithstanding subparagraph (A), an issuer is within the exception ... if (i) in addition to qualified purchasers, outstanding securities ... are beneficially owned by not more than 100 persons who are not qualified purchasers ... [who] acquired ... on or before September 1, 1996 ... [and] at the time ... the issuer was excepted by paragraph (1) ..." -> -> **한글 해석**: §3(c)(7)(B)는 **1996년 9월 1일 이전부터 §3(c)(1)(100인 이하 펀드)로 운영되던 기존 펀드가 §3(c)(7)로 전환할 때**, 그 시점에 이미 들어와 있던 *non-QP 100인 이하*를 일정 요건(공시·환매 기회 제공 등) 하에 그대로 둘 수 있게 해 주는 **경과조항(grandfathering)**이다. +### 3.0.1 실제 BUIDL은 어떻게 적용되나 -해설(⚠️ 정정 포인트): §3(c)(7)(B)는 **Knowledgeable Employee(펀드 임직원) 조항이 *아니다*.** 종전 초안은 여기에 KE를 잘못 붙였다. KE는 아래 §3.2의 **Rule 3c-5**에서 별도로 다룬다. 또한 이 경과조항은 *신규로 토큰을 발행·거래*하는 BUIDL 같은 펀드에는 거의 의미가 없다(1996년 이전 §3(c)(1) 이력이 없으므로). Decipher에서는 사실상 적용 여지가 없는 조항이지만, "§3(c)(7)(B)=KE"라는 오해를 막기 위해 명시해 둔다. +§3.0이 일반 법조문 흐름이라면, 이 절은 BUIDL-*like* §3(c)(7) 펀드 지분에 A-13이 어떻게 걸리는지를 보여준다. **(재확인) 본 서술은 실제 BlackRock BUIDL의 발행 표준·transfer architecture·현재 운영 조건을 단정하지 않는다 — BUIDL-like §3(c)(7) private fund interest를 ERC-3643 테스트 토큰으로 모델링한 것이다.** -### 3.2 Layer 2 — Regulatory specification (연방규칙 원문) +**BUIDL이 무엇인가.** BUIDL(BlackRock USD Institutional Digital Liquidity Fund)은 BlackRock이 2024년 3월 출시한 토큰화 머니마켓펀드다 — 현금·미국 단기국채·repo에 투자하고 토큰 1개 = $1 안정가치를 목표로, 배당을 매일 적립해 매월 분배한다(세계 최대급 토큰화 국채 펀드, AUM 약 $2.5B, 다중 체인). 운용은 BlackRock, 수탁·관리는 BNY Mellon, 토큰화·transfer agent·placement는 Securitize가 맡는다. 발행은 Rule 506(c), 펀드 구조는 ICA §3(c)(7), 미국 밖 투자자는 Reg S(BVI 역외 펀드)이며, 최소 청약 $5M, 토큰은 Securitize whitelist 안에서만 이전된다. 현실의 BUIDL은 Securitize 자체 표준(DS Protocol)이지만, 본 프로젝트는 BUIDL이 ERC-3643(T-REX)으로 재구성됐다고 가정한다 — 그 경우 **Securitize가 QP claim의 Trusted Issuer**가 된다. -조문이 *법률 텍스트*를 준다면, 연방규칙(Rule)은 그 텍스트를 *실무에서 계산 가능한 수준*으로 구체화한다. 본 부품에 필요한 규칙은 두 갈래다 — **"investments가 무엇이고 얼마로 치는가"(Rule 2a51-1)**, 그리고 **"회사·신탁·임직원은 어떻게 보는가"(Rule 2a51-3, Rule 3c-5)**. +**QP 관점 — 어느 갈래가 실제 쓰이나.** §3(c)(7) 펀드이므로 보유하는 모든 사람이 취득 시점에 QP여야 하고, 따라서 §3(c)(7)이 적용되는 한 A-13(QP 검사)은 항상 켜진다(R3의 주 검사). 다만 6갈래가 다 같은 빈도로 쓰이는 건 아니다 — BUIDL의 전형적 매수인은 **(iv) $25M any person**(운용사·기관·SPV)과 **QIB 간주**, 그리고 거액 자산가인 **(i) 자연인 $5M**이다. 가족회사(ii)·신탁(iii)·KE 제외(Rule 3c-5)도 구조상 가능하나 BUIDL 맥락에서 전형적이지는 않다. -> **17 CFR § 270.2a51-1(b) — "Investments"의 정의(무엇을 자산으로 치는가)** [🔗 [Cornell LII](https://www.law.cornell.edu/cfr/text/17/270.2a51-1)] -> -> **Original**(요지): -> "Investments" means: (1) Securities (other than securities of an issuer that controls, is controlled by, or is under common control with the prospective qualified purchaser, with limited exceptions); (2) Real estate held for investment purposes; (3) Commodity Interests held for investment purposes; (4) Physical Commodities held for investment purposes; (5) ... financial contracts entered into for investment purposes; (6) [§3(c)(7) Company 매수자인 경우] firm commitments to contribute capital; and (7) Cash and cash equivalents held for investment purposes. -> -> **한글 해석**: investments는 7가지다 — (1) 증권(단, 매수인이 *지배·피지배·공동지배* 관계에 있는 issuer의 증권은 원칙 제외), (2) 투자 목적 부동산, (3) 상품파생(commodity interests), (4) 실물상품(금·은 등), (5) 투자 목적 금융계약(스왑 등), (6) §3(c)(7) 펀드 매수자인 경우의 약정 출자분, (7) 투자 목적 현금·현금성 자산(예금·CD·MMF·국채 등). +**같은 $5M, 다른 개념 주의.** BUIDL 청약 최소액 $5M은 BlackRock이 정한 발행 조건(변경 가능)이고, QP 자격의 investments $5M은 법정 요건(§2(a)(51)(A)(i))이다 — 한 투자자에게 둘 다 요구되지만 서로 다른 요건이다. 청약 $5M을 냈다고 QP의 investments $5M(주거주택 등을 제외하는 별도 정의, Rule 2a51-1)이 자동 충족되는 게 아니다. -> **17 CFR § 270.2a51-1(c) — "Investment Purposes"(주거·사업용 부동산 제외)** [🔗 [Cornell LII](https://www.law.cornell.edu/cfr/text/17/270.2a51-1)] -> -> **Original**(요지): -> "Real estate shall not be considered to be held for investment purposes ... if it is used ... for personal purposes or as a place of business ... [of] the Prospective Qualified Purchaser or a Related Person ..." -> -> **한글 해석**(⚠️ 정정 포인트): 부동산이라도 **본인이나 가족이 살거나(personal) 사업장으로 쓰는(place of business)** 것은 investments로 *치지 않는다*. 즉 "주거·사업용 제외" 규정은 (b)(2)가 아니라 **(c)**에 있다. (부동산 투자업자가 사업상 보유하는 부동산은 예외적으로 인정 등 단서가 있음.) +**검증은 누가 — Securitize = Trusted Issuer, A-13은 claim만 확인.** ERC-3643 가정 하에서 Securitize가 off-chain에서 KYC·QP 실사를 하고 "이 사람 QP 맞음" claim을 서명·발급한다(Rule 2a51-1(h) reasonable belief). 온체인 A-13은 그 계산을 다시 하지 않고 claim의 존재·진위·신선도·갈래만 확인한다(§8). BUIDL 케이스에서 claim의 핵심 필드는 fundExemption = ICA_3C7, coveredCompany = BUIDL fundId, 매수인별 claim.basis(대개 QP_INSTITUTIONAL 또는 QP_QIB)다. 매수인이 법인이면 A-08(법인 자격)·A-09(look-through)가 cascade로 함께 돈다. -> **17 CFR § 270.2a51-1(d) — Valuation(얼마로 평가하는가)** [🔗 [Cornell LII](https://www.law.cornell.edu/cfr/text/17/270.2a51-1)] -> -> **Original**(요지): -> "... the aggregate amount of Investments ... shall be the Investments' fair market value on the most recent practicable date or their cost ..." -> -> **한글 해석**: investments 금액은 **최근 실무적으로 가능한 시점의 fair market value(공정시장가치, FMV) 또는 취득원가(cost)**로 잰다. (FMV로 평가하면 시세의 손익이 이미 반영되므로, 손실 종목의 net 처리는 자동으로 된다.) +![그림 3.0.1 — BUIDL 실제 적용: 발행(QP 게이트 상시 on)은 명확, 2차 거래의 공모 유발 여부는 미결](fig/fig301.png) -> **17 CFR § 270.2a51-1(e)·(f) — Deductions(차입금 차감)** [🔗 [Cornell LII](https://www.law.cornell.edu/cfr/text/17/270.2a51-1)] -> -> **Original**(요지): -> "(e) ... there shall be deducted ... the amount of any outstanding indebtedness incurred to acquire or for the purpose of acquiring the Investments ... (f) [Family Company의 경우 소유자가 그 투자를 취득하기 위해 진 차입금도 차감]" -> -> **한글 해석**(⚠️ 정정 포인트): **투자를 취득하기 위해 진 차입금(outstanding indebtedness)**은 investments에서 차감한다. 이 차감 규정은 (d)가 아니라 **(e)**(개인)·**(f)**(Family Company)에 있다. 핵심은 *투자 취득 목적* 차입만 차감된다는 점이다 — 일반 주택담보대출이나 사업자금 대출은 차감 대상이 아니다. +**2차 거래는 아직 미결(Condition 2).** BUIDL의 2차 거래는 whitelist된 참여자 간 P2P / Uniswap×Securitize RFQ로 메커니즘만 공개돼 있고, 그 상시 호가가 §3(c)(7)의 "no public offering"(Condition 2)을 깨는지는 정해지지 않았다 — Open Issue(§12), No-Action Letter 후보다. 발행분은 JOBS Act §201(b)(2)로 해소되지만 2차는 별개다(§3.0·§3.6). -> **17 CFR § 270.2a51-1(h) — Reasonable Belief(합리적 신뢰 안전항)** [🔗 [Cornell LII](https://www.law.cornell.edu/cfr/text/17/270.2a51-1)] -> -> **Original**: -> "The term 'qualified purchaser' ... means any person that meets the definition of qualified purchaser in section 2(a)(51)(A) of the Act and the rules thereunder, or that a **Relying Person reasonably believes** meets such definition." -> (여기서 "Relying Person"은 §3(c)(7) Company 또는 그를 대신해 행위하는 자를 말한다.) -> -> **한글 해석**(⚠️ 정정 포인트): QP에는 *실제로 정의를 충족하는 자* 외에, **펀드(또는 그 대리인)가 합리적으로 QP라고 믿는 자**도 포함된다. 즉 사후에 매수인이 실은 QP가 아니었음이 드러나도, 펀드가 **reasonable belief(합리적 신뢰)**를 가지고 있었다면 면제가 곧바로 깨지지 않는다. 이 한 줄이 본 부품의 "증명서형" 설계 전체를 떠받치는 법적 토대다(§8). **주의**: 이 규칙은 (g)가 아니라 **(h)**이고, 종전 인용문에 있던 *"reasonable care를 행사한 경우에 한한다"*는 문구는 본 규칙 텍스트에 **존재하지 않는다**. ((g)는 QIB·부부합산·자회사 합산 등 별도 특칙이다.) "합리적 신뢰를 위해 상당한 주의를 다해야 한다"는 *취지*는 실무·집행상 당연히 요구되지만, 규칙 (h)의 문언 자체에 못 박혀 있지는 않다. +### 3.0.2 조문 순서·중요성 한눈에 보기 (법 리스트) -> **17 CFR § 270.3c-5 — Knowledgeable Employee(펀드 임직원의 제외)** [🔗 [eCFR](https://www.ecfr.gov/current/title-17/chapter-II/part-270/section-270.3c-5)] -> -> **Original**(요지): -> "(a)(4) The term 'Knowledgeable Employee' ... means any natural person who is: (i) an Executive Officer, director, trustee, general partner, advisory board member, or person serving in a similar capacity, of the Covered Company or an Affiliated Management Person ...; or (ii) an employee ... (other than ... clerical, secretarial or administrative functions) who, in connection with his or her regular functions or duties, participates in the investment activities ... provided that such employee has been performing such functions ... for at least 12 months. -> (b) For purposes of ... whether the outstanding securities of a Section 3(c)(7) Company are owned exclusively by qualified purchasers, there shall be excluded securities beneficially owned by: (1) a Knowledgeable Employee ...; (2) a company owned exclusively by Knowledgeable Employees ..." -> -> **한글 해석**(⚠️ 핵심 정정): **펀드 임직원(Knowledgeable Employee) 규칙은 Rule 3c-5다.** "Knowledgeable Employee"란 (i) Covered Company(= §3(c)(1) 또는 §3(c)(7) 펀드)나 그 운용 관계사의 **임원(Executive Officer)·이사·수탁자·무한책임사원·자문위원 등**이거나, (ii) **펀드 투자활동에 정규 업무로 관여해 온(12개월 이상)** 직원을 말한다. 그리고 Rule 3c-5(b)의 메커니즘은 — KE를 "QP로 간주"하는 것이 아니라, **"펀드 지분이 QP에게 배타적으로 소유되는가"를 따질 때 KE 보유분을 *계산에서 제외***하는 것이다. 결과적으로 KE는 $5M 자산이 없어도 자기 펀드에 투자할 수 있지만, *법 문언상의 경로는 "제외(exclusion)"*라는 점을 정확히 알아야 한다. +아래 두 표가 §3의 지도다. **표 1**(Authority)은 각 근거가 어떤 종류(=Layer)이고 무슨 내용이며 A-13에 어떻게 닿는지를, **표 2**(순서·중요성)는 아래 §3.1~§3.20 소단원의 읽는 순서(논리 흐름)와 중요성(A-13이 실제로 그걸로 판정하는가)을 보여준다. 순서는 중요도순이 아니라 흐름순이라, 가장 중요한 §2(a)(51)(A)·§3(c)(7)(A)가 맨 앞 가까이 온다. 제정법 출처는 `uscode.house.gov`로 통일했으며 `govinfo.gov/link/uscode/...` 딥링크도 동일한 1차 출처다. -> **17 CFR § 270.2a51-3 — Certain companies as qualified purchasers(목적형성 회사의 look-through)** [🔗 [Cornell LII](https://www.law.cornell.edu/cfr/text/17/270.2a51-3)] -> -> **Original**(요지): -> "(a) ... a company shall not be deemed to be a qualified purchaser if it was formed for the specific purpose of acquiring the securities offered by a [§3(c)(7)] company ... unless each beneficial owner of the company's securities is a qualified purchaser. (b) ... a company may be deemed to be a qualified purchaser if each beneficial owner of the company's securities is a qualified purchaser." -> -> **한글 해석**(⚠️ 정정 포인트): Rule 2a51-3은 **KE 규칙이 아니라**, "이 펀드 지분을 사려고 *급조된 회사*"의 남용을 막는 규칙이다. 즉 특정 증권 취득 목적으로 만들어진 회사는, **그 회사의 *모든 beneficial owner가 각자 QP*일 때만** QP로 인정된다. 이것이 회사·신탁을 *들여다보는(look-through)* 또 하나의 법적 근거다. +**표 1 — Authority(근거 목록)** + +| 종류 | Authority | 내용 | A-13 관련성 | Direct/Supporting | Official URL | +|---|---|---|---|---|---| +| Statute | ICA §2(a)(51)(A) · 15 U.S.C. §80a-2(a)(51)(A) | QP 4갈래 정의(개인 $5M·가족회사·신탁·$25M 재량운용) | QP category 판정의 출발점 → claim.basis 결정 | Direct | uscode.house.gov | +| Statute | ICA §2(a)(51)(B) · §80a-2(a)(51)(B) | SEC 규칙제정 권한 | 하위 Rule 2a51-1~3·3c-5의 위임 근거 | Supporting | uscode.house.gov | +| Statute | ICA §2(a)(51)(C) · §80a-2(a)(51)(C) | excepted IC — 1996-04-30 이전 보유자 consent | 전환·fund-of-funds buyer일 때만 발동 | Conditional | uscode.house.gov | +| Statute | ICA §3(c)(7)(A)·(B) · §80a-3(c)(7) | 면제 두 조건(전원 QP · no public offering) | A-13 활성화 트리거(Condition 1) | Direct | uscode.house.gov | +| Statute | JOBS Act §201(b)(2) · Pub. L. 112-106 | 506(c) 일반청약을 §3(c)(7) public offering으로 안 봄 | 발행측 공모우려 해소(§9.6·§12) | Supporting | govinfo.gov | +| SEC Rule | Rule 2a51-1(a)(b) · §270.2a51-1 | investments 정의·자산 7종·용어 | $5M/$25M 산정(off-chain) → investmentsVerified | Direct | ecfr.gov | +| SEC Rule | Rule 2a51-1(c)(d) | 투자목적(주거·사업 제외)·평가(FMV/원가) | threshold 부풀리기 차단 | Direct | ecfr.gov | +| SEC Rule | Rule 2a51-1(e)(f) | 취득용 차입금 차감 | 순 investments로 문턱 판정 | Direct | ecfr.gov | +| SEC Rule | Rule 2a51-1(g) | QIB 간주·배우자 합산·자회사 특칙 | QP_QIB·부부 합산 분기 | Conditional | ecfr.gov | +| SEC Rule | Rule 2a51-1(h) | reasonable belief 안전항 | attestation(claim) 구조의 법적 토대 | Direct | ecfr.gov | +| SEC Rule | Rule 2a51-2 · §270.2a51-2 | beneficial owner·간접소유·전환 펀드 | entity·전환 buyer look-through | Conditional | ecfr.gov | +| SEC Rule | Rule 2a51-3 · §270.2a51-3 | 목적형성 회사 look-through(전원 QP) | entity buyer 요건(lookThroughStatus) | Direct | ecfr.gov | +| SEC Rule | Rule 3c-5 · §270.3c-5 | KE를 exclusively-QP 판정에서 제외 | KE 분기(claim.basis) | Direct | ecfr.gov | +| SEC Rule | Rule 3c-6 · §270.3c-6 | 증여·상속·이혼 등 비자발적 이전 QP 간주 | Condition 1 카브아웃(forcedTransfer) | Conditional | ecfr.gov | +| SEC Rule | Rule 3c-1 · §270.3c-1 | §3(c)(1) beneficial owner 산정 | §2(a)(51)(C)·2a51-2가 참조하는 상위 규칙 | Supporting | ecfr.gov | +| SEC Release | SEC Release IC-22597 · 62 FR 17512 | Rule 6종(2a51-1·2·3·3c-1·5·6) 채택 release | 입법·해석 취지(off-chain 기준 설계) | Supporting | sec.gov | +| SEC Staff | Davis Polk & Wardwell NAL · 1997-04-24, File 132-3 | §3(c)(7) 전환·2a51-1/2a51-2 적용 | staff 해석(manual review·open issue) | Supporting only | sec.gov | +| SEC Staff | ABA Subcommittee NAL · 1999-04-22 | trust·family vehicle QP 판단 | staff 해석(manual review·open issue) | Supporting only | sec.gov | +| Case | SEC v. Ralston Purina · 346 U.S. 119 (1953) | public offering 기능적 기준(4-factor) | Condition 2 기준(Recipe-level·§9·§12) | Supporting | govinfo.gov | +| Case | SEC v. Howey · 328 U.S. 293 (1946) · Oxford(2019)→*FS Credit v. Saba* · 608 U.S. ___ (2026) | security 정의 · §47(b) 사적 소권(FS Credit로 **부정**) | 증권성 전제 · 면제 상실 효과 | Background | govinfo.gov · supremecourt.gov | +| Statute | ICA §3(c)(1)·§7·§47(b) · Exchange Act §12(g) | 100인 비교·미등록 영업·rescission(§47(b) 사적 소권은 FS Credit 2026로 부정)·2000-holder | 배경·리스크(D-01 등) | Background | uscode.house.gov | + +**표 2 — 조문 순서·중요성 한눈에 보기** + +| 순서 | 조문 | 중요성 | A-13이 그걸로 하는 일 | +|---|---|---|---| +| §3.1 | § 2(a)(51)(A) — QP 정의 | 핵심 | QP 4갈래를 직접 판정(claim.basis 결정) | +| §3.2 | § 2(a)(51)(B) — SEC 규칙제정 권한 | 보조 | 안 함 — 하위 Rule의 위임 근거 | +| §3.3 | § 2(a)(51)(C) — Excepted IC(consent) | 조건부 | 전환·FoF buyer면 1996년 consent 확인 | +| §3.4 | § 3(c)(7)(A) — 면제 두 조건 | 핵심 | A-13 판정 본체(전원 QP + 취득시점) | +| §3.5 | § 3(c)(7)(B) — 전환 경과조항 | — | 안 함 — 신규 BUIDL 해당 없음(N/A) | +| §3.6 | JOBS Act §201(b)(2) | 보조 | 안 함 — 발행측 공모우려 해소 | +| §3.7 | Rule 2a51-1(a) — 용어 정의 | 핵심(보조) | claim 로직의 변수 정의 | +| §3.8 | Rule 2a51-1(b) — investments | 핵심 | $5M/$25M 자산 산정(off-chain) | +| §3.9 | Rule 2a51-1(c) — 투자목적 | 핵심 | 주거·사업 부동산 제외 | +| §3.10 | Rule 2a51-1(d) — 평가 | 핵심 | FMV/원가 평가 | +| §3.11 | Rule 2a51-1(e)(f) — 차감 | 핵심 | 취득용 차입금 차감 | +| §3.12 | Rule 2a51-1(g) — 특칙 | 조건부 | QIB·배우자 합산 분기 | +| §3.13 | Rule 2a51-1(h) — reasonable belief | 핵심 | attestation 구조 법적 토대 | +| §3.14 | Rule 3c-5 — KE 제외 | 핵심(분기) | KE를 전원-QP 판정에서 제외 | +| §3.15 | Rule 3c-6 — 비자발적 이전 | 조건부 | 상속·이혼 이전분을 QP 간주 | +| §3.16 | Rule 2a51-3 — 목적형성 회사 | 조건부 | 법인 buyer look-through | +| §3.17 | Rule 2a51-2 — beneficial owner | 조건부 | 간접소유·전환 buyer 산정 | +| §3.18 | 판례·발행문서·NAL(Layer 3) | 보조 | 안 함 — 해석 자료(Ralston·Howey·Oxford·IC-22597·NAL) | +| §3.19 | Sub-요건 분해 매트릭스 | — | 위 요건을 원자적 검증 단위로 분해 | +| §3.20 | ERC-3643 변환·claim.basis 총정리 | — | §3.1~§3.17의 claim 매핑을 한 표로 | + +**경계 — 이 부품이 다루지 않는 것.** 아래 조문은 같은 BUIDL 토큰에 작동하지만 A-13이 아니라 다른 부품·레이어가 책임진다 — 누락이 아니라 소관 분리이며, A-13 안에 끌어다 구현하지 않는다. + +- **Securities Act §5 · §4(a)(2) · §4(a)(7)** (15 U.S.C. §77e·§77d(a)(2)·§77d(a)(7)) — 발행·재판매의 상위 근거. A-03(R1 발행 / R2 재판매) 소관. +- **Reg D Rule 506(c) · 502(d)** (17 CFR §230.506(c)·.502(d)) — 일반청약 허용 발행 Recipe와 재판매 제한. A-03(R1/R2) 소관. +- **Reg ATS Rule 300 · 301** (17 CFR §242.300·.301) — 2차 거래 venue 등록·운영. Operator layer 소관(Condition 2의 secondary-trading 쟁점 자체는 §9.6·§12에서 다룬다). + +### 3.1 § 2(a)(51)(A) — Qualified Purchaser 정의 [🔗 uscode.house.gov] + +**핵심 원문:** "Qualified purchaser" means— (i) any natural person (including any person who holds a joint, community property, or other similar shared ownership interest in an issuer that is excepted under section 80a-3(c)(7) of this title with that person's qualified purchaser spouse) who owns not less than $5,000,000 in investments, as defined by the Commission; (ii) any company that owns not less than $5,000,000 in investments and that is owned directly or indirectly by or for 2 or more natural persons who are related as siblings or spouse (including former spouses), or direct lineal descendants by birth or adoption, spouses of such persons, the estates of such persons, or foundations, charitable organizations, or trusts established by or for the benefit of such persons; (iii) any trust that is not covered by clause (ii) and that was not formed for the specific purpose of acquiring the securities offered, as to which the trustee or other person authorized to make decisions with respect to the trust, and each settlor or other person who has contributed assets to the trust, is a person described in clause (i), (ii), or (iv); or (iv) any person, acting for its own account or the accounts of other qualified purchasers, who in the aggregate owns and invests on a discretionary basis, not less than $25,000,000 in investments. + +**한국어:** "Qualified purchaser"란 다음을 뜻한다 — (i) Commission이 정하는 바에 따른 investments를 $5,000,000 이상(not less than) 보유한 모든 자연인(§3(c)(7)로 면제되는 issuer에서 자신의 qualified purchaser인 배우자와 joint·community property 또는 그 밖의 유사한 공유 소유지분을 보유하는 자를 포함); (ii) investments를 $5,000,000 이상 보유하고, 형제 또는 배우자(전 배우자 포함)로서 관계되거나 출생 또는 입양에 의한 직계비속인 2인 이상의 자연인, 그러한 자들의 배우자, 그러한 자들의 유산(estate), 또는 그러한 자들에 의하여 또는 그들의 이익을 위하여 설립된 재단·자선단체·신탁에 의하여 또는 그들을 위하여(by or for) 직접 또는 간접으로 소유되는 모든 회사; (iii) clause (ii)에 포섭되지 아니하고, 제공되는 증권을 취득할 특정 목적으로 형성되지 아니한 신탁으로서, 그 신탁에 관하여 결정을 내릴 권한이 있는 수탁자(trustee) 또는 그 밖의 자, 그리고 그 신탁에 자산을 출연한 각 위탁자(settlor) 또는 그 밖의 자가 clause (i)·(ii) 또는 (iv)에 기술된 자인 신탁; 또는 (iv) 자기 계산으로 또는 다른 qualified purchaser들의 계산으로 행위하면서, 총계로(in the aggregate) investments를 재량적 기준으로(on a discretionary basis) $25,000,000 이상 소유하고 투자하는 모든 자(any person). + +**쉬운 설명:** (i)은 개인, (ii)는 가족회사, (iii)은 신탁이다. (iv)는 흔히 "기관"으로 줄여 부르지만 조문 문언은 "기관"이 아니라 **자기 또는 다른 QP들의 계산으로 재량으로 $25M 이상을 운용하는 모든 자**, 즉 any person이다 — 운용사·기관이 전형적일 뿐, 요건만 충족하면 개인·패밀리오피스·SPV도 (iv)로 QP가 될 수 있다. 문턱은 자연인·가족회사 $5M, (iv) $25M이다. 그리고 (ii)·(iii)은 그 안의 사람들까지 따져야 자격이 정해진다 — 이것이 뒤(§5·§7)에서 다룰 **look-through**(들여다보기)의 법적 뿌리다. + +**PASS/FAIL 반영:** 직접 ○ — QP 자격 판정의 근본 기준(자연인·가족회사·신탁·$25M 4갈래). 어느 갈래로 통과했는지가 claim.basis를 결정한다. + +**ERC-3643 변환:** claim.topic = QP_STATUS, claim.basis ∈ {QP_NATURAL, QP_FAMILY_COMPANY, QP_TRUST, QP_INSTITUTIONAL}, claim.issuer = TrustedIssuer. 자격 판단은 off-chain, 온체인 토큰은 claim 유무만 확인. + +### 3.1.1 QP 6갈래 분류 — "QP가 되는 5길" vs "안 세는 예외" + +§2(a)(51)(A)의 네 prong에 Rule이 얹은 경로까지 더하면 보유자 자격은 여섯 갈래로 나뉜다. 다만 여섯이 같은 종류가 아니다 — 다섯은 "QP가 되는 길", 여섯째는 "QP가 아니어도 '전원 QP' 계산에서 빠지는 예외"다. + +![그림 3.1.1 — QP 6갈래: 'QP가 되는 5길'(파랑) vs '안 세는 예외'(주황)](fig/fig_qp6.png) + +**A. QP가 "되는" 길 (5).** + +1. **자연인 $5M** — §2(a)(51)(A)(i). **내 돈 $5M 가진 개인** (investments가 $5,000,000 이상인 살아있는 자연인). +2. **가족회사 $5M** — §2(a)(51)(A)(ii). 가족 2인 이상이 직간접 소유하고 investments가 $5,000,000 이상인 회사. +3. **신탁** — §2(a)(51)(A)(iii). 수탁자와 모든 위탁자가 각자 (i)·(ii)·(iv)에 해당하는 자((iii) 신탁 자체는 불인정)인 신탁(특정 증권 취득 목적으로 형성된 것이 아님). +4. **any person $25M 재량운용** — §2(a)(51)(A)(iv). **내 돈 $25M, 또는 QP 고객 돈 $25M을 재량으로(discretionary) 굴리는 자**(개인·법인 무관). 굴리는 대상 계정도 QP여야 하고, 조문은 "기관"이 아니라 any person이다. + +1~4는 **statute(§2(a)(51)(A)) QP 정의 그 자체**다. (i)과 (iv)이 가장 헷갈리는데 — **(i) = 내 돈 $5M 가진 개인**, **(iv) = 내 돈 $25M, 또는 QP 고객 돈 $25M을 재량으로 굴리는 자**(개인·법인). (i)은 자연인만, (iv)은 누구나이되 굴리는 대상도 QP여야 한다. + +5. **QIB 간주** — Rule 2a51-1(g)(1). Rule 144A상 QIB는 자산 재계산 없이 QP로 간주된다. statute의 다섯째 prong이 아니라 규칙이 따로 얹은 간주 경로다. + +**B. QP가 "아니어도" 보유 OK — 계산에서 빠지는 길.** + +6. **KE(펀드 임직원)** — Rule 3c-5. KE는 QP로 간주하는 게 아니라, "전원 QP" 판정에서 그 보유분을 **제외**(exclusion)한다. KE는 QP가 아니어도 자기 펀드를 보유할 수 있고, 그 한 명 때문에 면제가 깨지지 않는다. + +추가로 **비자발적 이전 수취인** — Rule 3c-6 / §3(c)(7)(A) 단서. 상속·이혼·증여로 QP에게서 넘겨받은 자는 QP가 아니어도 "QP가 소유한 것으로 간주"돼 면제를 깨지 않는다. 별도 claim.basis가 아니라 transfer.involuntary(forcedTransfer/recovery) 예외로 처리한다. + +**성격이 다르다.** 1~5는 "자격을 갖춰 QP가 됨", 6(및 비자발적 이전)은 "QP가 아니어도 세지 않음"이다. 그래서 claim.basis도 1~5는 `QP_*`, 6은 `KNOWLEDGEABLE_EMPLOYEE_EXCLUSION`(_EXCLUSION)으로 이름이 다르다. + +**경계 두 가지.** + +- 이 여섯 갈래는 전부 **Condition 1**("취득 시점에 전원 QP") 안의 이야기다. §3(c)(7) 면제의 다른 한 축인 **Condition 2**("public offering 아님")는 보유자 종류와 무관한 별개 축이다(§9·§12). +- 법인이 매수인이면 **Rule 2a51-3**(목적형성 회사 look-through)이 (ii)·(iv) 위에 한 겹 더 얹힌다 — "이 펀드를 사려고 급조한 회사면 구성원 전원이 QP여야 함." 새 갈래가 아니라 회사 갈래에 붙는 검증 규칙이다(A-09). + +### 3.2 § 2(a)(51)(B) — SEC 규칙제정 권한 [🔗 uscode.house.gov] + +**핵심 원문:** "The Commission may adopt such rules and regulations applicable to the persons and trusts specified in clauses (i) through (iv) of subparagraph (A) as it determines are necessary or appropriate in the public interest or for the protection of investors." + +**한국어:** Commission은, 공익을 위하여 또는 투자자 보호를 위하여 필요하거나 적절하다고 판단하는, subparagraph (A)의 clause (i)부터 (iv)까지에 규정된 자 및 신탁에 적용되는 규칙 및 규정을 채택할 수 있다. + +**쉬운 설명:** QP 정의의 세부 규격을 SEC 규칙에 위임한 조항. 실제 검증 기준은 전부 아래 §3.7~§3.17 Rule 절들에서 나온다. + +**PASS/FAIL 반영:** 간접 ✕ — 직접 판정엔 안 쓰임. 하위 Rule 2a51-1 등 claim 발급 기준의 위임 근거. + +**ERC-3643 변환:** 직접 매핑 없음. 이 위임에서 나온 Rule들이 claim topic의 "내용 규격"(어떤 증빙으로 claim을 발급하는가)을 정의한다. + +### 3.3 § 2(a)(51)(C) — Excepted Investment Company(전환 펀드의 보유자 consent) [🔗 uscode.house.gov] + +**핵심 원문:** "The term 'qualified purchaser' does not include a company that, but for the exceptions provided for in paragraph (1) or (7) of section 80a-3(c) of this title, would be an investment company (hereafter in this paragraph referred to as an 'excepted investment company'), unless all beneficial owners of its outstanding securities (other than short-term paper), determined in accordance with section 80a-3(c)(1)(A) of this title, that acquired such securities on or before April 30, 1996 (hereafter in this paragraph referred to as 'pre-amendment beneficial owners'), and all pre-amendment beneficial owners of the outstanding securities (other than short-term paper) of any excepted investment company that, directly or indirectly, owns any outstanding securities of such excepted investment company, have consented to its treatment as a qualified purchaser. Unanimous consent of all trustees, directors, or general partners of a company or trust referred to in clause (ii) or (iii) of subparagraph (A) shall constitute consent for purposes of this subparagraph." + +**한국어:** "qualified purchaser"라는 용어는, 본 title의 section 80a-3(c)의 paragraph (1) 또는 (7)에 규정된 예외가 없었다면 투자회사에 해당하였을 회사(이하 본 paragraph에서 "excepted investment company"라 한다)를 포함하지 아니한다. 다만, 본 title의 section 80a-3(c)(1)(A)에 따라 산정되는 그 발행 증권(단기증권 제외)의 모든 beneficial owner로서 1996년 4월 30일 이전에 그 증권을 취득한 자(이하 본 paragraph에서 "pre-amendment beneficial owners"라 한다), 그리고 그 excepted investment company의 발행 증권을 직접 또는 간접으로 소유하는 다른 excepted investment company의 발행 증권(단기증권 제외)의 모든 pre-amendment beneficial owner가 그 회사를 qualified purchaser로 취급하는 데 동의(consent)한 경우에는 그러하지 아니하다. subparagraph (A)의 clause (ii) 또는 (iii)에 언급된 회사 또는 신탁의 모든 수탁자·이사·무한책임사원(general partner)의 만장일치 동의는 본 subparagraph의 목적상 consent를 구성한다. + +**쉬운 설명:** (B)는 규칙의 근거, (C)는 "펀드가 QP가 될 수 있는가"의 조건이다. BUIDL처럼 신규 발행 펀드에 자연인·법인이 직접 들어오는 구조에서는 (C)의 1996년 consent 요건이 직접 발동될 일은 드물지만, *fund-of-funds*나 전환 펀드가 매수인이 되는 경우 반드시 확인해야 하는 갈래다. + +**PASS/FAIL 반영:** 조건부 — 매수인이 펀드·전환펀드일 때만 발동(1996년 보유자 consent 요건). + +**ERC-3643 변환:** 전환펀드 한정: preAmendmentConsentVerified = true 확인 후 lookThroughStatus = COMPLETED로 claim 발급. 일반 자연인·법인 매수엔 온체인 영향 없음. + +### 3.4 § 3(c)(7)(A) — ICA 등록 면제 조건 [🔗 uscode.house.gov] + +**핵심 원문:** "Any issuer, the outstanding securities of which are owned exclusively by persons who, at the time of acquisition of such securities, are qualified purchasers, and which is not making and does not at that time propose to make a public offering of such securities. Securities that are owned by persons who received the securities from a qualified purchaser as a gift or bequest, or in a case in which the transfer was caused by legal separation, divorce, death, or other involuntary event, shall be deemed to be owned by a qualified purchaser, subject to such rules, regulations, and orders as the Commission may prescribe as necessary or appropriate in the public interest or for the protection of investors." + +**한국어:** 그 발행 증권이, 해당 증권의 취득 시점에 qualified purchaser인 자들에 의하여 배타적으로(exclusively) 소유되고, 그 시점에 해당 증권의 public offering(공모)을 하고 있지 아니하며 또한 그때 이를 하려고 제안하지도 아니하는 모든 issuer. … 증여(gift)나 유증(bequest)으로, 또는 … 법적 별거, 이혼, 사망, 그 밖의 비자발적 사건(involuntary event)에 의하여 … 받은 증권은 qualified purchaser가 소유한 것으로 본다 … + +**쉬운 설명:** §3(c)(7) 면제에는 두 개의 조건이 있다 — ① "모든 지분이 취득 시점에 QP에게 배타적으로 소유"(Condition 1), ② "public offering을 하지 않음"(Condition 2). 본 부품(A-13)이 책임지는 것은 Condition 1이다. Condition 2(공모 금지)는 부품 하나로 끝나지 않고 DEX 거래환경 전체에 걸리는 Recipe-level 문제이며, 이 문서 §9·§12에서 별도로 다룬다. + +**PASS/FAIL 반영:** 직접 ○ — A-13 판정의 본체(Condition 1). 보유자 전원 QP + 취득 시점 충족 시 PASS, 한 명이라도 비-QP면 FAIL(면제 위태). + +**ERC-3643 변환:** transfer 시 IdentityRegistry.isVerified(to) && Compliance.canTransfer() → QP claim 없는 지갑 이전 거부("전원 QP" 강제). 비자발적 이전 = forcedTransfer() / recovery() 예외(Rule 3c-6). Condition 2는 토큰 밖(Recipe·Operator, §9·§12). + +### 3.5 § 3(c)(7)(B) — 기존 §3(c)(1) 펀드의 §3(c)(7) 전환 경과조항 (N/A) + +1996년 이전 §3(c)(1) 이력이 있는 펀드에만 적용되는 grandfathering 조항이라, 신규 발행 BUIDL에는 해당 없음. + +### 3.6 JOBS Act §201(b)(2) — 일반청약권유와 "public offering"의 단절 [🔗 govinfo.gov] + +**핵심 원문:** "Offers and sales exempt under section 230.506 of title 17, Code of Federal Regulations (as revised pursuant to section 201 of the Jumpstart Our Business Startups Act) shall not be deemed public offerings under the Federal securities laws as a result of general advertising or general solicitation." + +**한국어:** 17 Code of Federal Regulations의 section 230.506(Jumpstart Our Business Startups Act의 section 201에 따라 개정된 것)에 따라 면제되는 offer 및 sale은, 일반광고(general advertising) 또는 일반청약권유(general solicitation)의 결과라는 이유로 연방증권법(Federal securities laws)상 public offering으로 보지 아니한다. + +**해설(Condition 2의 핵심 다리).** 이 조항이 없으면 BUIDL 구조가 모순처럼 보인다 — 506(c)는 일반청약(광고)을 허용하는데 §3(c)(7)은 "공모를 하지 않을 것"을 요구하기 때문이다. §201(b)(2)가 그 충돌을 푼다: BUIDL이 506(c)로 대놓고 광고하며 QP에게 토큰을 팔아도, 그 **발행 행위 자체는 "공모"로 보지 않는다** → 발행 단계의 Condition 2는 해소된다. + +쉽게 말하면, §201(b)(2)는 **펀드가 자기 토큰을 처음 파는 행위**(1차 발행)만 봐준다. 기존 보유자가 DEX에서 자기 토큰을 남에게 되파는 **2차 거래**는 봐주지 않는다. 그래서 아직 답이 안 난 질문은 하나로 좁혀진다 — *"DEX에서 토큰이 상시 호가창에 떠 있고 익명으로 매칭돼 거래되는 환경 자체가 공모처럼 보이는가?"* 이건 §12 Open Issue로 남으며, 공모인지 아닌지를 따지는 Ralston Purina 4-factor도 (발행 광고가 아니라) 바로 이 2차 거래에 적용된다. + +중요한 점 하나 — 이 규칙들이 정하는 investments의 정의·투자목적·평가·차입금 차감 등의 "계산"은 모두 **신뢰기관(Trusted Issuer)이 오프체인에서** 수행한다. 온체인 A-13은 그 계산을 다시 하지 않고, 신뢰기관이 서명한 "이 사람 QP 맞음"이라는 claim과 그 근거 플래그만 확인한다(자세한 구조는 §8). + +**쉬운 설명:** 506(c)로 광고하며 발행해도 '공모'가 아니라는 법적 보장. 덕분에 발행 단계의 §3(c)(7) 공모 우려가 사라진다(2차 거래는 별개). + +**PASS/FAIL 반영:** 간접 ✕ — A-13 판정엔 안 쓰임. 발행 측 공모 우려를 해소하는 법적 전제(§9.6·§12). + +**ERC-3643 변환:** 온체인 구현 없음. 발행 UI에서 일반청약·광고 허용의 근거일 뿐, transfer·claim 로직과 무관. + +### 3.7 17 CFR § 270.2a51-1(a) — 정의(이 규칙에서 쓰는 용어) [🔗 ecfr.gov] + +**핵심 원문(주요 정의):** "(8) The term *Related Person* means a person who is related to a Prospective Qualified Purchaser as a sibling, spouse or former spouse, or is a direct lineal descendant or ancestor by birth or adoption of the Prospective Qualified Purchaser, or is a spouse of such descendant or ancestor, *provided that,* in the case of a Family Company, a Related Person includes any owner of the Family Company and any person who is a Related Person of such owner. (9) The term *Relying Person* means a Section 3(c)(7) Company or a person acting on its behalf. (10) The term *Section 3(c)(7) Company* means a company that would be an investment company but for the exclusion provided by section 3(c)(7) of the Act." + +**한국어:** (8) "Related Person"이라는 용어는, Prospective Qualified Purchaser와 형제, 배우자 또는 전 배우자로서 관계되거나, 그의 출생 또는 입양에 의한 직계비속 또는 직계존속이거나, 그러한 비속 또는 존속의 배우자인 자를 뜻한다. 다만, Family Company의 경우 Related Person에는 그 Family Company의 모든 소유자 및 그러한 소유자의 Related Person인 모든 자가 포함된다. (9) "Relying Person"이라는 용어는 Section 3(c)(7) Company 또는 그를 대신하여 행위하는 자를 뜻한다. (10) "Section 3(c)(7) Company"라는 용어는, Act의 section 3(c)(7)이 제공하는 제외(exclusion)가 없었다면 투자회사에 해당하였을 회사를 뜻한다. + +**쉬운 설명:** 규칙에서 쓰는 용어 정의. '매수인=Prospective QP, 펀드/대리인=Relying Person'처럼 이후 모든 규칙의 주어를 정한다. Related Person은 (c) 부동산 '개인·사업용 제외' 판정에, Relying Person(=Trusted Issuer)은 (h) reasonable belief 안전항에 대응하며, Section 3(c)(7) Company가 곧 BUIDL이다. + +**PASS/FAIL 반영:** 직접(보조) — 판정 자체보다 용어 토대. claim 로직의 변수 정의. + +**ERC-3643 변환:** 변수 매핑 — ProspectiveQualifiedPurchaser = 매수인, RelyingPerson = TrustedIssuer(claim 서명 주체), Section3c7Company = BUIDL(fundId). + +### 3.8 17 CFR § 270.2a51-1(b) — "Investments"의 정의(무엇을 자산으로 치는가) [🔗 ecfr.gov] + +**핵심 원문(요지):** "Investments" means: (1) Securities (other than securities of an issuer that controls, is controlled by, or is under common control with the prospective qualified purchaser, with limited exceptions); (2) Real estate held for investment purposes; (3) Commodity Interests held for investment purposes; (4) Physical Commodities held for investment purposes; (5) ... financial contracts entered into for investment purposes; (6) [§3(c)(7) Company 매수자인 경우] firm commitments to contribute capital; and (7) Cash and cash equivalents held for investment purposes. + +**한국어:** "Investments"란 다음을 뜻한다 — (1) 증권(단, prospective qualified purchaser를 지배하거나, 그에 의하여 지배되거나, 그와 공동지배 관계에 있는 issuer의 증권은 제외하되, 제한적 예외가 있다); (2) 투자 목적으로 보유하는 부동산; (3) 투자 목적으로 보유하는 Commodity Interests; (4) 투자 목적으로 보유하는 Physical Commodities; (5) 투자 목적으로 체결한 … 금융계약; (6) [§3(c)(7) Company의 매수인인 경우] 자본을 출연하기로 한 확정 약정(firm commitments); 그리고 (7) 투자 목적으로 보유하는 현금 및 현금성 자산. + +**쉬운 설명:** 무엇을 '투자자산(investments)'으로 세는지의 핵심 목록(증권·투자부동산·상품·금융계약·현금성 등 7종). $5M/$25M 문턱이 이 자산들로 계산된다. + +**PASS/FAIL 반영:** 직접 ○ — $5M/$25M 문턱 계산의 대상 자산. 충족 시 investmentsVerified=true. + +**ERC-3643 변환:** claim.investmentsVerified = true (off-chain 7종 분류·합산 결과). 온체인엔 자산 명세 비공개, 판정 결과만 기록. + +### 3.9 17 CFR § 270.2a51-1(c) — "Investment Purposes"(주거·사업용 부동산 제외) [🔗 ecfr.gov] + +**핵심 원문(요지):** "Real estate shall not be considered to be held for investment purposes ... if it is used ... for personal purposes or as a place of business ... [of] the Prospective Qualified Purchaser or a Related Person ..." + +**한국어:** 부동산은, 그것이 … Prospective Qualified Purchaser 또는 Related Person의 … 개인적 용도로 또는 사업장(place of business)으로 사용되는 경우에는 … 투자 목적으로 보유하는 것으로 보지 아니한다. + +**쉬운 설명:** 내가 사는 집·내 사업장은 investments에서 빠진다. 투자 목적 부동산만 자산으로 인정. + +**PASS/FAIL 반영:** 직접 — investments 계산 시 주거·사업용 부동산 제외 규칙. + +**ERC-3643 변환:** off-chain investments 계산의 제외 규칙(온체인 필드 없음). investmentsVerified 발급 조건에 반영. + +### 3.10 17 CFR § 270.2a51-1(d) — Valuation(얼마로 평가하는가) [🔗 ecfr.gov] + +**핵심 원문(요지):** "... the aggregate amount of Investments ... shall be the Investments' fair market value on the most recent practicable date or their cost ..." -### 3.3 Layer 3 — Interpretive guidance (판례·발행문서·No-Action Letter) +**한국어:** … Investments의 총액(aggregate amount)은 … 실무상 가능한 가장 최근 일자의 공정시장가치(fair market value) 또는 그 취득원가(cost)로 한다 … + +**쉬운 설명:** 자산을 얼마로 칠지 — 공정가치(FMV) 또는 원가(cost)로 평가한다. + +**PASS/FAIL 반영:** 직접 — investments 금액을 정하는 평가 방식. + +**ERC-3643 변환:** claim.valuationMethod = FMV | COST (off-chain 평가, 감사 추적용 기록). 온체인 계산 없음. + +### 3.11 17 CFR § 270.2a51-1(e)·(f) — Deductions(차입금 차감) [🔗 ecfr.gov] + +**핵심 원문(요지):** "(e) ... there shall be deducted ... the amount of any outstanding indebtedness incurred to acquire or for the purpose of acquiring the Investments ... (f) [Family Company의 경우 소유자가 그 투자를 취득하기 위해 진 차입금도 차감]" + +**한국어:** (e) … Investments를 취득하기 위하여 또는 취득할 목적으로 발생시킨 미상환 채무(outstanding indebtedness)의 금액을 … 차감한다 … (f) [Family Company의 경우, 그 소유자가 해당 투자를 취득하기 위하여 발생시킨 채무도 차감한다.] + +**쉬운 설명:** 투자를 사려고 빌린 돈은 자산에서 뺀다(순자산 기준). 단, 일반 주택담보대출·사업자금 대출은 차감 대상이 아니다. + +**PASS/FAIL 반영:** 직접 — 취득용 차입금 차감 후 순 investments로 문턱 판정. + +**ERC-3643 변환:** claim.debtAdjustmentChecked = true. 차감 후 순 investments ≥ 문턱이어야 claim 발급. + +### 3.12 17 CFR § 270.2a51-1(g) — 특정 매수인 특칙(QIB 간주·배우자 합산·자회사 투자) [🔗 ecfr.gov] + +**핵심 원문 (g)(1) QIB:** "Any Prospective Qualified Purchaser who is, or who a Relying Person reasonably believes is, a qualified institutional buyer as defined in paragraph (a) of § 230.144A of this chapter, acting for its own account, the account of another qualified institutional buyer, or the account of a qualified purchaser, shall be deemed to be a qualified purchaser ..." + +**핵심 원문 (g)(2) 배우자 공동투자:** "… In determining whether spouses who are making a joint investment in a Section 3(c)(7) Company are qualified purchasers, there may be included in the amount of each spouse's Investments any Investments owned by the other spouse (whether or not such Investments are held jointly). In each case, there shall be deducted from the amount of any such Investments the amounts specified in paragraph (e) of this section incurred by each spouse." + +**한국어:** (g)(1) 본 chapter의 § 230.144A의 paragraph (a)에 정의된 qualified institutional buyer이거나 Relying Person이 그러하다고 합리적으로 믿는 Prospective Qualified Purchaser로서, 자기 계산, 다른 qualified institutional buyer의 계산, 또는 qualified purchaser의 계산으로 행위하는 자는 qualified purchaser로 본다 … (g)(2) Section 3(c)(7) Company에 공동으로 투자하는 배우자들이 qualified purchaser인지를 판정함에 있어, 각 배우자의 Investments 금액에 다른 배우자가 소유한 Investments(그 Investments가 공동으로 보유되는지 여부를 불문한다)를 포함할 수 있다. 각 경우에, 그러한 Investments 금액에서 각 배우자가 발생시킨 본 section paragraph (e)에 규정된 금액을 차감한다. + +**쉬운 설명:** Decipher 관점에서 (g)(1) QIB 경로는 QIB(기관투자자) 매수인을 $25M 자산 입증 없이 통과시키는 별도 갈래이고(claim.basis = QP_QIB), (g)(2) 배우자 합산은 자연인 $5M 문턱을 부부 단위로 볼 수 있게 한다. 둘 다 §4 입력·§5 로직에 반영해야 한다. + +**PASS/FAIL 반영:** 조건부 — QIB 매수인·부부 공동투자 등 특정 갈래에서만 발동. + +**ERC-3643 변환:** (g)(1) → claim.basis = QP_QIB (자산 입증 생략 발급). (g)(2) → off-chain 자산 합산에 배우자분 포함. + +### 3.13 17 CFR § 270.2a51-1(h) — Reasonable Belief(합리적 신뢰 안전항) [🔗 ecfr.gov] + +**핵심 원문:** "The term 'qualified purchaser' ... means any person that meets the definition of qualified purchaser in section 2(a)(51)(A) of the Act and the rules thereunder, or that a Relying Person reasonably believes meets such definition." (여기서 "Relying Person"은 §3(c)(7) Company 또는 그를 대신해 행위하는 자를 말한다.) + +**한국어:** "qualified purchaser"라는 용어는 … Act의 section 2(a)(51)(A) 및 그에 따른 규칙상 qualified purchaser의 정의를 충족하는 모든 자, 또는 Relying Person이 그러한 정의를 충족한다고 합리적으로 믿는 모든 자를 뜻한다. (여기서 "Relying Person"은 Section 3(c)(7) Company 또는 그를 대신하여 행위하는 자를 말한다.) + +**쉬운 설명:** 펀드(또는 대리인)가 합리적으로 QP라 믿었다면, 나중에 자격 흠결이 드러나도 면제가 곧바로 깨지지 않는다. 이게 claim(증명서)에 기대 검증하는 설계의 법적 근거다(§8). (h) 문언은 'Relying Person이 합리적으로 믿으면 충분하다'는 단순한 형태이고, '합리적 신뢰를 위해 상당한 주의를 다해야 한다'는 취지는 실무·집행상 요구될 뿐 (h) 문언 자체에 명시돼 있지는 않다. + +**PASS/FAIL 반영:** 직접 ○ — 증명서형(claim) 검증 패턴 전체의 법적 토대(§8). + +**ERC-3643 변환:** Trusted Issuer의 claim 서명 = reasonable belief 구현(별도 필드 없음). 사후 흠결에도 면제 즉시 미붕괴. 책임 분배 §10.4·§12(#3). + +### 3.14 17 CFR § 270.3c-5 — Knowledgeable Employee(펀드 임직원의 제외) [🔗 ecfr.gov] + +**핵심 원문(요지):** "(a)(4) The term 'Knowledgeable Employee' ... means any natural person who is: (i) an Executive Officer, director, trustee, general partner, advisory board member, or person serving in a similar capacity, of the Covered Company or an Affiliated Management Person ...; or (ii) an employee ... (other than ... clerical, secretarial or administrative functions) who, in connection with his or her regular functions or duties, participates in the investment activities ... provided that such employee has been performing such functions ... for at least 12 months. (b) For purposes of ... whether the outstanding securities of a Section 3(c)(7) Company are owned exclusively by qualified purchasers, there shall be excluded securities beneficially owned by: (1) a Knowledgeable Employee ...; (2) a company owned exclusively by Knowledgeable Employees ..." + +**한국어:** (a)(4) "Knowledgeable Employee"라는 용어는 … 다음 중 하나인 모든 자연인을 뜻한다 — (i) Covered Company 또는 Affiliated Management Person의 Executive Officer, 이사(director), 수탁자(trustee), 무한책임사원(general partner), 자문위원회 위원(advisory board member), 또는 그와 유사한 지위에서 직무를 수행하는 자; 또는 (ii) 자신의 통상적 기능 또는 직무와 관련하여 … 투자활동에 참여하는 직원(… 사무·비서·관리 기능을 수행하는 자는 제외)으로서, 다만 그러한 직원이 그러한 기능을 … 최소 12개월 동안 수행해 온 경우에 한한다. (b) Section 3(c)(7) Company의 발행 증권이 qualified purchaser에 의하여 배타적으로 소유되는지를 판단할 목적상, 다음에 의하여 beneficial owner로 소유되는 증권은 제외한다 — (1) Knowledgeable Employee …; (2) Knowledgeable Employee들에 의하여 배타적으로 소유되는 회사 … + +**쉬운 설명:** 펀드 운용에 정통한 임직원(KE)은 자산 $5M 없이도 자기 펀드에 투자할 수 있다. 단 법 문언상 경로는 'QP로 간주'가 아니라 '전원 QP' 계산에서 KE 보유분을 제외(exclusion)하는 것이다(자기 펀드 매수에 한함). + +**PASS/FAIL 반영:** 직접(조건부) — KE는 자산요건 없이 "전원 QP" 판정에서 제외. + +**ERC-3643 변환:** claim.basis = KNOWLEDGEABLE_EMPLOYEE_EXCLUSION, claim.coveredCompany = fundId (자기 펀드 매수에만 유효). + +### 3.15 17 CFR § 270.3c-6 — 증여·상속·이혼 등 비자발적 이전(transfers) [🔗 ecfr.gov] + +**핵심 원문(주요 정의):** "(a)(1) The term *Donee* means a person who acquires a security of a Covered Company (or a security or other interest in a company referred to in paragraph (b)(3) of this section) as a gift or bequest or pursuant to an agreement relating to a legal separation or divorce. ... (4) The term *Transferee* means a Section 3(c)(1) Transferee or a Qualified Purchaser Transferee ..." + +**한국어:** (a)(1) "Donee"라는 용어는, Covered Company의 증권(또는 본 section paragraph (b)(3)에 언급된 회사의 증권 또는 그 밖의 지분)을 증여나 유증으로, 또는 법적 별거나 이혼에 관한 합의에 따라 취득하는 자를 뜻한다. … (4) "Transferee"라는 용어는 Section 3(c)(1) Transferee 또는 Qualified Purchaser Transferee를 뜻한다 … + +**쉬운 설명:** §3(c)(7)(A) 본문에는 "상속·이혼·증여처럼 본인 의사와 무관하게(involuntary) 넘어간 지분은 QP가 가진 것으로 친다"는 **예외**(carve-out)가 한 줄 들어 있다. Rule 3c-6은 그 예외를 실제로 어떻게 적용할지(누가 Donee·Transferee로 인정되는지)를 정한 규칙이다. 결과적으로 — BUIDL을 들고 있던 QP가 사망해 상속인(비-QP)에게 토큰이 넘어가도, 그 한 명 때문에 펀드의 "전원 QP" 면제가 곧바로 깨지지는 않는다. Decipher에서는 on-chain transfer 제약(ERC-3643 forced-transfer/recovery)을 설계할 때 이 비자발적 이전 예외와 충돌하지 않게 맞춰야 한다. + +**PASS/FAIL 반영:** 조건부 — §3(c)(7)(A) Condition 1의 비자발적-이전 카브아웃 구현. + +**ERC-3643 변환:** transfer.involuntary = true → agent forcedTransfer() / recovery()로 canTransfer 게이트 우회. 수취인 일시 비-QP여도 면제 미붕괴(정리는 Operator 층). + +### 3.16 17 CFR § 270.2a51-3 — Certain companies as qualified purchasers(목적형성 회사의 look-through) [🔗 ecfr.gov] + +**핵심 원문:** "(a) For purposes of section 2(a)(51)(A) (ii) and (iv) of the Act, a company shall not be deemed to be a qualified purchaser if it was formed for the specific purpose of acquiring the securities offered by a company excluded from the definition of investment company by section 3(c)(7) of the Act unless each beneficial owner of the company's securities is a qualified purchaser. (b) ... a company may be deemed to be a qualified purchaser if each beneficial owner of the company's securities is a qualified purchaser." + +**한국어:** (a) Act의 section 2(a)(51)(A) (ii)·(iv)의 목적상, 회사가 section 3(c)(7)로 투자회사 정의에서 제외되는 회사가 제공하는 증권을 취득할 특정 목적으로 형성된 경우, 그 회사의 증권의 각 beneficial owner가 qualified purchaser가 아닌 한, 그 회사는 qualified purchaser로 보지 아니한다. (b) … 그 회사의 증권의 각 beneficial owner가 qualified purchaser인 경우, 그 회사는 qualified purchaser로 볼 수 있다. + +**쉬운 설명:** 이 펀드를 사려고 급조한 회사는 구성원이 전부 QP일 때만 QP로 인정된다(우회 방지). 적용 대상은 §2(a)(51)(A) (ii) 가족회사·(iv) $25M 회사 **두 회사 갈래뿐**이며, (iii) 신탁의 look-through는 Rule 2a51-3이 아니라 statute §2(a)(51)(A)(iii) 자체가 규정한다 — 게다가 신탁은 **급조면 (iii) 탈락**이라 회사가 받는 "전원 QP면 치유"가 없고, 자연인(i)은 "형성"되는 대상이 아니라 급조 판단 자체가 적용되지 않는다(아래 §3.17 참조). + +**PASS/FAIL 반영:** 조건부 — 법인 매수인이 목적형성 회사인지 검증(look-through). + +**ERC-3643 변환:** 법인 매수인: off-chain look-through(급조 여부 + 구성원 전원 QP) → 통과 시 단일 QP claim, lookThroughStatus = COMPLETED 기록(A-09). + +### 3.16.1 급조 회사 vs 비-급조 회사 — 회사 매수인 판정 분기 + +회사가 매수인일 때, **급조 회사인지**(= 이 펀드 증권을 취득할 특정 목적으로 형성됐는지)가 판정 경로를 가르는 스위치다. Rule 2a51-3은 (a)·(b) 두 항으로 이를 나눈다. + +![그림 3.16.1 — Rule 2a51-3: 급조 회사(look-through 강제) vs 비-급조 회사(자체 자산 충족 / (b) 전원 QP)](fig/fig_2a513.png) + +**① 급조 회사(특정 목적 형성) — Rule 2a51-3(a).** "제공되는 증권을 취득할 특정 목적으로 형성된" 회사는, 구성원(beneficial owner) **전원이 QP가 아닌 한** QP로 보지 않는다 → look-through 강제. 한 명이라도 비-QP면 탈락이다. (2a51-3(a)는 조문상 §2(a)(51)(A) (ii)·(iv) 회사에만 적용된다 — 신탁은 statute (iii)가 별도로 규정.) + +**② 비-급조 회사 — 두 갈래.** + +- **자체 자산이 문턱 충족** → §2(a)(51)(A)(iv)(또는 가족회사면 (ii))로 회사 단위로 QP. 안을 들여다볼 필요 없이 통과한다(일반 원칙). +- **자체 자산 부족** → **Rule 2a51-3**(b)가 추가 선택지를 준다 — 각 beneficial owner가 **전원 QP면 QP로 볼 수 있다**(may be deemed). + +즉 (a)는 급조 회사에 대한 **제한**(전원 QP 아니면 불가), (b)는 비-급조 회사에 대한 **허용**(전원 QP면 가능)이다. 어느 쪽이든 "구성원 전원 QP"라는 안전판은 열려 있다. + +**근거(authority).** 모두 17 CFR § 270.2a51-3 한 조문이다 — (a)는 급조 회사의 look-through 강제, (b)는 전원 QP면 인정 가능. "급조했는지(specific purpose)"라는 개념의 뿌리는 statute §2(a)(51)(A)(iii)로, 신탁에 대해 "특정 증권 취득 목적으로 형성된 것이 아닐 것"을 명시한 것을 Rule 2a51-3이 회사에까지 확장한 것이다. + +**주의.** "비-급조 + 자체 자산 $25M"으로 (iv) 통과해도, 그 회사가 *남의 돈*을 굴리는 구조라면 그 계정들도 QP("other qualified purchasers")여야 한다는 (iv) 단서가 따라붙는다. + +### 3.17 17 CFR § 270.2a51-2 — Beneficial owner 판정·간접 소유·전환 펀드 [🔗 ecfr.gov] + +**핵심 원문 (a):** "Except as set forth in this section, for purposes of sections 2(a)(51)(C) and 3(c)(7)(B)(ii) of the Act, the beneficial owners of securities of an excepted investment company (as defined in section 2(a)(51)(C) of the Act) shall be determined in accordance with section 3(c)(1) of the Act." + +**한국어:** 본 section에 정한 경우를 제외하고, Act의 section 2(a)(51)(C) 및 3(c)(7)(B)(ii)의 목적상, excepted investment company(Act의 section 2(a)(51)(C)에 정의된 것)의 증권의 beneficial owner는 Act의 section 3(c)(1)에 따라 결정한다. + +**쉬운 설명:** 2a51-2는 "누구를 beneficial owner로 보고 어떻게 세는지"를 정하는 규칙이다 — (1) 매수인이 펀드(excepted investment company)면 그 소유자를 §3(c)(1) 방식으로 세고, (2) 간접소유(여러 겹 지주구조)를 추적하며, (3) §2(a)(51)(C)·§3(c)(7)(B)(ii) 전환 consent(1996-04-30·10-11 grandfathering)와 직접 연결된다. + +**2a51-3(a)와 2a51-2의 분담 (혼동 주의).** 둘 다 "look-through"를 말하지만 역할이 다르다 — **2a51-3(a) = 요건**(급조 회사면 *각 beneficial owner가 전원 QP여야* 통과하며, 적용 대상은 §2(a)(51)(A) (ii)·(iv) 회사), **2a51-2 = 세는 방법**(그 "각 beneficial owner"가 누구인지 확정·합산). 3(a)가 "전원 QP인지 보라"고 명령하면 2a51-2가 "그 전원이 누구인지"를 센다. 정확한 권위 사슬은 **2a51-3(a)(요건) → §3(c)(1)·Rule 3c-1(누구를 세나) → 2a51-2(간접소유·펀드층·전환 consent)** 순이다 — 일반 사업회사 구성원 카운팅의 1차 근거는 §3(c)(1)/3c-1이고, 2a51-2는 그 위에 간접소유·펀드층·전환 consent를 더한다. §9 cascade·§12 Open Issue(look-through depth)와 함께 본다. + +**매수인 유형별 look-through 적용 — 한눈에:** + +- 매수인이 **개인** → 그 사람만 보면 끝 (look-through 불필요) +- 매수인이 **회사** → 급조 여부를 **Rule 2a51-3**으로 판정(요건): 급조면 안의 주인들 전원 QP인지 본다 [§2(a)(51)(A) (ii)·(iv)] +- 매수인이 **신탁** → statute **§2(a)(51)(A)(iii)**: ① 급조(특정목적 형성)가 **아닐 것** + ② 수탁자·각 위탁자가 **(i)·(ii)·(iv)에 해당하는 QP**((iii) 신탁은 불인정 → 신탁 겹치기 차단) — 둘 다 필요(급조 신탁은 (iii) 탈락이며, 회사 같은 "전원 QP면 치유"가 없다) +- 그 "주인들이 누구인지"를 세는 단계 → **§3(c)(1)·Rule 3c-1**이 1차 기준, **여러 겹·펀드층**이면 **Rule 2a51-2**가 간접소유를 끝까지 추적·합산 + +**§3.0 플로우차트에서 전환펀드에 조문이 3개 나오는 이유 (혼동 주의).** N4(전환펀드) 노드의 **§3(c)(7)(B) · §2(a)(51)(C) · Rule 2a51-2**는 세 개의 독립 요건이 아니라 *조문 2 + 구현 규칙 1*이다 — 모두 "§3(c)(7)이 등장할 때 이미 들어와 있던 옛 보유자를 어떻게 처리하나"라는 한 문제의 다른 조각이다. **§2(a)(51)(C)**(정의 쪽)는 매수인이 *그 자체로 펀드*(excepted investment company)일 때 그 펀드가 QP로 세어지려면 1996-04-30 이전 보유자의 consent가 필요하다는 **fund-of-funds 게이트**다. **§3(c)(7)(B)**(전환 쪽)는 기존 §3(c)(1) 펀드가 §3(c)(7)로 전환하면서 §3(c)(1) 시절 비-QP 보유자를 최대 100명까지 grandfather로 안고 가게 해주는 조항이다. **Rule 2a51-2**(구현 쪽)는 그 둘을 실제로 작동시키는 규칙 — beneficial owner를 §3(c)(1) 방식으로 세고, 여러 겹 간접소유를 추적하며, 1996-04-30·1996-10-11 consent 양식·시기를 정한다(공식 제목이 "beneficial owner for certain purposes under sections 2(a)(51) *and* 3(c)(7)"인 이유 — 두 조문을 동시에 구현하는 **다리**이기 때문). **신규 §3(c)(7) 펀드(BUIDL·Decipher)는 첫날부터 전원 QP라 이 경로 전체가 대개 N/A**이며, 실제 발동은 (a) 기존 §3(c)(1) 펀드가 전환하거나 (b) 매수인이 그 자체로 fund-of-funds일 때뿐이다 — 그래서 플로우차트가 이를 파랑(핵심)이 아닌 **주황**(전환·참고)으로 본류에서 비켜 그렸다. + +**PASS/FAIL 반영:** 조건부 — 펀드·전환 매수인의 beneficial owner 산정·간접 소유 판정. + +**ERC-3643 변환:** off-chain beneficial owner 산정(§3(c)(1) 방식) + 간접소유 판정 → lookThroughStatus. 전환펀드면 1996 consent 확인 후 claim 발급(A-09). + +### 3.18 판례·발행문서·No-Action Letter (Layer 3) 조문·규칙이 모호한 부분은 판례·SEC 발행문서·No-Action Letter가 메운다. Decipher에 가장 중요한 자료들이다. -> **SEC v. Ralston Purina Co.**, 346 U.S. 119 (1953) [🔗 [Justia](https://supreme.justia.com/cases/federal/us/346/119/)] -> -> **Holding 핵심**: "An offering to those who are shown to be able to fend for themselves is a transaction 'not involving any public offering.'"(스스로를 지킬 수 있음이 입증된 자들에 대한 청약은 '공모에 해당하지 않는' 거래다.) +**SEC v. Ralston Purina Co., 346 U.S. 119 (1953)** [🔗 govinfo.gov] -연방대법원이 "public offering(공모)"의 의미를 처음 명확히 한 foundational case다. 핵심은 **"투자자가 스스로를 보호할 수 있는가(able to fend for themselves)"**라는 기능적 기준이고, 실무는 여기서 4-factor test를 끌어낸다 — ① 청약 받은 사람 수(offerees), ② 그들의 sophistication, ③ 발행자 정보에 대한 접근성(access to information), ④ 매수 목적(투자용인가 전매용인가). **Decipher 관련성**: §3(c)(7)의 Condition 2("no public offering")도 이 4-factor가 출발점이다. DEX의 secondary trading이 "public offering"으로 해석되는지가 §3(c)(7) 유지의 핵심 질문이며, §9·§12에서 다룬다. +> **Holding 핵심:** "An offering to those who are shown to be able to fend for themselves is a transaction 'not involving any public offering.'"(스스로를 지킬 수 있음이 입증된 자들에 대한 청약은 '공모에 해당하지 않는' 거래다.) -> **Oxford Univ. Bank v. Lansuppe Feeder**, 933 F.3d 99 (2d Cir. 2019) [🔗 [Justia](https://law.justia.com/cases/federal/appellate-courts/ca2/16-4061/16-4061-2019-08-05.html)] -> -> **Holding 요약**(⚠️ 정정 포인트): 제2연방항소법원은 **ICA §47(b)가 묵시적 사적 소권(implied private right of action)을 만들어, ICA를 위반하는 계약의 당사자가 *rescission(계약 해제)*을 청구할 수 있다**고 판시했다. +연방대법원이 "public offering(공모)"의 의미를 처음 명확히 한 foundational case다. 핵심은 **"투자자가 스스로를 보호할 수 있는가(able to fend for themselves)"라는** 기능적 기준이고, 실무는 여기서 4-factor test를 끌어낸다 — ① 청약 받은 사람 수(offerees), ② 그들의 sophistication, ③ 발행자 정보에 대한 접근성(access to information), ④ 매수 목적(투자용인가 전매용인가). **Decipher 관련성:** §3(c)(7)의 Condition 2("no public offering")도 이 4-factor가 출발점이다. 단, 발행 단계의 506(c) 일반청약·광고는 JOBS Act §201(b)(2)에 따라 그 자체로는 public offering이 아니므로(§3.6 참조), 이 4-factor는 issuance 광고가 아니라 **DEX의 secondary trading**에 적용된다 — 상시 호가·익명 매칭이 별도의 public offering을 유발하는지가 §3(c)(7) 유지의 핵심 질문이며 §9·§12에서 다룬다. -**Decipher 관련성**: 이 판결은 §3(c)(7) 그 자체를 직접 다룬 사건이 아니다. 하지만 §1.3에서 본 existential risk에 *구체적 경로*를 준다 — 펀드가 면제를 잃어 ICA 위반 상태(미등록 투자회사)가 되면, §47(b)를 통해 **투자자가 매수계약의 해제를 청구**할 수 있다는 것. 즉 "면제 상실"이 추상적 위험에 그치지 않고 *현실의 소송·환매로 전환되는 다리*가 이 판결로 확인된다. (이 판결을 "§3(c)(7) 위반의 효과를 판시한 판례"로 인용하면 부정확하므로, 위와 같이 §47(b) rescission 경로로 정확히 인용해야 한다.) +**Oxford Univ. Bank v. Lansuppe Feeder, 933 F.3d 99 (2d Cir. 2019) — *FS Credit Opportunities Corp. v. Saba Capital Master Fund, Ltd.*, 608 U.S. ___ (No. 24-345, 2026-06-11)로 번복됨.** Oxford에서 제2연방항소법원은 ICA §47(b)가 묵시적 사적 소권(implied private right of action)을 인정해 위반 계약 당사자가 rescission을 청구할 수 있다고 보았다. 그러나 2026년 연방대법원은 FS Credit(6-3, Barrett 집필)에서 §47(b)가 **private parties에게 독립적 rescission 소송권을 부여하지 않는다**고 판시해 circuit split을 정리했다 — §47(b)는 court에 대한 mandate(이미 법원 앞에 온 사건의 remedial authority 지시)이지 rights-creating이 아니며, SEC가 primary enforcer라는 것(1980년 개정이 TAMA가 의존한 'shall be void'를 삭제). **§47(b)를 standalone private rescission cause of action으로 설명하면 안 되며**, 면제 상실의 실질 후과는 SEC enforcement·계약 unenforceability·상업적 unwind·issuer/sponsor 계약 책임으로 재구성한다(§1.4). -> **SEC v. W.J. Howey Co.**, 328 U.S. 293 (1946) [🔗 [Justia](https://supreme.justia.com/cases/federal/us/328/293/)] -> -> **Holding 핵심**: "investment contract"(투자계약 = 증권)의 4-factor — ① 금전 투자, ② 공동 사업, ③ 이익 기대, ④ 타인의 노력에서 비롯되는 이익. +**SEC v. W.J. Howey Co., 328 U.S. 293 (1946).** "증권(investment contract)" 판단의 4-factor 기준 판례. BUIDL은 펀드 지분이라 증권임이 명백하므로, 본 부품은 증권성을 전제하고 다투지 않는다. -**Decipher 관련성**: ICA가 적용되려면 우선 그 토큰이 "security"여야 한다. BUIDL은 펀드 지분이므로 Howey test를 명확히 충족하고, 따라서 ICA §3(c)(7) 분석 대상이 된다. (Reves v. Ernst & Young, 494 U.S. 56 (1990)의 note 분류 테스트는 채권형 자산에서 보충적으로 쓰이나, BUIDL 같은 펀드 지분에는 Howey가 직접 적용된다.) +**SEC Release IC-22597, 62 FR 17512 (Apr. 9, 1997) — Privately Offered Investment Companies (adopting release)** [🔗 sec.gov] -> **SEC Release IC-22597, 62 FR 17512 (Apr. 9, 1997)** — *Privately Offered Investment Companies* (adopting release) -> -> **성격**(⚠️ 정정 포인트): 위 Rule 2a51-1·2a51-3·3c-5를 **채택한 1997년 SEC adopting release**다. (종전 "1996" 표기는 부정확 — 제안은 1996년이었으나 채택·시행은 1997년 4월이며, 규칙 말미의 게재정보도 "62 FR …, Apr. 9, 1997"로 일치한다.) §2(a)(51)·§3(c)(7) 신설의 입법 취지와 규칙 해석의 근거 자료로 쓴다. +**무엇인가.** 1996년 NSMIA가 ICA에 §3(c)(7) 면제와 §2(a)(51) QP 정의를 신설하자, SEC가 그 시행을 위해 채택한 final rule 묶음이다(File No. S7-30-96, 1997-04-03 채택, 1997-06-09 시행, 62 FR 17512). + +**무엇을 채택했나.** A-13이 의존하는 핵심 규칙 6종을 한 번에 채택했다 — Rule 2a51-1(무엇을 "investments"로 치고 어떻게 평가·차감하는지), 2a51-2(beneficial owner 산정·간접 소유·전환 펀드), 2a51-3(목적형성 회사의 전원-QP look-through), 3c-1(§3(c)(1) beneficial owner 산정), 3c-5(Knowledgeable Employee 제외), 3c-6(증여·상속·이혼 등 비자발적 이전 처리). + +**핵심 판단들.** (a) "investments"를 증권·투자부동산·상품·금융계약·현금성 등으로 정의하고, 주거·사업용 부동산은 제외하며, 취득용 차입금은 차감하도록 했다. (b) QIB(Rule 144A)를 별도 입증 없이 QP로 간주했다. (c) 펀드 운용에 정통한 임직원(KE)은 자산요건 없이 "전원 QP" 판정에서 제외했다. (d) 펀드 지분을 사려고 급조된 회사는 구성원 전원이 QP일 때만 QP로 인정하도록 했다. (e) 기존 §3(c)(1) 펀드의 §3(c)(7) 전환 시 1996년 이전 보유자 처리를 정했다. + +**Decipher에서의 쓰임.** 직접 PASS/FAIL 규칙은 아니지만, 위 규칙들이 "왜 이렇게 정해졌는지"(입법·해석 취지)를 담고 있어 off-chain 검증 기준을 설계하거나 §12 Open Issue를 해석할 때 1차 근거로 쓴다. + +**No-Action Letters(실무 해석 — 변호사 확인 대상).** §3(c)(7)/QP의 회색지대를 다루는 SEC staff 자료다. No-Action Letter는 특정 사실관계에 한정되고 SEC를 법적으로 구속하지 않으므로, 본 문서는 쟁점만 정리하고 구체 결론은 §12로 보내 변호사가 원문을 직접 확인하도록 한다. 핵심 세 건: + +**(1) Davis Polk & Wardwell letter (1997-04-24, File No. 132-3, Ref. No. 97-177-CC).** 위 Rule들의 시행일(1997-06-09) 직전 상황을 다룬 전환기 letter다. 세 가지를 묻고 답했다 — ① 규칙 시행 전이라도 issuer가 §3(c)(7)에 의존해 QP에게 증권을 발행할 수 있는지(전환기 타이밍), ② 기존 §3(c)(1) 펀드를 §3(c)(7)로 전환할 때 어느 보유자가 사전 통지·환매 기회를 받아야 하는 beneficial owner인지, ③ Rule 2a51-1상 지배지분(controlling interest)과 투자자 차입금(investor indebtedness)을 investments 계산에서 어떻게 처리하는지. Decipher에 직접 적용되진 않지만 beneficial owner 산정·investments 차감 실무의 해석 근거다. -> **No-Action Letters(실무 해석 — 변호사 확인 대상).** 1차 리서치는 Family Company의 look-through 깊이에 관한 *1997 Sullivan & Cromwell* letter, Trust의 trustee+settlor 결합 처리에 관한 *1999 ABA Subcommittee* letter를 인용했다. 이들은 조문의 회색지대(예: "directly or indirectly" 소유의 범위, trust 결합 판정)에 관한 **실무 해석 자료**다. 다만 No-Action Letter는 사실관계 한정적이고 SEC를 구속하지 않으므로, 본 문서는 그 *존재와 다루는 쟁점*만 적고, 구체적 보유depth·결합 판정 결론은 **§12 Open Issues로 보내 변호사가 원문을 직접 확인**하도록 한다. +**(2) ABA Subcommittee on Private Investment Entities letter (1999-04-22).** 신탁(trust)과 가족 투자기구(family investment vehicle)의 QP 판단을 다룬 staff response다. 핵심은 이들을 들여다볼 때 settlor(위탁자)·trustee(수탁자)·contributor(출연자)·beneficiary(수익자) 중 누구의 QP 자격을 따져야 하는가이다(§2(a)(51)(A)(ii)·(iii) look-through 실무). A-09(look-through) 설계 시 참조하되 결론은 변호사 확인 대상이다. -### 3.4 Sub-요건 분해 매트릭스 +**(3) Goodwin, Procter & Hoar letter (1997-02-28).** 비-US(역외) 펀드의 §3(c)(7) 적용 맥락을 다룬 letter로, 역외 펀드 구조에서 QP 요건이 어떻게 작동하는지에 대한 보충 자료다. 국경 간 구조를 검토할 때만 참조한다. -위 조문·규칙을 실무 판정 path로 분해하면 다섯 갈래가 된다. 각 행은 *소리 내 읽어도 문장이 되도록* 풀어 썼다. +### 3.19 Sub-요건 분해 매트릭스 + +위 조문·규칙을 실무 판정 path로 분해하면 다섯 갈래가 된다. 각 행은 소리 내 읽어도 문장이 되도록 풀어 썼다. | 판정 path | 충족 조건(풀어 읽기) | 근거 | Decipher 복잡도 | |---|---|---|---| | (i) 자연인 | 자연인이고, 투자자산이 $5M 이상이다 | §2(a)(51)(A)(i) | 🟢 낮음 — 단일 증명 | | (ii) Family Company | 회사이고, 투자자산 $5M 이상이며, 가족관계로 묶인 2인 이상이 직간접 소유한다 | §2(a)(51)(A)(ii) | 🟡 중간 — look-through 필요 | | (iii) Trust | 신탁이고, 특정 증권 취득 목적으로 만든 게 아니며, 수탁자와 모든 위탁자가 각각 (i)·(ii)·(iv)에 해당한다 | §2(a)(51)(A)(iii) | 🔴 높음 — 복합 판정 | -| (iv) 기관·기타 | $25M 이상을 자기/타 QP 계산으로 재량 운용한다 | §2(a)(51)(A)(iv) | 🟡 중간 — 기관 검증 | +| (iv) $25M 재량운용 (any person) | $25M 이상을 자기/타 QP 계산으로 재량 운용한다 | §2(a)(51)(A)(iv) | 🟡 중간 — 재량운용 검증 | +| (QIB) | Rule 144A상 QIB(증권 $100M 이상 보유·재량운용하는 기관)이면 별도 자산 입증 없이 QP로 간주된다 | Rule 2a51-1(g)(1) | 🟢 낮음 — QIB 지위만 확인 | | (목적형성 회사) | 이 펀드 매수 목적으로 만든 회사라면, 모든 beneficial owner가 각각 QP여야 한다 | Rule 2a51-3 | 🔴 높음 — 전원 look-through | -| (KE 제외) | 펀드 임직원이면 자산요건 없이 *exclusively-QP 판정에서 제외*된다 | Rule 3c-5 | 🟡 중간 — 고용·관여 증명 | +| (KE 제외) | 펀드 임직원이면 자산요건 없이 exclusively-QP 판정에서 제외된다 | Rule 3c-5 | 🟡 중간 — 고용·관여 증명 | -해설: 위에서 (i)·(iv)는 비교적 단순(자산 금액 한 번 확인)하지만, (ii)·(iii)·목적형성 회사는 *그 안의 사람들*을 따라 들어가야 한다(look-through). KE는 자격을 *부여*하는 게 아니라 판정에서 *빼주는* 경로라는 점에서 결이 다르다. 이 다섯 갈래가 §4(어떤 증거가 필요한가)와 §5(어떻게 판정하는가)의 토대다. +**해설:** 위에서 (i)·(iv)는 비교적 단순(자산 금액 한 번 확인)하지만, (ii)·(iii)·목적형성 회사는 그 안의 사람들을 따라 들어가야 한다(look-through). KE는 자격을 부여하는 게 아니라 판정에서 빼주는 경로라는 점에서 결이 다르다. 이 다섯 갈래가 §4(어떤 증거가 필요한가)와 §5(어떻게 판정하는가)의 토대다. --- +### 3.20 ERC-3643 변환·claim.basis 총정리 + +A-13의 법조문이 실제 ERC-3643/T-REX 토큰에서 어떻게 구현되는지를 두 표로 정리한다. 첫 표는 각 조항이 ERC-3643의 어느 구성요소(claim topic · Identity Registry · Compliance 모듈 · forced-transfer 등)로 옮겨지는지, 둘째 표는 판정 결과가 어떤 `claim.basis`·플래그 값으로 기록되는지를 보여준다. 핵심 원칙 하나 — investments 계산·평가·차감·look-through 같은 법률 판단은 전부 off-chain에서 Trusted Issuer가 수행하고, 온체인에는 그 결과인 claim(서명된 자격 증명)만 올라간다. + +**표 1 — 조항 → ERC-3643 변환** + +| 조항 | ERC-3643 변환 | 간략 설명 | +|---|---|---| +| §2(a)(51)(A) QP 정의 | "QP 자격" claim topic을 매수인 ONCHAINID에 발급 | 4갈래(자연인·가족회사·신탁·$25M) 충족을 off-chain 판정 후 Trusted Issuer가 claim 서명 | +| §3(c)(7)(A) Condition 1 (전원 QP) | Identity Registry `isVerified()` + Compliance 모듈 | QP claim 없는 지갑으로의 transfer를 토큰이 거부 → "모든 보유자 QP"가 자동 강제됨 | +| §3(c)(7)(A) 비자발적 이전 예외 | forcedTransfer / recovery 경로 (일반 canTransfer와 분리) | 상속·이혼 등은 agent의 강제 이전으로 처리, 일반 transfer 게이트 우회 | +| Rule 2a51-1(a)(b) investments 정의 | off-chain 계산의 입력 — 온체인엔 결과만 | 자산 7종 분류는 Trusted Issuer가 오프체인에서 수행 | +| Rule 2a51-1(c)(d)(e)(f) 평가·차감 | off-chain valuation·차입금 차감 → claim 발급 조건 | FMV/원가 평가·취득용 차입금 차감도 전부 오프체인, 온체인엔 결과만 | +| Rule 2a51-1(h) reasonable belief | Trusted Issuer의 claim 서명 행위 = "합리적 신뢰"의 구현 | 안전항이 claim 신뢰 모델 전체의 법적 토대(§8·§10) | +| Rule 3c-5 KE 제외 | KE 전용 claim(자산요건 면제) | 펀드 임직원은 자산 입증 없이 QP claim 발급, coveredCompany=fundId 확인 | +| Rule 2a51-2·2a51-3 look-through | claim 발급 전 off-chain beneficial-owner 검증 | 법인·신탁 매수인은 구성원 전원 QP 확인 후에만 claim 발급(A-09) | +| Rule 3c-6 비자발적 이전 | forcedTransfer / recovery 함수와 정합 | 비자발적 이전분은 QP 간주 → 강제 이전 후에도 면제 유지 | +| Exchange Act §12(g) 2,000-holder | Compliance의 holder-count(maxHolders) 모듈 | 보유자 수를 온체인에서 카운팅, 2,000명 임계 추적·차단(부품 D-01) | +| JOBS Act §201(b)(2) | (온체인 구현 없음) — 발행 측 법적 전제 | 506(c) 일반청약이 공모가 아님을 보장, transfer 로직과 무관 | + +**표 2 — 조항·항목 → claim.basis / 플래그 값** + +| 조항·항목 | claim.basis / 플래그 값 | 간략 설명 | +|---|---|---| +| §2(a)(51)(A)(i) 자연인 | QP_NATURAL | investments ≥ $5M | +| §2(a)(51)(A)(ii) 가족회사 | QP_FAMILY_COMPANY | 가족 2인+ 소유, investments ≥ $5M | +| §2(a)(51)(A)(iii) 신탁 | QP_TRUST | trustee·settlor 전원이 (i)/(ii)/(iv) QP ((iii) 제외) | +| §2(a)(51)(A)(iv) $25M 재량운용 | QP_INSTITUTIONAL | any person, 재량운용 investments ≥ $25M (관용상 "기관"으로 부름) | +| Rule 2a51-1(g)(1) QIB | QP_QIB | QIB(Rule 144A)는 별도 입증 없이 QP 간주 | +| Rule 3c-5 KE | KNOWLEDGEABLE_EMPLOYEE_EXCLUSION | 펀드 임직원, 자산요건 없이 제외(+coveredCompany=fundId) | +| Manifest 펀드 면제 통로 | fundExemption = ICA_3C7 | 이 펀드가 §3(c)(7)로 면제됨을 명시 | +| investments 입증 여부 | investmentsVerified = true | $5M/$25M 자산 입증 완료 | +| Rule 2a51-1(d) 평가 방식 | valuationMethod = FMV / COST | 공정가치 또는 원가 | +| Rule 2a51-1(e)(f) 차입금 차감 | debtAdjustmentChecked = true | 취득용 차입금 차감 확인 | +| look-through 상태 | lookThroughStatus = COMPLETED / PENDING / FAILED | 법인·신탁 beneficial-owner 검증 상태(A-09) | + ## §4. ② 입력 사실 — 판정에 필요한 데이터 ### 4.1 본 부품이 판정하려면 어떤 증거가 필요한가 -쉽게 말하면, 본 부품이 "이 사람이 펀드를 살 자격이 있다"고 말하려면 네 가지 질문에 대한 답이 *증거(evidence)*로 모여 있어야 한다. +쉽게 말하면, 본 부품이 "이 사람이 펀드를 살 자격이 있다"고 말하려면 네 가지 질문에 대한 답이 *증거(evidence)로* 모여 있어야 한다. -1. **이 매수인은 어느 갈래인가?** (자연인·Family Company·Trust·기관·Knowledgeable Employee 중 무엇인가) -2. **그 갈래의 문턱을 넘는가?** (자연인·가족회사 $5M, 기관 $25M, 또는 KE의 직위·근속 요건) +1. **이 매수인은 어느 갈래인가?** (자연인·Family Company·Trust·$25M any person·QIB 중 무엇인가, 또는 Knowledgeable Employee 제외 대상인가) +2. **그 갈래의 문턱을 넘는가?** (자연인·가족회사 $5M, $25M any person, QIB 지위, 또는 KE의 직위·근속 요건) 3. **그 증거를 신뢰할 수 있는 기관이 검증·서명했는가?** (Trusted Issuer가 확인했는가) 4. **그 증거가 지금도 유효한가?** (취득 시점 기준으로 너무 오래되지 않았는가) -이 네 답을 모으는 주체는 **Trusted Issuer**(KYC·due diligence를 수행하는 신뢰기관)이고, 모은 결과는 **on-chain claim**(블록체인에 기록된 서명 증명서) 형태로 발행되어 DEX가 조회할 수 있게 된다. 전체 정보 흐름은 *frontend 자기신고 → Trusted Issuer 실사 → on-chain claim 발급 → DEX가 거래 직전 조회*다. +이 네 답을 모으는 주체는 **Trusted Issuer**(KYC·due diligence를 수행하는 신뢰기관)이고, 모은 결과는 **on-chain claim**(블록체인에 기록된 서명 증명서) 형태로 발행되어 DEX가 조회할 수 있게 된다. 전체 정보 흐름은 frontend 자기신고 → Trusted Issuer 실사 → on-chain claim 발급 → DEX가 거래 직전 조회다. ### 4.2 Data field — DEX가 실제로 읽는 항목 -> 아래 필드 이름·ONCHAINID Topic 번호 등은 Decipher의 ERC-3643 호환 구현을 전제한 *예시 스펙*이다(구현 시 확정). 각 행에 "이 필드가 왜 필요한가"를 함께 적었다. +> 아래 필드 이름·ONCHAINID Topic 번호 등은 Decipher의 ERC-3643 호환 구현을 전제한 예시 스펙이다(구현 시 확정). 각 행에 "이 필드가 왜 필요한가"를 함께 적었다. | 필드 | 유형 | 출처 | 무엇을 말해주나 | |---|---|---|---| -| `claim.basis` | enum | Trusted Issuer claim | 매수인이 어느 갈래인지(QP_NATURAL·QP_FAMILY·QP_TRUST·QP_OTHER·KNOWLEDGEABLE_EMPLOYEE) | +| `claim.basis` | enum | Trusted Issuer claim | 매수인이 어느 갈래인지(QP_NATURAL·QP_FAMILY_COMPANY·QP_TRUST·QP_INSTITUTIONAL·KNOWLEDGEABLE_EMPLOYEE_EXCLUSION) | | `claim.verifiedAt` | timestamp | Trusted Issuer claim | claim이 언제 발급됐는지(유효기간 판정용) | | `claim.issuer` | address | Trusted Issuer claim | 어느 Trusted Issuer가 발급했는지(신뢰성 확인용) | -| `claim.coveredCompany` | string | Trusted Issuer claim(KE 전용) | KE가 어느 펀드 소속인지 명시 | +| `claim.coveredCompany` | string | Trusted Issuer claim (KE 전용) | KE가 어느 펀드 소속인지 명시 | | `claim.signature` | bytes | Trusted Issuer claim | 위·변조 방지용 서명 | | `claim.investmentsValue` | uint256(선택) | Trusted Issuer claim | 문턱 충족 여부(금액 자체는 Trusted Issuer가 사전 판정, DEX는 "문턱 이상" 신뢰) | -| `lookThroughChain[]` | array | Trusted Issuer claim(가족·신탁 전용) | 하위 소유자들의 QP 증명 참조(look-through cascade용) | +| `lookThroughChain[]` | array | Trusted Issuer claim (가족·신탁 전용) | 하위 소유자들의 QP 증명 참조(look-through cascade용) | | `block.timestamp` | timestamp | blockchain | 거래 확정 시점(취득 시점 스냅샷) | -쉽게 말하면: DEX는 매수인의 자산 명세서를 직접 들여다보지 않는다. 대신 **"신뢰기관이 *이미 확인했다*고 서명한 증명서"**를 본다. 그 증명서에 "어느 갈래(basis)인지, 언제 확인했는지(verifiedAt), 누가 보증하는지(issuer)"가 담긴다. +**쉽게 말하면:** DEX는 매수인의 자산 명세서를 직접 들여다보지 않는다. 대신 **"신뢰기관이 이미 확인했다고 서명한 증명서"를** 본다. 그 증명서에 "어느 갈래(basis)인지, 언제 확인했는지(verifiedAt), 누가 보증하는지(issuer)"가 담긴다. ### 4.3 수집 경로 — 5단계 흐름 @@ -315,41 +611,69 @@ non-QP 1명이 BUIDL 매수 2단계 증거 제출 매수인 → Trusted Issuer에 증빙 제출 (예: brokerage statement·부동산 감정서·고용증명·trust deed) ↓ -3단계 Off-chain 실사 Trusted Issuer가 Rule 2a51-1·3c-5에 따라 법적 판단 + - reasonable belief(합리적 신뢰) 형성 +3단계 Off-chain 실사 Trusted Issuer가 Rule 2a51-1·3c-5에 따라 법적 판단 + + reasonable belief(합리적 신뢰) 형성 ↓ 4단계 On-chain claim 발급 Trusted Issuer가 서명한 claim을 블록체인에 기록 ↓ 5단계 DEX 거래 직전 검사 DEX가 claim 조회 → 본 부품 판정 → PASS 또는 FAIL code ``` -각 단계 누가·무엇을·결과: **1단계**(매수인이, 자기 갈래를 고르고, 어떤 증거를 낼지 분기가 정해진다) → **2단계**(매수인이, 증빙 서류를 제출하고, Trusted Issuer 손에 자료가 모인다) → **3단계**(Trusted Issuer가, 법적 판단을 하고, 합리적 신뢰가 형성된다) → **4단계**(Trusted Issuer가, 서명 claim을 올리고, 온체인에 조회 가능한 증명서가 생긴다) → **5단계**(DEX가, claim을 확인하고, 통과/거절이 결정된다). +**각 단계 누가·무엇을·결과:** 1단계(매수인이, 자기 갈래를 고르고, 어떤 증거를 낼지 분기가 정해진다) → 2단계(매수인이, 증빙 서류를 제출하고, Trusted Issuer 손에 자료가 모인다) → 3단계(Trusted Issuer가, 법적 판단을 하고, 합리적 신뢰가 형성된다) → 4단계(Trusted Issuer가, 서명 claim을 올리고, 온체인에 조회 가능한 증명서가 생긴다) → 5단계(DEX가, claim을 확인하고, 통과/거절이 결정된다). -**핵심**: DEX는 5단계에서 *결정론적 확인*만 한다. 가족관계의 적법성, trust 설립목적의 남용 여부, KE의 실질 관여 같은 *판단*은 모두 3단계에서 Trusted Issuer가 off-chain으로 하고, 그 결과를 claim에 *부호화(encode)*한다. 이 분리가 왜 불가피한지는 §5.5와 §8에서 설명한다. +**핵심:** DEX는 5단계에서 결정론적 확인만 한다. 가족관계의 적법성, trust 설립목적의 남용 여부, KE의 실질 관여 같은 판단은 모두 3단계에서 Trusted Issuer가 off-chain으로 하고, 그 결과를 claim에 *부호화(encode)한다*. 이 분리가 왜 불가피한지는 §5.5와 §8에서 설명한다. ### 4.4 갈래별 증거 예시 -| 갈래 | 필요한 증거(예시) | 왜 이게 증거가 되나 | +| 갈래 | 필수 확인 항목(전부 필요) | 무엇을 입증하나 | |---|---|---| -| 자연인 | brokerage statement·부동산 감정서·예금잔고·상품계좌 명세 | investments $5M 이상을 FMV로 입증 | -| Family Company | 위 + 지분구조도·가족관계 증빙 + 하위 소유자 look-through 자료 | 회사 자산 $5M + 가족관계 + 구성원 QP 여부 확인 | -| Trust | trust deed·수탁자/위탁자 신원 + 각자의 QP 증빙 + 설립일(남용 방지) | 결합요건과 "특정목적 형성 아님"을 입증 | -| 기관·기타 | 법인 등록·재량운용 권한 증빙·$25M investments 증빙 | $25M + 재량운용 요건 입증 | -| Knowledgeable Employee | 고용계약·직무기술서·근속 증빙·투자활동 관여 자기진술 + 신뢰기관 검증 | Rule 3c-5 직위(i) 또는 관여+12개월(ii) 충족 입증 | +| (공통 — 모든 갈래) | ① 신원확인(KYC) · ② Trusted Issuer가 서명한 QP claim · ③ claim 발급일(freshness, §5.0/A-11) · ④ 발급기관이 Trusted Issuer Registry에 등재 | 모든 갈래의 전제 — 서명·신뢰·신선도 | +| 자연인 (QP_NATURAL) | ① 투자자산 명세(brokerage·예금·상품계좌 등) · ② 각 자산 FMV 평가 · ③ 취득용 차입금 차감 내역 | investments ≥ $5M (차감 후 순액) | +| 가족회사 (QP_FAMILY_COMPANY) | ① 회사 투자자산 명세·FMV · ② 지분구조도 · ③ 가족관계 증빙(2인 이상) · ④ 하위 소유자 look-through 자료 | 회사 자산 $5M + 가족 2인+ 직간접 소유 + 구성원 QP | +| 신탁 (QP_TRUST) | ① trust deed · ② 설립일(특정 증권 취득 목적 형성 아님) · ③ 수탁자 신원·QP 증빙 · ④ 모든 위탁자 신원·QP 증빙 | 결합요건(수탁자+전 위탁자가 (i)/(ii)/(iv) QP) + 비-특정목적 | +| $25M 재량운용 (QP_INSTITUTIONAL) | ① 법인 등록 · ② 재량운용 권한 증빙 · ③ $25M 투자자산·FMV·차감 | any person이 $25M 이상 재량 운용 | +| QIB (QP_QIB) | ① Rule 144A QIB 지위 증빙(보유 증권 $100M 이상 재량운용; 딜러는 $25M 이상 자기계산) | QIB = QP 간주, 자산 재계산 불요 | +| Knowledgeable Employee (KE 제외) | ① 고용계약·직무기술서 · ② 근속·직위 증빙 · ③ 투자활동 관여 자기진술 · ④ 소속 펀드(coveredCompany) 일치 · ⑤ 신뢰기관 검증 | Rule 3c-5 직위(i) 또는 관여+12개월(ii) | --- ## §5. ③ 판정 로직 — 어떻게 PASS/FAIL이 결정되는가 +### 5.0 판정 흐름 플로우차트 + +아래 그림은 §5.2의 `check_A_13` pseudocode를 흐름으로 옮긴 것이다 — claim 신선도 확인부터 basis 갈래 분기(KE·QIB·자연인/$25M·가족회사/신탁), 임계·look-through 판정, (h) reasonable belief, 그리고 PASS·각 FAIL code 반환까지. + +![그림 5.0 — A-13 판정 로직 흐름: 입력에서 PASS/FAIL/REVIEW code까지](fig/fig50.png) + +**범례.** 파랑 = 핵심 판정 경로 · 회색 = 분기 노드 · 초록 = PASS(또는 KE 제외 통과) · 빨강 = FAIL code · 주황 = 수동 검토(REVIEW). + ### 5.1 전체 흐름 (사람 말로) 증거(claim)가 모인 뒤, 온체인 코드는 다음 순서로 확인한다 — ① claim이 존재하는가 → ② 위조 아닌가·신뢰기관이 발급했는가 → ③ 유효기간이 지나지 않았는가 → ④ 어느 갈래인가에 따라 갈래별 추가 확인 → ⑤ PASS 또는 구체적 FAIL code 반환. ### 5.2 Pseudocode + 단계별 해설 +**검사 순서 한눈에 보기 — 왜 이 순서인가** + +| 순서 | 검사 | 무엇을 확인 | 실패 코드 | 비용 | 왜 이 위치인가 | +|---|---|---|---|---|---| +| 1 | claim 존재 | 매수인 지갑에 QP claim이 있나 | FAIL_NOT_QP | 매우 낮음 | claim이 없으면 판정할 대상 자체가 없음 | +| 2 | 진위(서명·발급기관) | 서명 유효 + 발급기관이 Trusted Issuer Registry 등재 | FAIL_NOT_QP(위조) · FAIL_UNTRUSTED_QP_CLAIM_ISSUER | 낮음 (암호 검증) | 위조면 claim 안의 verifiedAt·basis를 신뢰 불가 → 진위가 모든 하류 검사의 전제 | +| 3 | 신선도(freshness) | block.timestamp − verifiedAt ≤ 상한(1년 권고) | FAIL_QP_CLAIM_EXPIRED | 낮음 (timestamp 비교) | 싸고 탈락 잘 되는 게이트 → 비싼 look-through 전에 fail-fast | +| 4 | 갈래 분기 + look-through | claim.basis별 판정(가족·신탁은 구성원 전원 QP cascade) | FAIL_FAMILY_CO_NOT_QP 등 | 높음 (look-through cascade) | 가장 비싼 단계라 맨 뒤 — 1~3을 통과한 claim에만 수행 | + +두 그림이 같은 순서를 다르게 그릴 뿐임을 보이는 대조표: + +| 검사 | §5.2 pseudocode | §5.0 흐름도(fig50) | +|---|---|---| +| 1 존재 · 2 진위 | 1·2단계로 명시 | "입력"에 묶어 표현 | +| 3 신선도 | 3단계 | 입력 직후 첫 게이트 | +| 4 갈래·look-through | 4단계 | basis 분기 노드 | + +→ 두 표현 모두 **신선도가 갈래보다 앞** = 동일 순서다. fig50은 존재·진위를 "입력"에 합쳐 freshness가 첫 게이트로 보이고, §5.2는 그 둘을 따로 단계로 드러낼 뿐이다. 핵심 원리는 둘 다 같다 — **싼 전제(존재·진위·신선도)로 fail-fast한 뒤, 비싼 look-through는 맨 마지막**. + ``` function check_A_13(prospective_buyer, asset, block): - # 1단계: claim 조회 claim = ONCHAINID.getClaim(prospective_buyer, Topic.QP) if claim == null: @@ -357,30 +681,32 @@ function check_A_13(prospective_buyer, asset, block): # 2단계: 서명·발급기관 신뢰 확인 if not Cryptography.verify(claim.signature, claim.issuer): - return FAIL_NOT_QP # 위조 의심 + return FAIL_NOT_QP # 위조 의심 if not TrustedIssuerRegistry.contains(claim.issuer): return FAIL_UNTRUSTED_QP_CLAIM_ISSUER # 3단계: 유효기간(취득 시점 스냅샷) - freshness_cap = 1 year # Decipher 권고(5년 보수 옵션 가능) + freshness_cap = 1 year # Decipher 권고(5년 보수 옵션 가능) if claim.verifiedAt < block.timestamp - freshness_cap: return FAIL_QP_CLAIM_EXPIRED # 4단계: 갈래(basis) 분기 - if claim.basis == QP_NATURAL: # $5M은 Trusted Issuer가 사전 판정 + if claim.basis == QP_NATURAL: # $5M은 Trusted Issuer가 사전 판정 return PASS - elif claim.basis == QP_FAMILY: # 가족회사 → look-through + elif claim.basis == QP_FAMILY_COMPANY: # 가족회사 → look-through if not check_A_09(claim.lookThroughChain): return FAIL_QP_LOOKTHROUGH_NOT_COMPLETED if A09.in_progress else FAIL_FAMILY_CO_NOT_QP return PASS - elif claim.basis == QP_TRUST: # 수탁자+모든 위탁자 QP여야 + elif claim.basis == QP_TRUST: # 수탁자+모든 위탁자 QP여야 if not check_trust_qp(claim.lookThroughChain): return FAIL_TRUST_DISQUALIFIED return PASS - elif claim.basis == QP_OTHER: # $25M·재량운용은 사전 판정 + elif claim.basis == QP_INSTITUTIONAL: # (iv) $25M — 법인이면 Trusted Issuer가 급조(2a51-3) 확인 후 발급 return PASS - elif claim.basis == KNOWLEDGEABLE_EMPLOYEE: # 소속 펀드 일치 확인 + elif claim.basis == QP_QIB: # Rule 2a51-1(g)(1) — QIB는 QP 간주 + return PASS + elif claim.basis == KNOWLEDGEABLE_EMPLOYEE_EXCLUSION: # 소속 펀드 일치 확인 if claim.coveredCompany != asset.fund_identifier: return FAIL_KNOWLEDGEABLE_EMP_NOT_QUALIFIED return PASS @@ -388,43 +714,43 @@ function check_A_13(prospective_buyer, asset, block): return REVIEW_QP_UNCERTAIN ``` -- **1단계 해설**: 매수인 주소에 연결된 QP claim을 찾는다. 아직 Trusted Issuer에게 claim을 받지 않았다면 여기서 `FAIL_NOT_QP`. 매수인은 frontend가 안내하는 대로 Trusted Issuer로 가서 KYC를 시작하면 된다. -- **2단계 해설**: 서명을 검증하고, 발급기관이 Decipher가 신뢰하는 명부(Trusted Issuer Registry)에 있는지 본다. 서명이 깨졌으면 위조 의심으로 `FAIL_NOT_QP`, 서명은 멀쩡한데 발급기관이 명부에 없으면 `FAIL_UNTRUSTED_QP_CLAIM_ISSUER`(대개 명부 갱신 지연 같은 운영 이슈라 관리자에게 알림). -- **3단계 해설**: 여기서 §3(c)(7)(A)의 **"at the time of acquisition"**(취득 시점) 요건을 본다. claim 발급 후 1년이 지났으면 `FAIL_QP_CLAIM_EXPIRED`. 취득 시점에 유효한 KYC가 있어야 한다는 요건을 1년 cap으로 구현한 것이다(어느 블록 timestamp를 기준으로 잡을지는 §5.4). -- **4단계 해설**: claim의 갈래에 따라 분기한다. 자연인·기관은 금액 판정을 Trusted Issuer가 이미 했으므로 통과. 가족회사·신탁은 *그 안의 사람들*을 확인하는 cascade가 돈다. KE는 *소속 펀드(coveredCompany)가 지금 사려는 펀드와 같은지*를 확인해, 남의 펀드에 KE 자격을 끌어다 쓰지 못하게 막는다. +- **1단계 해설:** 매수인 주소에 연결된 QP claim을 찾는다. 아직 Trusted Issuer에게 claim을 받지 않았다면 여기서 `FAIL_NOT_QP`. 매수인은 frontend가 안내하는 대로 Trusted Issuer로 가서 KYC를 시작하면 된다. +- **2단계 해설:** 서명을 검증하고, 발급기관이 Decipher가 신뢰하는 명부(Trusted Issuer Registry)에 있는지 본다. 서명이 깨졌으면 위조 의심으로 `FAIL_NOT_QP`, 서명은 멀쩡한데 발급기관이 명부에 없으면 `FAIL_UNTRUSTED_QP_CLAIM_ISSUER`(대개 명부 갱신 지연 같은 운영 이슈라 관리자에게 알림). +- **3단계 해설:** 여기서 §3(c)(7)(A)의 "at the time of acquisition"(취득 시점) 요건을 본다. claim 발급 후 1년이 지났으면 `FAIL_QP_CLAIM_EXPIRED`. 취득 시점에 유효한 KYC가 있어야 한다는 요건을 1년 cap으로 구현한 것이다(어느 블록 timestamp를 기준으로 잡을지는 §5.4). +- **4단계 해설:** claim의 갈래에 따라 분기한다. 자연인·$25M(any person)은 금액 판정을 Trusted Issuer가 이미 했고 QIB는 간주이므로 통과. **단 (iv) 매수인이 *법인*이면, 그 사전 판정에 Rule 2a51-3 급조 확인 — formedForSpecificPurpose=false, 또는 beneficial owner 전원 QP — 이 반드시 포함되어야 하며 '법인 $25M → 무조건 PASS'로 끝내면 안 된다(§3.16).** 가족회사·신탁은 그 안의 사람들을 확인하는 cascade가 돈다. KE는 소속 펀드(coveredCompany)가 지금 사려는 펀드와 같은지를 확인해, 남의 펀드에 KE 자격을 끌어다 쓰지 못하게 막는다. ### 5.3 Threshold 매트릭스 | 항목 | 값 | 근거 | |---|---|---| -| 자연인 investments | **≥ $5M (inclusive — 정확히 $5M이면 통과)** | §2(a)(51)(A)(i) "not less than" | -| Family Company investments | **≥ $5M (inclusive)** | §2(a)(51)(A)(ii) "not less than" | -| 기관·기타 investments | **≥ $25M (inclusive)** | §2(a)(51)(A)(iv) "not less than" | -| Knowledgeable Employee 근속 | **≥ 12개월**(직위형 KE는 근속요건 없음) | Rule 3c-5(a)(4)(ii) | -| Claim 유효기간 cap | **1년**(권고)·5년(보수 옵션) | 취득시점 요건 + Claim Freshness 부품(A-11) 조율 | +| 자연인 | investments ≥ $5M (inclusive — 정확히 $5M이면 통과) | §2(a)(51)(A)(i) "not less than" | +| Family Company investments | ≥ $5M (inclusive) | §2(a)(51)(A)(ii) "not less than" | +| $25M 재량운용 | investments ≥ $25M (inclusive) | §2(a)(51)(A)(iv) "not less than" | +| Knowledgeable Employee 근속 | ≥ 12개월(직위형 KE는 근속요건 없음) | Rule 3c-5(a)(4)(ii) | +| Claim 유효기간 cap | 1년(권고)·5년(보수 옵션) | 취득시점 요건 + Claim Freshness 부품(A-11) 조율 | -**inclusive 해석 reasoning**: 조문이 *"not less than $5,000,000"*(5백만 달러보다 적지 않은)으로 쓰였다. 영어 법조문에서 "not less than"은 **≥(이상, inclusive)**으로 읽는다. 따라서 *정확히 $5M*인 경우는 통과다. §7.3 경계 테스트에서 명시적으로 확인한다. +**inclusive 해석 reasoning:** 조문이 "not less than $5,000,000"(5백만 달러보다 적지 않은)으로 쓰였다. 영어 법조문에서 "not less than"은 **≥(이상, inclusive)으로** 읽는다. 따라서 정확히 $5M인 경우는 통과다. §7.3 경계 테스트에서 명시적으로 확인한다. ### 5.4 Time-of-acquisition — 블록체인의 어느 시점을 "취득"으로 보나 -§3(c)(7)(A)는 판정 기준 시점을 "at the time of acquisition"으로 못 박는다. 전통 금융에서는 계약 체결 시점이 명확하지만, 블록체인 DEX에는 시점 후보가 여럿이다. 비유하면 — *주문서에 사인한 순간*과 *등기소에 등기가 찍힌 순간* 중 어느 것을 "취득"으로 볼 것인가의 문제다. +§3(c)(7)(A)는 판정 기준 시점을 "at the time of acquisition"으로 못 박는다. 전통 금융에서는 계약 체결 시점이 명확하지만, 블록체인 DEX에는 시점 후보가 여럿이다. 비유하면 — 주문서에 사인한 순간과 등기소에 등기가 찍힌 순간 중 어느 것을 "취득"으로 볼 것인가의 문제다. | 시점 후보 | "취득 시점" 부합도 | 운영 리스크 | |---|---|---| | Trade matching time(오프체인 주문 체결) | 불일치 — 아직 정산 미확정 | 높음(정산 실패 가능) | | Transaction proposed time(mempool 진입) | 불일치 — 포함 보장 없음 | 높음(re-org·교체 가능) | -| **Transaction confirmed time(블록 포함)** | **최적 — 법적 "execution"에 가장 부합** | 낮음(단일 블록 확정) | +| Transaction confirmed time(블록 포함) | **최적** — 법적 "execution"에 가장 부합 | 낮음(단일 블록 확정) | | Transaction finalized time(완결성 확보) | 보수적 부합 — 필요 이상 늦음 | 가장 낮음 | -**Decipher 권고: block confirmation timestamp 기준.** 거래가 블록에 포함되어 확정된 시점의 `block.timestamp`를 취득 시점으로 본다. 경계 거래(예: claim 만료 30초 전 매칭 → 30초 후 confirmation)에서는 이 기준상 `FAIL_QP_CLAIM_EXPIRED`가 날 수 있으므로, frontend에서 매칭 직전 조기 안내·재발급 유도를 권고한다(UX, §11). *정확히 어느 timestamp가 법적 "acquisition time"인지는 변호사 확인 대상이다*(§12). +**Decipher 권고:** block confirmation timestamp 기준. 거래가 블록에 포함되어 확정된 시점의 `block.timestamp`를 취득 시점으로 본다. 경계 거래(예: claim 만료 30초 전 매칭 → 30초 후 confirmation)에서는 이 기준상 `FAIL_QP_CLAIM_EXPIRED`가 날 수 있으므로, frontend에서 매칭 직전 조기 안내·재발급 유도를 권고한다(UX, §11). 정확히 어느 timestamp가 법적 "acquisition time"인지는 변호사 확인 대상이다(§12). ### 5.5 비결정성을 결정성으로 — 본 부품 구현의 본질 -여기에 결정적인 법-기술 통찰이 있다. **QP 판정은 순수한 결정론적 계산이 아니라, 사람의 판단(judgment)을 내포한다.** 조문 곳곳이 판단을 요구한다 — §2(a)(51)(A)(ii)의 "가족관계로 묶였는가"는 *사실관계 판단*, (iii)의 "특정 증권 취득 목적으로 만든 게 아닌가"는 *의도 판단*, Rule 2a51-1(b)(1)의 "지배·공동지배 관계인가"는 *지배구조 판단*, (d)의 "최근 FMV는 얼마인가"는 *평가 판단*이다. +여기에 결정적인 법-기술 통찰이 있다. **QP 판정은 순수한 결정론적 계산이 아니라, 사람의 판단(judgment)을 내포한다.** 조문 곳곳이 판단을 요구한다 — §2(a)(51)(A)(ii)의 "가족관계로 묶였는가"는 사실관계 판단, (iii)의 "특정 증권 취득 목적으로 만든 게 아닌가"는 의도 판단, Rule 2a51-1(b)(1)의 "지배·공동지배 관계인가"는 지배구조 판단, (d)의 "최근 FMV는 얼마인가"는 평가 판단이다. -이 판단들은 온체인 코드로 재현할 수 없다. 그래서 **Rule 2a51-1(h)의 reasonable belief 안전항**에 기대어, Trusted Issuer가 off-chain에서 실사·판단을 하고 그 결과를 claim으로 부호화하는 구조가 불가피하다. 즉 **본 부품의 구현 본질은 "비결정적 법적 판단을 결정적 증명서 확인으로 캡슐화하는 것"**이다. 온체인 로직은 "claim이 있는가·서명이 유효한가·발급기관을 믿는가·기간이 지났는가"라는 결정론적 확인만 하지만, 그 claim 뒤에는 Trusted Issuer의 비결정론적 판단이 담겨 있다. +이 판단들은 온체인 코드로 재현할 수 없다. 그래서 Rule 2a51-1(h)의 reasonable belief 안전항에 기대어, Trusted Issuer가 off-chain에서 실사·판단을 하고 그 결과를 claim으로 부호화하는 구조가 불가피하다. 즉 **본 부품의 구현 본질은 "비결정적 법적 판단을 결정적 증명서 확인으로 캡슐화하는 것"이다**. 온체인 로직은 "claim이 있는가·서명이 유효한가·발급기관을 믿는가·기간이 지났는가"라는 결정론적 확인만 하지만, 그 claim 뒤에는 Trusted Issuer의 비결정론적 판단이 담겨 있다. -쉽게 말하면(비유): 판사가 판결문에 서명한다. 서명된 판결문 *자체*는 명확하고 결정적인 문서다 — 하지만 그 판결에 이르는 과정은 판사의 복잡한 판단·형량의 결과다. 본 부품도 똑같다. Trusted Issuer의 서명된 claim은 기계가 명확히 확인할 수 있는 결정적 문서지만, 그 발급 과정은 사람의 법적 판단이다. **기계는 판결문의 위·변조만 확인하고, 판결 자체는 사람(Trusted Issuer)이 한다.** +**쉽게 말하면(비유):** 판사가 판결문에 서명한다. 서명된 판결문 자체는 명확하고 결정적인 문서다 — 하지만 그 판결에 이르는 과정은 판사의 복잡한 판단·형량의 결과다. 본 부품도 똑같다. Trusted Issuer의 서명된 claim은 기계가 명확히 확인할 수 있는 결정적 문서지만, 그 발급 과정은 사람의 법적 판단이다. 기계는 판결문의 위·변조만 확인하고, 판결 자체는 사람(Trusted Issuer)이 한다. --- @@ -432,7 +758,7 @@ function check_A_13(prospective_buyer, asset, block): ### 6.1 전체 흐름 (사람 말로) -검사가 실패하면 거래가 그 자리에서 차단되거나(reject), 일부 경우엔 대기 상태로 전환된다(suspend). 어떤 종류의 실패인지에 따라 ① 매수인에게 보이는 메시지, ② 매수인이 해야 할 다음 행동, ③ Decipher 측 조치가 달라진다. 아래 표는 "기술 코드"가 아니라 *시나리오 풀이*로 읽으면 된다. +검사가 실패하면 거래가 그 자리에서 차단되거나(reject), 일부 경우엔 대기 상태로 전환된다(suspend). 어떤 종류의 실패인지에 따라 ① 매수인에게 보이는 메시지, ② 매수인이 해야 할 다음 행동, ③ Decipher 측 조치가 달라진다. 아래 표는 "기술 코드"가 아니라 시나리오 풀이로 읽으면 된다. ### 6.2 Failure codes 9종 @@ -442,39 +768,39 @@ function check_A_13(prospective_buyer, asset, block): | `FAIL_QP_CLAIM_EXPIRED` | verifiedAt < (block.timestamp − 유효기간) | 증명서가 오래되어 만료(1년 경과) | Trusted Issuer에 갱신 요청 | frontend에 갱신 안내 | | `FAIL_UNTRUSTED_QP_CLAIM_ISSUER` | 발급기관이 신뢰 명부에 없음 | Decipher가 신뢰하지 않는 기관이 발급 | 다른 Trusted Issuer에서 재발급 | 관리자 알림·명부 갱신 검토 | | `FAIL_QP_LOOKTHROUGH_REQUIRED` | 가족회사·신탁인데 하위 소유자 정보 없음 | 들여다볼 구성원 자료가 비어 있음 | 추가 KYC 자료 제출 | Trusted Issuer가 look-through 자료 보강 | -| `FAIL_QP_LOOKTHROUGH_NOT_COMPLETED` | look-through 진행 중(일부 구성원 미완료) | 구성원 일부의 KYC가 아직 안 끝남 | 기다리거나 해당 구성원 재촉 | 거래 **suspend**(거절이 아닌 대기) | +| `FAIL_QP_LOOKTHROUGH_NOT_COMPLETED` | look-through 진행 중(일부 구성원 미완료) | 구성원 일부의 KYC가 아직 안 끝남 | 기다리거나 해당 구성원 재촉 | 거래 suspend(거절이 아닌 대기) | | `FAIL_TRUST_DISQUALIFIED` | 수탁자·위탁자 중 QP 미충족자 있음 | 신탁 결합요건을 못 맞춤 | 신탁 자격·구조 재검토 | 신탁 측에 상세 안내 | | `FAIL_FAMILY_CO_NOT_QP` | 가족회사 구성원 중 QP 미충족자 있음 | 한 명이라도 자격 미달이면 전체 탈락 | 해당 소유자 추가 KYC 또는 출자 조정 | 가족회사 측에 상세 안내 | | `FAIL_KNOWLEDGEABLE_EMP_NOT_QUALIFIED` | 소속펀드 불일치·근속/관여 미충족 | KE 요건을 못 맞춤 | KE 자격 재검증 또는 다른 경로 시도 | HR 측 증빙 보강 | | `REVIEW_QP_UNCERTAIN` | 자동 판정 불가(경계 케이스·명부 갱신 중 등) | 기계가 결정할 수 없는 복잡 케이스 | 수동 검토 결과 대기 | Trust Operations 큐로 라우팅 | -해설: 대부분의 실패는 *되돌릴 수 있는* 상태다. `FAIL_NOT_QP`나 `FAIL_QP_CLAIM_EXPIRED`는 매수인이 KYC를 시작·갱신하면 풀린다. 반면 `FAIL_FAMILY_CO_NOT_QP`·`FAIL_TRUST_DISQUALIFIED`는 *구조 자체*의 문제라 구성원 보강이나 구조 변경이 필요하다. `FAIL_QP_LOOKTHROUGH_NOT_COMPLETED`만 유독 *거절이 아닌 대기(suspend)*인데, 이는 "자격이 없다"가 아니라 "아직 확인 중"이기 때문이다 — 시간이 지나 구성원 KYC가 끝나면 같은 거래가 통과될 수 있다. +**해설:** 대부분의 실패는 되돌릴 수 있는 상태다. `FAIL_NOT_QP`나 `FAIL_QP_CLAIM_EXPIRED`는 매수인이 KYC를 시작·갱신하면 풀린다. 반면 `FAIL_FAMILY_CO_NOT_QP`·`FAIL_TRUST_DISQUALIFIED`는 구조 자체의 문제라 구성원 보강이나 구조 변경이 필요하다. `FAIL_QP_LOOKTHROUGH_NOT_COMPLETED`만 유독 *거절이 아닌 대기(suspend)인데*, 이는 "자격이 없다"가 아니라 "아직 확인 중"이기 때문이다 — 시간이 지나 구성원 KYC가 끝나면 같은 거래가 통과될 수 있다. ### 6.3 Manual Review Path (REVIEW_QP_UNCERTAIN 처리) 자동 판정이 불가능한 경계 케이스는 사람이 처리한다. 흐름은 이렇다. -1. 거래가 **suspend**(거절이 아닌 대기) 상태로 전환된다. +1. 거래가 suspend(거절이 아닌 대기) 상태로 전환된다. 2. `REVIEW_QP_UNCERTAIN`이 수동 검토 큐에 쌓인다. -3. **Decipher Trust Operations team**이 큐에서 집어 든다(목표 응답시간 SLA 24~72시간 — 운영 정책으로 확정 대상). +3. Decipher Trust Operations team이 큐에서 집어 든다(목표 응답시간 SLA 24~72시간 — 운영 정책으로 확정 대상). 4. 팀이 추가 증거를 요청하거나, 경계의 법적 판단을 하거나, 필요하면 변호사 자문으로 escalate한다. 5. 최종 결정(통과 또는 명시적 FAIL code)을 내리고, 통과면 별도 claim 발급으로 반영한다. 6. 모든 결정과 근거(reasoning)를 Compliance Log에 남긴다(off-chain audit trail). -누가 결정하나: 최종 판단 권한은 **추가 실사를 한 Trusted Issuer 또는 Decipher Trust Operations**에 있고, 그 결정은 *새 claim*으로 온체인에 반영되어 다음 거래부터 자동 판정된다. +**누가 결정하나:** 최종 판단 권한은 추가 실사를 한 Trusted Issuer 또는 Decipher Trust Operations에 있고, 그 결정은 새 claim으로 온체인에 반영되어 다음 거래부터 자동 판정된다. ### 6.4 Error message — 매수인 노출용 vs 내부 기록용 분리 -개인정보 보호와 운영 진단을 분리한다. 매수인에게는 *일반적이고 행동 가능한* 메시지만 보여주고, 구체적 실패 사유는 내부 audit log에만 남긴다. +개인정보 보호와 운영 진단을 분리한다. 매수인에게는 일반적이고 행동 가능한 메시지만 보여주고, 구체적 실패 사유는 내부 audit log에만 남긴다. | Code | 매수인 노출(frontend) | 내부 기록(audit) | |---|---|---| -| FAIL_NOT_QP | "QP 자격 확인이 필요합니다. KYC를 진행해 주세요." | claim 부재 timestamp + 매수인 주소 | -| FAIL_QP_CLAIM_EXPIRED | "KYC 인증이 만료되었습니다. 갱신해 주세요." | claim.verifiedAt + 경과 일수 | -| FAIL_QP_LOOKTHROUGH_NOT_COMPLETED | "추가 정보 확인 중입니다. 잠시 후 다시 시도해 주세요." | 미완료 구성원 목록 | -| FAIL_TRUST_DISQUALIFIED | "Trust 구조 검토가 필요합니다. KYC팀에 문의해 주세요." | 미충족 수탁자/위탁자 목록 | +| `FAIL_NOT_QP` | "QP 자격 확인이 필요합니다. KYC를 진행해 주세요." | claim 부재 timestamp + 매수인 주소 | +| `FAIL_QP_CLAIM_EXPIRED` | "KYC 인증이 만료되었습니다. 갱신해 주세요." | claim.verifiedAt + 경과 일수 | +| `FAIL_QP_LOOKTHROUGH_NOT_COMPLETED` | "추가 정보 확인 중입니다. 잠시 후 다시 시도해 주세요." | 미완료 구성원 목록 | +| `FAIL_TRUST_DISQUALIFIED` | "Trust 구조 검토가 필요합니다. KYC팀에 문의해 주세요." | 미충족 수탁자/위탁자 목록 | -이유: 매수인에게 "당신 신탁의 위탁자 중 X가 자격 미달"이라고 노출하면 다른 사람의 자산정보가 새 나갈 수 있다. 그래서 노출 메시지는 *무엇을 하라*만, 내부 로그는 *왜 막혔나*를 담는다. +**이유:** 매수인에게 "당신 신탁의 위탁자 중 X가 자격 미달"이라고 노출하면 다른 사람의 자산정보가 새 나갈 수 있다. 그래서 노출 메시지는 **무엇을 하라**만, 내부 로그는 **왜 막혔나**를 담는다. --- @@ -484,72 +810,72 @@ function check_A_13(prospective_buyer, asset, block): ### 7.1 Test 1 — Pass (명백한 통과) -**시나리오**: 미국 거주 45세 자연인. 주식·채권 portfolio가 FMV $7M(brokerage statement로 입증). Trusted Issuer Y가 2026-05-01에 QP claim 발급. 2026-06-13에 BUIDL 매수 시도. +**시나리오:** 미국 거주 45세 자연인. 주식·채권 portfolio가 FMV $7M(brokerage statement로 입증). Trusted Issuer Y가 2026-05-01에 QP claim 발급. 2026-06-13에 BUIDL 매수 시도. -**기대 결과**: PASS +**기대 결과:** PASS -**단계별 trace**: 1단계 claim 발견 ✅ → 2단계 Trusted Issuer Y는 명부 등록·서명 유효 ✅ → 3단계 1.5개월 경과(< 1년 cap) ✅ → 4단계 basis=QP_NATURAL → 추가 cascade 없이 PASS. +**단계별 trace:** 1단계 claim 발견 ✅ → 2단계 Trusted Issuer Y는 명부 등록·서명 유효 ✅ → 3단계 1.5개월 경과(< 1년 cap) ✅ → 4단계 basis=QP_NATURAL → 추가 cascade 없이 PASS. -**해설**: 가장 전형적인 통과다. Trusted Issuer가 brokerage statement를 받아 FMV로 평가하고, 투자 취득용 차입금(있다면)을 Rule 2a51-1(e)로 차감한 뒤 $7M > $5M으로 판정해 claim을 발급했다. DEX는 그 claim의 진위·신뢰성·유효기간·갈래만 확인하고 통과시킨다. *금액 계산은 DEX가 하지 않는다.* +**해설:** 가장 전형적인 통과다. Trusted Issuer가 brokerage statement를 받아 FMV로 평가하고, 투자 취득용 차입금(있다면)을 Rule 2a51-1(e)로 차감한 뒤 $7M > $5M으로 판정해 claim을 발급했다. DEX는 그 claim의 진위·신뢰성·유효기간·갈래만 확인하고 통과시킨다. 금액 계산은 DEX가 하지 않는다. ### 7.2 Test 2 — Fail (명백한 거절) -**시나리오**: 미국 거주 자연인. investments $4.9M(같은 항목이되 $0.1M 부족). Trusted Issuer가 문턱 미달로 판정해 **claim 발급을 거부**. +**시나리오:** 미국 거주 자연인. investments $4.9M(같은 항목이되 $0.1M 부족). Trusted Issuer가 문턱 미달로 판정해 claim 발급을 거부. -**기대 결과**: FAIL_NOT_QP +**기대 결과:** FAIL_NOT_QP -**trace**: 1단계 claim 없음 → FAIL_NOT_QP. +**trace:** 1단계 claim 없음 → FAIL_NOT_QP. -**해설**: 문턱을 못 넘으면 Trusted Issuer가 애초에 claim을 발급하지 않는다. 그래서 DEX 입장에서는 "claim이 없다"는 사실만으로 `FAIL_NOT_QP`가 난다. 매수인은 frontend에서 "QP 자격 확인이 필요합니다"를 받고, 추가 증빙을 내거나 투자자산을 늘린 뒤 재시도하거나 다른 경로를 고려해야 한다. (여기서 "왜 막혔는지" 구체 금액은 매수인 화면에 노출하지 않는다 — §6.4.) +**해설:** 문턱을 못 넘으면 Trusted Issuer가 애초에 claim을 발급하지 않는다. 그래서 DEX 입장에서는 "claim이 없다"는 사실만으로 FAIL_NOT_QP가 난다. 매수인은 frontend에서 "QP 자격 확인이 필요합니다"를 받고, 추가 증빙을 내거나 투자자산을 늘린 뒤 재시도하거나 다른 경로를 고려해야 한다. (여기서 "왜 막혔는지" 구체 금액은 매수인 화면에 노출하지 않는다 — §6.4.) ### 7.3 Test 3 — Boundary (정확히 $5M) -**시나리오**: 미국 거주 자연인. Rule 2a51-1 평가·차감을 거친 investments가 *정확히 $5,000,000*. +**시나리오:** 미국 거주 자연인. Rule 2a51-1 평가·차감을 거친 investments가 정확히 $5,000,000. -**기대 결과**: PASS (inclusive 해석) +**기대 결과:** PASS (inclusive 해석) -**경계 sub-질문 해소**: +**경계 sub-질문 해소:** | 질문 | 결정 | 법적 reasoning | |---|---|---| -| $5M은 inclusive(≥)인가 exclusive(>)인가 | **inclusive (≥)** | §2(a)(51)(A)(i)이 "not less than"으로 명시 → 영어 법조문상 "≥". 정확히 $5M이면 통과 | -| 주거·사업용 부동산 포함 여부 | **제외** | Rule 2a51-1**(c)**: 본인·가족 거주나 사업장으로 쓰는 부동산은 "investment purposes"가 아님 | -| 차입금 차감 범위 | **투자 취득용 차입만 차감** | Rule 2a51-1**(e)**: "incurred to acquire ... the Investments". 일반 주택담보·사업자금 대출은 차감하지 않음 | -| 손실 종목 net 처리 | **FMV 기준이라 자동 반영** | Rule 2a51-1(d): "fair market value as of a recent date" — 최근 시가에 손실이 이미 반영됨 | +| $5M은 inclusive(≥)인가 exclusive(>)인가 | inclusive (≥) | §2(a)(51)(A)(i)이 "not less than"으로 명시 → 영어 법조문상 "≥". 정확히 $5M이면 통과 | +| 주거·사업용 부동산 포함 여부 | 제외 | Rule 2a51-1**(c)**: 본인·가족 거주나 사업장으로 쓰는 부동산은 "investment purposes"가 아님 | +| 차입금 차감 범위 | 투자 취득용 차입만 차감 | Rule 2a51-1**(e)**: "incurred to acquire ... the Investments". 일반 주택담보·사업자금 대출은 차감하지 않음 | +| 손실 종목 net 처리 | FMV 기준이라 자동 반영 | Rule 2a51-1(d): "fair market value as of a recent date" — 최근 시가에 손실이 이미 반영됨 | -**해설**: 경계에서 법률가가 명확히 정해 주지 않으면 개발자가 임의로 결정하게 되고, 그 임의 결정이 곧 *부당한 차단*(정당한 매수인을 막음)이나 *부당한 통과*(자격 미달자를 통과)로 이어진다. 위 네 질문의 reasoning이 테스트 케이스에 명시돼야 스펙이 완성된다. (특히 주거용 부동산 제외 근거가 (b)(2)가 아니라 (c)라는 점은 v2.1에서 정정한 항목이다.) +**해설:** 경계에서 법률가가 명확히 정해 주지 않으면 개발자가 임의로 결정하게 되고, 그 임의 결정이 곧 부당한 차단(정당한 매수인을 막음)이나 부당한 통과(자격 미달자를 통과)로 이어진다. 위 네 질문의 reasoning이 테스트 케이스에 명시돼야 스펙이 완성된다. ### 7.4 Test 4 — Cascade (3단 가족회사 look-through) -**시나리오**: 다층 가족회사 구조. +**시나리오:** **BUIDL 취득을 위해 특정 목적으로 형성된(급조) 다층 회사 구조** (구성원에 가족 LLC가 겹으로 들어간 형태). 급조 회사는 Rule 2a51-3(a)에 따라 구성원(beneficial owner) *전원이 QP*여야 QP로 인정된다 — 자체 $5M 충족 여부와 무관. ``` Layer 0 Family LLC A (매수 주체) ├─ Layer 1 Member 1 = Family LLC B (파트너 4명) - │ ├─ Layer 2 파트너 1: 개인 investments $4M → NOT QP ❌ - │ ├─ Layer 2 파트너 2: 개인 investments $7M → QP ✅ - │ ├─ Layer 2 파트너 3: 개인 investments $6M → QP ✅ - │ └─ Layer 2 파트너 4: 개인 investments $8M → QP ✅ + │ ├─ Layer 2 파트너 1: 개인 investments $4M → NOT QP ❌ + │ ├─ Layer 2 파트너 2: 개인 investments $7M → QP ✅ + │ ├─ Layer 2 파트너 3: 개인 investments $6M → QP ✅ + │ └─ Layer 2 파트너 4: 개인 investments $8M → QP ✅ └─ Layer 1 Member 2 = 개인 $9M → QP ✅ ``` -**기대 결과**: FAIL_FAMILY_CO_NOT_QP +**기대 결과:** FAIL_FAMILY_CO_NOT_QP -**trace**: A-13 활성화 + basis=QP_FAMILY → look-through 부품(A-09) cascade → 재귀적으로 구성원 확인 → Layer 2 파트너 1이 $4M으로 QP 미충족 발견 → Family LLC B 전체 탈락 → Family LLC A(Layer 0) 전체 탈락 → 최종 FAIL_FAMILY_CO_NOT_QP. +**trace:** A-13 활성화 + basis=QP_FAMILY_COMPANY → look-through 부품(A-09) cascade → 재귀적으로 구성원 확인 → Layer 2 파트너 1이 $4M으로 QP 미충족 발견 → Family LLC B 전체 탈락 → Family LLC A(Layer 0) 전체 탈락 → 최종 FAIL_FAMILY_CO_NOT_QP. -**해설**: 왜 파트너 1의 $4M이 *전체*를 무너뜨리나? §2(a)(51)(A)(ii)의 "directly or indirectly"(직간접 소유)와 Rule 2a51-3(목적형성 회사는 *모든* beneficial owner가 각자 QP여야 함)이 근거다. 쉽게 말하면 — 가족회사가 QP가 되려면 *그 안의 모든 사람*이 자격을 갖춰야 하므로, 단 한 명의 미달자가 사슬 전체를 끊는다. Decipher의 cascade는 이 strict 요건을 그대로 구현한다. (정확한 재귀 *깊이*의 한계는 §12 Open Issue.) +**해설:** 왜 파트너 1의 $4M이 전체를 무너뜨리나? **Rule 2a51-3(a)** — 펀드 취득 목적으로 *급조된* 회사는 §2(a)(51)(A)(ii)·(iv)의 목적상 *구성원 전원이 QP가 아닌 한* QP로 보지 않는다 — 가 근거다. 급조 회사는 자체 자산 충족과 무관하게 전원-QP가 강제되므로, 단 한 명의 미달자가 사슬 전체를 끊는다. **⚠ 중요 — 진성(급조 아님) 가족회사와 구분:** 급조가 아닌 가족회사가 **자체로** investments $5M 이상을 보유하면 §2(a)(51)(A)(ii)로 *회사 단위*에서 QP이고 구성원 개별 QP는 따지지 않는다(§3.16.1). 따라서 이 all-beneficial-owner-QP cascade는 **급조 회사(2a51-3(a))** 또는 **자체 문턱 미달로 2a51-3(b) 허용경로에 기대는 회사**에만 적용된다. (재귀 깊이 한계는 §12 Open Issue.) ### 7.5 Test 5 — Knowledgeable Employee 예외 -**시나리오**: BlackRock의 BUIDL Portfolio Manager. 개인 investments $3M(자연인 문턱 $5M 미달). 그러나 BlackRock Investment Management에서 36개월 근속, BUIDL 펀드의 executive officer 역할. +**시나리오:** BlackRock의 BUIDL Portfolio Manager. 개인 investments $3M(자연인 문턱 $5M 미달). 그러나 BlackRock Investment Management에서 36개월 근속, BUIDL 펀드의 executive officer 역할. -**claim**: basis=KNOWLEDGEABLE_EMPLOYEE / coveredCompany="BlackRock BUIDL Fund LLC" / 매수 대상 asset.fund_identifier="BlackRock BUIDL Fund LLC". +**claim:** basis=KNOWLEDGEABLE_EMPLOYEE_EXCLUSION / coveredCompany="BlackRock BUIDL Fund LLC" / 매수 대상 asset.fund_identifier="BlackRock BUIDL Fund LLC". -**기대 결과**: PASS +**기대 결과:** PASS -**trace**: 1~3단계 통과 → 4단계 basis=KNOWLEDGEABLE_EMPLOYEE → coveredCompany == asset.fund_identifier ✅ → $5M 문턱과 무관하게 PASS. +**trace:** 1~3단계 통과 → 4단계 basis=KNOWLEDGEABLE_EMPLOYEE_EXCLUSION → coveredCompany == asset.fund_identifier ✅ → $5M 문턱과 무관하게 PASS. -**해설**: Rule 3c-5(a)(4)(i)의 "Executive Officer"에 해당하는 Portfolio Manager는 *직위만으로* Knowledgeable Employee가 된다(근속 12개월 요건은 (a)(4)(ii) 일반 직원에만 적용). 펀드 운영 내부자는 펀드 위험을 충분히 이해한다는 입법 판단이다. 정확히는 — Rule 3c-5(b)에 따라 이 사람의 보유분이 "exclusively QP" 판정에서 *제외*되므로, $5M이 없어도 자기 펀드에 투자할 수 있다. 본 부품은 여기에 *소속 펀드 일치 확인*을 더해, KE 자격을 *남의 펀드* 매수에 끌어다 쓰는 것을 막는다. (이것이 KE를 Rule 2a51-3이 아니라 Rule 3c-5로 다뤄야 하는 이유다 — v2.1 정정 항목.) +**해설:** Rule 3c-5(a)(4)(i)의 "Executive Officer"에 해당하는 Portfolio Manager는 직위만으로 Knowledgeable Employee가 된다(근속 12개월 요건은 (a)(4)(ii) 일반 직원에만 적용). 펀드 운영 내부자는 펀드 위험을 충분히 이해한다는 입법 판단이다. 정확히는 — Rule 3c-5(b)에 따라 이 사람의 보유분이 "exclusively QP" 판정에서 제외되므로, $5M이 없어도 자기 펀드에 투자할 수 있다. 본 부품은 여기에 소속 펀드 일치 확인을 더해, KE 자격을 남의 펀드 매수에 끌어다 쓰는 것을 막는다. --- @@ -561,21 +887,23 @@ Decipher는 법적 판정을 온체인 코드로 옮기는 방식을 세 가지 | 패턴 | 이름 | 작동 방식 | 예시 | |---|---|---|---| -| **A** | 직접 계산형 | 온체인 코드가 직접 비교·계산 | 나이 ≥ 18, 보유기간 ≥ 6개월, 제재명부 매칭 | -| **B** | 증명서 확인형 | off-chain 신뢰기관이 판단 → 서명 claim 발급 → DEX는 claim만 확인 | KYC·QP·Accredited Investor·Affiliate 판정 | -| **C** | 외부 oracle형 | 외부의 결정론적 데이터를 가져옴 | NAV·토큰 가격·환율 | +| A | 직접 계산형 | 온체인 코드가 직접 비교·계산 | 나이 ≥ 18, 보유기간 ≥ 6개월, 제재명부 매칭 | +| B | 증명서 확인형 | off-chain 신뢰기관이 판단 → 서명 claim 발급 → DEX는 claim만 확인 | KYC·QP·Accredited Investor·Affiliate 판정 | +| C | 외부 oracle형 | 외부의 결정론적 데이터를 가져옴 | NAV·토큰 가격·환율 | ### 8.2 QP 판정에 패턴 B가 유일한 선택인 이유 -**패턴 A는 불가능하다.** §5.5에서 본 비결정성 때문이다. 가족관계 판단(§2(a)(51)(A)(ii)), 지배관계 판단(Rule 2a51-1(b)(1)), 평가 판단(Rule 2a51-1(d)), KE의 실질 관여 판단(Rule 3c-5(a)(4)(ii))은 모두 *사람의 판단(judgment)*이라 온체인 코드가 재현할 수 없다. +**패턴 A는 불가능하다.** §5.5에서 본 비결정성 때문이다. 가족관계 판단(§2(a)(51)(A)(ii)), 지배관계 판단(Rule 2a51-1(b)(1)), 평가 판단(Rule 2a51-1(d)), KE의 실질 관여 판단(Rule 3c-5(a)(4)(ii))은 모두 *사람의 판단(judgment)이라* 온체인 코드가 재현할 수 없다. -**패턴 C도 불가능하다.** Oracle은 가격 피드처럼 *외부의 사실(fact)*을 전달하는 수단이다. "이 사람이 QP인가"는 사실 전달이 아니라 *법적 판단*이라, oracle이 줄 수 없다. 법적 판단을 제공하는 oracle은 존재하지 않는다. +**패턴 C도 불가능하다.** Oracle은 가격 피드처럼 *외부의 사실(fact)을* 전달하는 수단이다. "이 사람이 QP인가"는 사실 전달이 아니라 법적 판단이라, oracle이 줄 수 없다. 법적 판단을 제공하는 oracle은 존재하지 않는다. **그래서 패턴 B만 남는다.** Trusted Issuer가 off-chain에서 실사·판단을 하고 결과를 서명 claim으로 전달하면, DEX는 그 claim의 결정론적 확인(서명·발급기관·기간·갈래)만 한다. ### 8.3 패턴 B의 법적 토대 — Rule 2a51-1(h) Reasonable Belief -이 방식이 법적으로 성립하는 근거가 **Rule 2a51-1(h)의 reasonable belief 안전항**(§3.2)이다. 펀드(또는 그를 대신하는 Relying Person)가 매수인을 *합리적으로 QP라고 믿었다면*, 사후에 실은 아니었음이 드러나도 면제가 곧바로 깨지지 않는다. Trusted Issuer가 그 "합리적 신뢰"를 형성·문서화하는 주체가 되고, 그 효과가 펀드(BlackRock)와 인프라(Decipher)로 어떻게 미치는지(cascade)는 §10.4 책임 분배에서 다룬다. (다시 강조: 이 안전항은 (g)가 아니라 (h)이며, "reasonable care" 문구는 규칙 문언에 없다 — 실무상 상당한 주의가 요구된다는 *취지*와 규칙 *문언*을 구분해야 한다.) +이 방식이 법적으로 성립하는 근거가 Rule 2a51-1(h)의 reasonable belief 안전항(§3.13)이다. 펀드(또는 그를 대신하는 Relying Person)가 매수인을 합리적으로 QP라고 믿었다면, 사후에 실은 아니었음이 드러나도 면제가 곧바로 깨지지 않는다. Trusted Issuer가 그 "합리적 신뢰"를 형성·문서화하는 주체가 되고, 그 효과가 펀드(BlackRock)와 인프라(Decipher)로 어떻게 미치는지(cascade)는 §10.4 책임 분배에서 다룬다. + +> **다시 강조:** 이 안전항은 (g)가 아니라 **(h)이며**, "reasonable care" 문구는 규칙 문언에 없다 — 실무상 상당한 주의가 요구된다는 취지와 규칙 문언을 구분해야 한다. --- @@ -583,50 +911,78 @@ Decipher는 법적 판정을 온체인 코드로 옮기는 방식을 세 가지 ### 9.1 본 부품의 책임 경계 -본 부품은 §3(c)(7)의 **Condition 1("취득 시점에 QP가 배타적으로 소유")**만 책임진다. **Condition 2("no public offering")**는 부품 하나로 끝나지 않는다 — Ralston Purina 4-factor(§3.3)가 DEX 거래환경 *전체*에 걸리는 Recipe-level 문제이며, "DEX의 secondary trading이 공모를 유발하는가"라는 질문은 Decipher의 No-Action Letter 신청 핵심 쟁점이다(§12). +본 부품은 §3(c)(7)의 **Condition 1("취득 시점에 QP가 배타적으로 소유")만** 책임진다. **Condition 2("no public offering")는** 부품 하나로 끝나지 않는다 — Ralston Purina 4-factor(§3.18)가 DEX 거래환경 전체에 걸리는 Recipe-level 문제이며, "DEX의 secondary trading이 공모를 유발하는가"라는 질문은 Decipher의 No-Action Letter 신청 핵심 쟁점이다(§12). -또한 본 부품의 결과는 다른 부품·레시피와 *누적적으로(cumulative)* 작동한다. 가족회사 매수인은 look-through·affiliate·claim freshness 부품과 cascade되고, §3(c)(7) 레시피(R3) 외에 발행(R1)·재판매(R2) 레시피와도 함께 켜질 수 있다. +또한 본 부품의 결과는 다른 부품·레시피와 누적적으로(cumulative) 작동한다. 가족회사 매수인은 look-through·affiliate·claim freshness 부품과 cascade되고, §3(c)(7) 레시피(R3) 외에 발행(R1)·재판매(R2) 레시피와도 함께 켜질 수 있다. ### 9.2 Element cascade map ``` -A-13 (QP) ──┬─ (basis가 QP_FAMILY 또는 QP_TRUST) ──► A-09 (Equity Owner Look-Through) - │ │ - │ └─ (소유자가 affiliate) ──► A-08 (Affiliate) +A-13 (QP) ──┬─ (basis가 QP_FAMILY_COMPANY 또는 QP_TRUST) ──► A-09 (Equity Owner Look-Through) + │ │ + │ └─ (소유자가 affiliate) ──────────► A-06 (Affiliate) │ - └─ (모든 경우) ──► A-11 (Claim Freshness · 취득시점 스냅샷) + └─ (모든 경우) ──────────────────────────► A-11 (Claim Freshness · 취득시점 스냅샷) ``` | cascade 트리거 | 호출되는 부품 | 발동 조건 | |---|---|---| | basis가 가족회사 또는 신탁 | A-09 (Look-Through) | 항상(들여다보기 의무) | -| look-through 결과에 affiliate 포함 | A-08 (Affiliate) | 소유자 중 affiliate가 있을 때 | +| look-through 결과에 affiliate 포함 | A-06 (Affiliate) | 소유자 중 affiliate가 있을 때 | | 모든 거래 | A-11 (Claim Freshness) | block.timestamp와 claim.verifiedAt 비교 | -해설: 가족회사·신탁 매수인이면 본 부품이 끝나는 게 아니라 *그 안의 사람들*을 보는 look-through 부품(A-09)을 부르고, 그 사람들 중 펀드 관계자(affiliate)가 있으면 또 affiliate 부품(A-08)이 붙는다. claim 신선도(A-11)는 모든 거래에 공통으로 붙는다. +**해설:** 가족회사·신탁 매수인이면 본 부품이 끝나는 게 아니라 그 안의 사람들을 보는 look-through 부품(A-09)을 부르고, 그 사람들 중 펀드 관계자(affiliate)가 있으면 또 affiliate 부품(A-06)이 붙는다. claim 신선도(A-11)는 모든 거래에 공통으로 붙는다. ### 9.3 Recipe orchestration | Recipe | 본 부품 발동 조건 | 본 부품의 역할 | |---|---|---| | R3 (ICA §3(c)(7) Fund) | 항상(R3의 주 검사) | Condition 1(QP 배타적 소유) 판정 | -| R1 (Reg D 506(c) Issuance) | cumulative(발행+유통 동시 검증) | 발행 측 부품(A-03)과 *나란히* 검사 — 둘 다 통과해야 | +| R1 (Reg D 506(c) Issuance) | cumulative(발행+유통 동시 검증) | 발행 측 부품(A-03)과 나란히 검사 — 둘 다 통과해야 | | R2 (Resale via §4(a)(7)) | cumulative | 재판매 경로 진입 시 QP 자격 확인 | ### 9.4 Conflict resolution rule — 3가지 경우 -**경우 1 — A-13 통과인데 A-03 탈락(또는 그 반대).** 적격투자자(A-03)는 *순자산($1M)* 기준, QP(A-13)는 *투자자산($5M)* 기준이라, 같은 사람이라도 한쪽만 통과할 수 있다(예: 부동산 부자는 A-03 통과·A-13 탈락 가능). R1+R3가 동시에 켜지면 *둘 다 통과*해야 거래가 허용된다(AND 결합). R3만 켜진 경우엔 A-13만 본다. +**경우 1 — A-13 통과인데 A-03 탈락(또는 그 반대).** 적격투자자(A-03)는 순자산($1M) 기준, QP(A-13)는 투자자산($5M) 기준이라, 같은 사람이라도 한쪽만 통과할 수 있다(예: 부동산 부자는 A-03 통과·A-13 탈락 가능). R1+R3가 동시에 켜지면 둘 다 통과해야 거래가 허용된다(AND 결합). R3만 켜진 경우엔 A-13만 본다. -**경우 2 — A-13은 통과인데 look-through(A-09)에서 구성원 일부 탈락.** 가족회사는 *모든 구성원*이 QP여야 자격이 생긴다(§2(a)(51)(A)(ii) + Rule 2a51-3). 한 명이라도 탈락하면 전체가 탈락하므로, A-13의 통과 판정이 번복되어 `FAIL_FAMILY_CO_NOT_QP`가 반환된다. +**경우 2 — A-13은 통과인데 look-through(A-09)에서 구성원 일부 탈락.** *급조(목적형성) 회사(Rule 2a51-3(a))이거나, 자체 $5M을 못 채워 2a51-3(b) 허용경로에 기대는* 회사는 모든 구성원이 각자 QP여야 자격이 생긴다. 한 명이라도 탈락하면 전체가 탈락하므로, A-13의 통과 판정이 번복되어 FAIL_FAMILY_CO_NOT_QP가 반환된다. (자체로 $5M을 갖춘 진성 가족회사는 구성원 개별 QP 없이 회사 단위로 통과 — §2(a)(51)(A)(ii)·§3.16.1.) -**경우 3 — R3 탈락인데 R2 통과(§3(c)(7) 상실인데 재판매 안전항은 유효).** R3 탈락은 펀드의 근본 위기다(§1.3). 재판매 안전항(R2)만으로 §3(c)(7) status를 되살릴 수는 없다. Decipher 운영 정책: R3 탈락 시 해당 자산 *전체* 거래를 suspend하고 Trust Operations가 사후 검토한다. (이 결합 처리의 정확한 규칙은 §12 Open Issue.) +**경우 3 — R3 탈락인데 R2 통과(§3(c)(7) 상실인데 재판매 안전항은 유효).** R3 탈락은 펀드의 근본 위기다(§1.4). 재판매 안전항(R2)만으로 §3(c)(7) status를 되살릴 수는 없다. Decipher 운영 정책: R3 탈락 시 해당 자산 전체 거래를 suspend하고 Trust Operations가 사후 검토한다. (이 결합 처리의 정확한 규칙은 §12 Open Issue.) ### 9.5 Manifest 무결성과의 조율 -본 부품의 결과(통과·FAIL code)는 자산의 컴플라이언스 상태를 담는 **Asset Compliance Manifest**에 누적 기록된다. 거래 체결 직후(post-trade commit) **Manifest 무결성 부품(B-01)**이 R3의 각 부품 결과가 서로 모순되지 않는지 재검증한다(회계 감사의 *재확인*에 비유). 불일치가 발견되면 audit alert이 뜬다. +본 부품의 결과(통과·FAIL code)는 자산의 컴플라이언스 상태를 담는 Asset Compliance Manifest에 누적 기록된다. 거래 체결 직후(post-trade commit) **Manifest 무결성 부품(B-01)이** R3의 각 부품 결과가 서로 모순되지 않는지 재검증한다(회계 감사의 재확인에 비유). 불일치가 발견되면 audit alert이 뜬다. --- +### 9.6 [해설] 506(c)·Condition 2와 2,000-holder 제한의 관계 + +§9.1에서 본 부품(A-13)은 Condition 1만 책임지고 Condition 2(no public offering)는 Recipe-level이라고 했다. 이 절은 그 Condition 2가 506(c)/§201(b)(2)로 어디까지 해소되는지, 그리고 별개 축인 2,000-holder 제한(§12(g))과 어떻게 다른지를 한 번에 정리한다. 붙잡을 직관은 두 개 — "발행과 2차 거래는 다르다", 그리고 "두 제한은 서로 다른 법의 서로 다른 축이다". + +**한 줄 요약.** 506(c)는 발행(광고) 단계의 공모 걱정만 없애준다(JOBS Act §201(b)(2)). DEX에서의 2차 거래 걱정은 그대로 남는다. 그리고 2,000-holder 제한(Exchange Act §12(g))은 Condition 2와 아무 상관 없는 완전 별개 규제다. + +**비유 — 콘서트 티켓.** 티켓이 세상에 나오는 길은 둘이다. 공식 예매처가 처음 파는 것(발행)과 팬이 다른 팬에게 되파는 것(2차 거래)이다. "예매처가 대대적으로 광고해도 되나?"와 "팬끼리 공개 사이트에서 되파는 게 괜찮나?"는 별개 질문이다. 토큰도 같다 — 발행(BUIDL이 QP에게 판매)과 2차 거래(보유자가 DEX에서 재판매)는 다른 단계, 다른 규칙이다. + +**질문 1 — 2,000명 제한은 왜 여전히 생기나.** 핵심은 이 둘이 다른 법, 다른 질문이라는 것이다. 식당을 열 때 위생 허가와 주류 면허를 각각 따로 받아야 하는 것과 같아서, 하나를 통과해도 다른 하나가 면제되지 않는다. + +| 구분 | Condition 2 (공모 금지) | 2,000-holder 제한 | +|---|---|---| +| 어느 법? | ICA 1940 (투자회사법) | Exchange Act 1934 (증권거래법) | +| 무슨 질문? | 펀드가 **투자회사로 등록**해야 하나? | 펀드가 **공시회사**(reporting company)로 바뀌나? | +| 언제 걸리나? | 펀드가 public offering(공모)을 하면 | record holder 2,000명 초과 + 자산 $10M 초과 | +| 506(c)/§201(b)(2)는? | 발행 광고는 해소(2차 거래는 잔존) | 아무 영향 없음(완전 별개) | +| 누가 담당? | A-13(Condition 1)·Recipe(Condition 2) | 부품 D-01 | + +506(c)/§201(b)(2)는 "공모냐 아니냐"라는 질문(Condition 2)에만 답을 준다. "보유자가 몇 명이냐"라는 질문(§12(g))과는 다른 영역이라 손댈 수 없다. 이것이 §3(c)(7)의 함정이다 — §3(c)(7)은 (100명으로 묶이는 §3(c)(1)과 달리) QP를 몇 명이든 받을 수 있지만, 바로 이 §12(g) 때문에 실질적으로 2,000명이 천장이 된다. 토큰이 DEX에서 여러 지갑으로 퍼지면 이 숫자는 금세 늘 수 있어, 별도 부품 D-01이 보유자 수를 STATEFUL하게 세는 이유가 여기 있다. + +**질문 2 — "쟁점은 2차 거래로 한정된다"의 뜻.** §201(b)(2)는 "Rule 506(c)에 따른 offer·sale" — 발행자(펀드)가 토큰을 파는 1차 발행만 다룬다. 발행 단계에서 BUIDL이 광고하며 QP에게 토큰을 직접 팔면 §201(b)(2)가 "이건 공모 아님"을 깔아주어 Condition 2를 통과한다. 그러나 기존 보유자가 자기 토큰을 DEX에서 남에게 되파는 2차 거래는 발행자의 판매가 아니므로 그 보호 밖이다(이런 재판매는 §4(a)(1)·Rule 144·§4(a)(7) 등 별도 면제에 기댄다). 그래서 남는 질문은 — DEX에서 토큰이 상시 호가창에 떠 있고 익명으로 끊임없이 매칭돼 거래되는 환경이 그 자체로 "공모"처럼 보이거나 §3(c)(7)의 'not making a public offering'을 깨뜨리는가 — 즉 진짜 걱정은 2차 시장(DEX) 하나로 좁혀진다. + +![토큰의 일생 — 발행은 §201(b)(2)로 해소되고, 2차 거래에서 두 개의 별개 위험이 갈라진다](fig/fig_token.png) + +이 그림이 두 질문을 한꺼번에 보여준다. 발행 쪽(왼쪽)은 §201(b)(2)로 깔끔히 해소되고(초록), 진짜 일이 생기는 2차 거래 쪽(오른쪽)에서 서로 다른 위험 둘이 동시에 나온다 — 위험 A는 그 거래가 공모로 보이는가(ICA §3(c)(7) Condition 2, Recipe·No-Action Letter 쟁점), 위험 B는 거래로 보유자가 2,000명을 넘는가(Exchange Act §12(g), 부품 D-01)다. 둘 다 2차 시장에서 생기지만 서로 다른 법의 서로 다른 축이라 따로 관리한다. + +**정리.** ① 506(c)/§201(b)(2)는 발행 광고가 공모로 취급되지 않게 한다 → Condition 2의 발행 측은 해소된다. ② 하지만 DEX 2차 거래가 공모를 유발하는지는 여전히 미결이다(§201(b)(2) 밖) → 이것이 "2차 거래로 한정된" 쟁점이며 §12에서 다룬다. ③ 2,000-holder 제한(§12(g))은 위 전부와 무관한 별개 규제다 → 506(c)로 가도 그대로이며, 그래서 D-01이 따로 센다. + ## §10. (γ) 3-Layer Solution — 증거 신뢰를 세 겹으로 ### 10.1 왜 3겹 구조인가 @@ -635,17 +991,17 @@ A-13 (QP) ──┬─ (basis가 QP_FAMILY 또는 QP_TRUST) ──► A-09 (Equi | 층 | 무엇 | 커버리지 | 비용 | reasonable belief 형성 | |---|---|---|---|---| -| **Layer 1 — Self-Attestation** | 매수인 자기신고(frontend) | 1차 의도 수집·증거 갈래 결정 | 낮음 | 낮음(단독으론 불충분) | -| **Layer 2 — Trusted Issuer** | KYC 기관의 off-chain 실사 + claim 발급 | 핵심 증거 + 법적 판단 | 중–상 | **주(主)** — Rule 2a51-1(h) 안전항 직접 적용 | -| **Layer 3 — External Spot-Check** | 무작위 audit·Layer 2 품질 보증 | 안전망(체계적 실패 검출) | 상(표본) | 컴플라이언스 강화 | +| Layer 1 — Self-Attestation | 매수인 자기신고(frontend) | 1차 의도 수집·증거 갈래 결정 | 낮음 | 낮음(단독으론 불충분) | +| Layer 2 — Trusted Issuer | KYC 기관의 off-chain 실사 + claim 발급 | 핵심 증거 + 법적 판단 | 중–상 | 주(主) — Rule 2a51-1(h) 안전항 직접 적용 | +| Layer 3 — External Spot-Check | 무작위 audit · Layer 2 품질 보증 | 안전망(체계적 실패 검출) | 상(표본) | 컴플라이언스 강화 | ### 10.2 각 층의 법적 토대 -**Layer 1 — Self-Attestation**: 매수인이 frontend에서 자기 갈래를 선언한다("나는 자연인이고 $5M 이상 보유"). 자기신고 *자체*는 §2(a)(51)·Rule 2a51-1 판정 근거가 못 된다(증거 불충분). 하지만 Layer 2의 진입·범위를 정하는 역할을 한다(예: KE 경로로 갈지 결정). +**Layer 1 — Self-Attestation:** 매수인이 frontend에서 자기 갈래를 선언한다("나는 자연인이고 $5M 이상 보유"). 자기신고 자체는 §2(a)(51)·Rule 2a51-1 판정 근거가 못 된다(증거 불충분). 하지만 Layer 2의 진입·범위를 정하는 역할을 한다(예: KE 경로로 갈지 결정). -**Layer 2 — Trusted Issuer**: 여기서 **Rule 2a51-1(h)의 reasonable belief**가 직접 적용된다. Trusted Issuer(KYC 기관·등록 투자자문업자·broker-dealer 등)가 증거를 수집·검증하고 Rule 2a51-1에 따른 법적 판단을 한다. 충실한 실사로 합리적 신뢰가 형성되면 안전항이 작동한다. +**Layer 2 — Trusted Issuer:** 여기서 Rule 2a51-1(h)의 reasonable belief가 직접 적용된다. Trusted Issuer(KYC 기관·등록 투자자문업자·broker-dealer 등)가 증거를 수집·검증하고 Rule 2a51-1에 따른 법적 판단을 한다. 충실한 실사로 합리적 신뢰가 형성되면 안전항이 작동한다. -**Layer 3 — External Spot-Check**: Layer 2가 *체계적으로 느슨한* 실사를 하고 있지는 않은지 무작위로 점검하는 meta-control이다. Layer 2 자체에 대한 품질 보증·audit으로, 펀드 측 운영위험 관리와 안전항의 robustness를 강화한다. +**Layer 3 — External Spot-Check:** Layer 2가 체계적으로 느슨한 실사를 하고 있지는 않은지 무작위로 점검하는 meta-control이다. Layer 2 자체에 대한 품질 보증·audit으로, 펀드 측 운영위험 관리와 안전항의 robustness를 강화한다. ### 10.3 층 간 escalation 규칙 @@ -663,12 +1019,12 @@ Layer 3 (External Spot-Check): 최종 검증 · 표본 audit | 행위자 | 책임 측면 | |---|---| -| **Buyer(매수인)** | misrepresentation(허위표시) 시 직접 사기 책임(민·형사) | -| **Trusted Issuer** | 충실한 주의를 다하지 못했으면 과실 책임 + 안전항 무효화 → 손해배상 대상 | -| **Fund(BlackRock)** | Trusted Issuer가 합리적 신뢰를 형성했으면 Rule 2a51-1(h) 안전항으로 보호, 아니면 §3(c)(7) status 상실 위험 | -| **Decipher(인프라 제공자)** | 인프라 제공자의 책임 경계는 명확한 case law가 아직 없음 — §12 Open Issue | +| Buyer(매수인) | misrepresentation(허위표시) 시 직접 사기 책임(민·형사) | +| Trusted Issuer | 충실한 주의를 다하지 못했으면 과실 책임 + 안전항 무효화 → 손해배상 대상 | +| Fund(BlackRock) | Trusted Issuer가 합리적 신뢰를 형성했으면 Rule 2a51-1(h) 안전항으로 보호, 아니면 §3(c)(7) status 상실 위험 | +| Decipher(인프라 제공자) | 인프라 제공자의 책임 경계는 명확한 case law가 아직 없음 — §12 Open Issue | -**이 cascade의 정확한 지도가 변호사 follow-up의 핵심 질문이다.** Securitize·tZERO·INX 선례에서는 각 회사가 §4(a)(7) 안전항·broker-dealer 등록 등 *추가 보호층*을 갖고 있었다. Decipher의 *인프라 전용(infrastructure-only)* 모델에서 유사 보호가 어떻게 적용되는지는 아직 분명하지 않다(§12). 쉽게 말하면 — "우리는 거래를 *중개*한 게 아니라 *판이 깔리는 코드*만 제공했다"는 항변이 통하는지를 변호사가 정리해 줘야 한다. +이 cascade의 정확한 지도가 변호사 follow-up의 핵심 질문이다. Securitize·tZERO·INX 선례에서는 각 회사가 §4(a)(7) 안전항·broker-dealer 등록 등 추가 보호층을 갖고 있었다. Decipher의 인프라 전용(infrastructure-only) 모델에서 유사 보호가 어떻게 적용되는지는 아직 분명하지 않다(§12). 쉽게 말하면 — "우리는 거래를 중개한 게 아니라 판이 깔리는 코드만 제공했다"는 항변이 통하는지를 변호사가 정리해 줘야 한다. --- @@ -676,11 +1032,11 @@ Layer 3 (External Spot-Check): 최종 검증 · 표본 audit ### 11.1 4-Layer 밖의 층이 필요한 이유 -Decipher의 공식 아키텍처는 4층이다 — Element·Recipe·Manifest·Operator. 그런데 본 부품이 *실제로* 작동하려면 이 4층에 들어가지 않는 층이 필요하다. +Decipher의 공식 아키텍처는 4층이다 — Element·Recipe·Manifest·Operator. 그런데 본 부품이 실제로 작동하려면 이 4층에 들어가지 않는 층이 필요하다. -구체적 예시: **Knowledgeable Employee 식별은 frontend 자기신고 없이는 작동 불가능하다.** 매수인이 "나는 BlackRock 직원입니다"라고 frontend에서 선언해야 Trusted Issuer가 KE 자격 실사를 시작한다. 자기신고 없이 표준 QP 경로만 타면, $5M 문턱에서 막혀(`FAIL_NOT_QP`) *KE 자격이 있어도* 예외가 작동하지 않는다. +**구체적 예시:** Knowledgeable Employee 식별은 frontend 자기신고 없이는 작동 불가능하다. 매수인이 "나는 BlackRock 직원입니다"라고 frontend에서 선언해야 Trusted Issuer가 KE 자격 실사를 시작한다. 자기신고 없이 표준 QP 경로만 타면, $5M 문턱에서 막혀(FAIL_NOT_QP) KE 자격이 있어도 예외가 작동하지 않는다. -이는 **Decipher 구현이 4-Layer만으로 완결되지 않음**을 의미한다. *Layer 0(User Interaction)*과 *Layer 4.5(Off-chain Operator)*를 명시적으로 모델링할 필요가 있다 — 아키텍처 재검토 대상이다. +이는 Decipher 구현이 4-Layer만으로 완결되지 않음을 의미한다. *Layer 0(User Interaction)과* *Layer 4.5(Off-chain Operator)를* 명시적으로 모델링할 필요가 있다 — 아키텍처 재검토 대상이다. ### 11.2 Frontend Self-Identification Flow @@ -689,11 +1045,11 @@ Decipher의 공식 아키텍처는 4층이다 — Element·Recipe·Manifest·Ope 1. 매수인이 DEX 진입 + KYC onboarding 시작 2. 자기신고 UI: "어떤 자격으로 매수하시겠습니까?" - ☐ 자연인 (investments $5M+) - ☐ Family Company (가족관계 + $5M+) - ☐ Trust (수탁자+위탁자 결합 + 자산) - ☐ 기관·기타 (investments $25M+) - ☐ Knowledgeable Employee (펀드 내부자) + ☐ 자연인 (investments $5M+) + ☐ Family Company (가족관계 + $5M+) + ☐ Trust (수탁자+위탁자 결합 + 자산) + ☐ $25M 재량운용 (any person, investments $25M+) + ☐ Knowledgeable Employee (펀드 내부자) 3. 선택에 따라 증거 수집 form 분기 [Knowledgeable Employee 선택 시 추가 입력] @@ -703,7 +1059,7 @@ Decipher의 공식 아키텍처는 4층이다 — Element·Recipe·Manifest·Ope - 투자활동 관여 자기진술 ``` -해설(UX 관점): 자기신고는 *법적 증거*가 아니라 *경로 안내*다. 잘못 고르면 엉뚱한 증거 form으로 가서 불필요하게 막히므로, frontend는 각 갈래의 뜻을 쉬운 말로 설명해야 한다(특히 QP $5M과 적격투자자 $1M의 차이를 헷갈리지 않게). +**해설(UX 관점):** 자기신고는 법적 증거가 아니라 경로 안내다. 잘못 고르면 엉뚱한 증거 form으로 가서 불필요하게 막히므로, frontend는 각 갈래의 뜻을 쉬운 말로 설명해야 한다(특히 QP $5M과 적격투자자 $1M의 차이를 헷갈리지 않게). ### 11.3 Off-chain Operator Layer (Trusted Issuer 운영) @@ -733,59 +1089,46 @@ Decipher의 공식 아키텍처는 4층이다 — Element·Recipe·Manifest·Ope ### 11.5 아키텍처 함의 -**Trusted Issuer의 *법적 추론 능력*이 시스템 성공의 결정적 변수다.** 단순 KYC 기관이 아니라, Rule 2a51-1·2a51-3·3c-5·판례·No-Action Letter를 해석·적용할 수 있는 기관이어야 한다. 따라서 Trusted Issuer의 선정·onboarding·상시 모니터링이 Decipher 운영 설계의 핵심이다. 쉽게 말하면 — 이 시스템의 품질은 *코드*가 아니라 *증명서를 발급하는 사람들*의 법적 역량에 달려 있다. +Trusted Issuer의 법적 추론 능력이 시스템 성공의 결정적 변수다. 단순 KYC 기관이 아니라, Rule 2a51-1·2a51-3·3c-5·판례·No-Action Letter를 해석·적용할 수 있는 기관이어야 한다. 따라서 Trusted Issuer의 선정·onboarding·상시 모니터링이 Decipher 운영 설계의 핵심이다. 쉽게 말하면 — 이 시스템의 품질은 코드가 아니라 증명서를 발급하는 사람들의 법적 역량에 달려 있다. --- ## §12. Open Issues — 변호사 follow-up 대상 -본 부품의 스펙이 완전해지려면 풀어야 할 질문들이다. 각 항목은 *완결된 질문 + 왜 필요한지 + 어떻게 해소할지(권고)*로 적었다. +본 부품의 스펙이 완전해지려면 풀어야 할 질문들이다. 각 항목은 *완결된 질문 + 왜 필요한지 + 어떻게 해소할지(권고)로* 적었다. | # | 질문(무엇을 결정해야 하나) | 왜 필요한가 | Priority | 해소 경로(권고) | |---|---|---|---|---| -| 1 | **§3(c)(7) Condition 2("no public offering")가 DEX의 secondary trading으로 유발되는가?** — Ralston Purina 4-factor가 상시 호가·익명 매칭 환경에 어떻게 적용되나 | 유발된다면 BUIDL listing 자체가 면제 상실 위험. 부품으로 막을 수 없는 Recipe-level 위험 | 🔴 즉시 | 변호사 follow-up + SEC No-Action Letter 신청 검토(Securitize·INX 선례 인용) | -| 2 | **Knowledgeable Employee(Rule 3c-5)의 적용 경계** — "투자활동에 관여하는 직원"의 실무 boundary, "exclusively QP 판정에서 제외" 메커니즘의 온체인 구현 방식 | KE를 잘못 막으면 정당한 매수 차단, 모르고 통과시키면 사후 misclassification 위험 | 🔴 즉시 | 변호사 follow-up(Rule 3c-5 원문 기준 — *Rule 2a51-3 아님*) | -| 3 | **Issuer / Trusted Issuer / DEX 간 책임 분배** — Rule 2a51-1(h) reasonable belief 안전항이 각 행위자에게 cascade되는 정확한 경계, 인프라 제공자의 면책 가능성 | 위조 claim 사고 시 Decipher의 방어 논거 근거가 됨(§10.4) | 🔴 즉시 | 변호사 follow-up + Securitize·tZERO·INX 보호층 비교 | -| 4 | **Time-of-acquisition의 블록체인 적용 스펙** — 어느 timestamp(matching/confirmed/finalized)가 법적 "취득 시점"인가 | 경계 거래의 통과/차단을 가르는 기준. 임의 결정 시 법적 오작동 | 🟡 높음 | 변호사 + Decipher 자체 정리(Claim Freshness 부품 A-11과 조율) | -| 5 | **Look-through 재귀 최대 깊이** — 가족회사·신탁을 몇 단계까지 들여다봐야 하나, 부분 미충족(partial) 처리 | 깊이 미정 시 cascade 미작동 또는 무한 복잡도. A-09 부품 설계 직결 | 🟡 높음 | 변호사 follow-up(1997 S&C·1999 ABA letter 원문 확인) | -| 6 | **추가 boundary·복합 cascade 테스트 케이스** — §7의 5케이스 외 신탁 결합·기관 재량운용·KE 직위형/관여형 경계 | 스펙 완성(DoD)의 ⑤칸. 개발팀 unit test 직결 | 🟡 높음 | Decipher 자체 작성 + 변호사 검증 | -| 7 | **Cross-Recipe 결합 처리** — R3 탈락 + R2 통과의 결합 결과, R1+R3 동시 활성 시 충돌 해소 규칙 | Multi-Recipe Cumulative Model의 토대(§9.4) | 🟢 중간 | Decipher 자체 정리 | +| 1 | §3(c)(7) Condition 2("no public offering") — 발행 측 광고·일반청약은 JOBS Act §201(b)(2)로 해소되므로, 쟁점은 DEX의 secondary trading(상시 호가·익명 매칭)이 별도 public offering을 유발하는가로 좁혀진다. Ralston Purina 4-factor가 이 환경에 어떻게 적용되나 | 유발된다면 BUIDL listing 자체가 면제 상실 위험. 부품으로 막을 수 없는 Recipe-level 위험 | 🔴 즉시 | 변호사 follow-up + SEC No-Action Letter 신청 검토(Securitize·INX 선례 인용) | +| 2 | Knowledgeable Employee(Rule 3c-5)의 적용 경계 — "투자활동에 관여하는 직원"의 실무 boundary, "exclusively QP 판정에서 제외" 메커니즘의 온체인 구현 방식 | KE를 잘못 막으면 정당한 매수 차단, 모르고 통과시키면 사후 misclassification 위험 | 🔴 즉시 | 변호사 follow-up(Rule 3c-5 원문 기준 — Rule 2a51-3 아님) | +| 3 | Issuer / Trusted Issuer / DEX 간 책임 분배 — Rule 2a51-1(h) reasonable belief 안전항이 각 행위자에게 cascade되는 정확한 경계, 인프라 제공자의 면책 가능성 | 위조 claim 사고 시 Decipher의 방어 논거 근거가 됨(§10.4) | 🔴 즉시 | 변호사 follow-up + Securitize·tZERO·INX 보호층 비교 | +| 4 | Time-of-acquisition의 블록체인 적용 스펙 — 어느 timestamp(matching/confirmed/finalized)가 법적 "취득 시점"인가 | 경계 거래의 통과/차단을 가르는 기준. 임의 결정 시 법적 오작동 | 🟡 높음 | 변호사 + Decipher 자체 정리(Claim Freshness 부품 A-11과 조율) | +| 5 | Look-through 재귀 최대 깊이 — 가족회사·신탁을 몇 단계까지 들여다봐야 하나, 부분 미충족(partial) 처리 | 깊이 미정 시 cascade 미작동 또는 무한 복잡도. A-09 부품 설계 직결 | 🟡 높음 | 변호사 follow-up(Davis Polk 1997·ABA 1999 letter 원문 확인) | +| 6 | 추가 boundary·복합 cascade 테스트 케이스 — §7의 5케이스 외 신탁 결합·$25M 재량운용(any person)·KE 직위형/관여형 경계 | 스펙 완성(DoD)의 ⑤칸. 개발팀 unit test 직결 | 🟡 높음 | Decipher 자체 작성 + 변호사 검증 | +| 7 | Cross-Recipe 결합 처리 — R3 탈락 + R2 통과의 결합 결과, R1+R3 동시 활성 시 충돌 해소 규칙 | Multi-Recipe Cumulative Model의 토대(§9.4) | 🟢 중간 | Decipher 자체 정리 | -> 참고: 위 1~3번은 BUIDL listing 전 *반드시* 해소되어야 하는 immediate 항목이다. 특히 1번(공모 유발 여부)이 해소되지 않으면 다른 모든 부품이 완벽해도 BUIDL listing이 법적으로 위태롭다. +> **참고:** 위 1~3번은 BUIDL listing 전 반드시 해소되어야 하는 immediate 항목이다. 특히 1번(공모 유발 여부)이 해소되지 않으면 다른 모든 부품이 완벽해도 BUIDL listing이 법적으로 위태롭다. --- ## §13. 파일명 규칙 (Naming Convention) -``` Decipher Element / Recipe 산출물 명명 규칙: - Element: A-XX_부품이름.md (예: A-13_qualified-purchaser.md) - Recipe: R-XX_Recipe이름.md (예: R3_ICA-3c7-fund.md) +- **Element:** `A-XX_부품이름.md` (예: `A-13_qualified-purchaser.md`) +- **Recipe:** `R-XX_Recipe이름.md` (예: `R3_ICA-3c7-fund.md`) Element 부품 ID 체계(앞글자 = 카테고리): - A: 신원·자격 (매수인 측) ← 본 부품(A-13)이 여기 - B: 자산·기술 메타 - C: 거래 경로·시점 - D: 집계·누적 - E: 발행자 측 - F: 기타 - -본 부품: A-13 = "신원·자격 카테고리의 13번째 부품" -물리적 위치: - 산출물/elements/ (모든 Element walkthrough) - 산출물/recipes/ (모든 Recipe walkthrough) -``` - ---- - -## §14. 변경 로그 - -- **[2026-06-14] v2.1 — citation 검증 정정 + 가독성 재작성.** v2.0(공유 산출물 form)의 14개 섹션 구조를 유지하되, 연방규칙 원문(eCFR·Cornell LII) 대조로 인용 오류 6건을 정정하고 문장 중간 강조기호 noise를 제거해 공유 가독성을 높였다. **정정 내역**: ① Knowledgeable Employee 규칙 Rule 2a51-3 → **Rule 3c-5**(메커니즘도 "QP 간주" → "exclusively-QP 판정에서 제외"로 정정) / ② Rule 2a51-3은 **목적형성 회사 look-through 규칙**으로 재배치 / ③ Reasonable Belief Rule 2a51-1(g) → **(h)**, 가공된 "reasonable care" 인용문구 제거 / ④ 차입금 차감 (d) → **(e)·(f)**, 주거·사업용 부동산 제외 (b)(2) → **(c)** / ⑤ Oxford Univ. Bank holding을 **ICA §47(b) rescission 사적 소권**으로 정확화(§3(c)(7) 직접 판시 아님) / ⑥ SEC Release IC-22597 연도 1996 → **1997**(62 FR 17512). §3(c)(7)(B)도 KE 조항이 아니라 **1996.9.1 이전 §3(c)(1) 펀드 전환 경과조항**으로 정정. 외부 공식 자료 링크만 사용(internal wikilink 0건), 자체완결 유지. -- **[2026-06-13] v2.0 — 공유 산출물 form 전면 작성.** self-contained(internal cross-reference 0건)·규제맥락 우선(§1)·친절한 해설(기술 요소마다 prose 동반)·Internal ID 분리(§2 메타 박스)·Form A 조문 인용 박스·외부 공식 자료 링크. 14개 섹션(§1 규제맥락 → §2 메타 → §3 법적근거 → §4 입력사실 → §5 판정로직 → §6 거절처리 → §7 테스트 → §8 증명서 패턴 → §9 cross-element coordination → §10 3-Layer Solution → §11 frontend/operator → §12 open issues → §13 naming → §14 changelog). -- **[2026-06-13] v1.0 — Element walkthrough 최초 작성.** 33 §2 Spec Sheet 표준 + §3(c)(7) deep dive base. (다수 internal wikilink + 일부 citation 오류 포함 — v2.1에서 정정) - - +| 앞글자 | 카테고리 | +|---|---| +| A | 신원·자격 (매수인 측) ← 본 부품(A-13)이 여기 | +| B | 자산·기술 메타 | +| C | 거래 경로·시점 | +| D | 집계·누적 | +| E | 발행자 측 | +| F | 기타 | +본 부품: **A-13 = "신원·자격 카테고리의 13번째 부품"** +물리적 위치: `산출물/elements/` (모든 Element walkthrough) \ No newline at end of file diff --git a/docs/compliance/elements/B-01.md b/docs/compliance/elements/B-01.md new file mode 100644 index 0000000..c868065 --- /dev/null +++ b/docs/compliance/elements/B-01.md @@ -0,0 +1,692 @@ +# B-01 신상카드 정합 (Manifest Integrity) — 부품 심층 인수인계 문서 (Walkthrough) + +**이 문서는 무엇인가.** Decipher RWA DEX의 컴플라이언스 부품 중 하나인 신상카드 정합 부품(내부 식별자 B-01)을, 미국 증권법을 처음 보는 사람도 이해할 수 있도록 풀어 쓴 인수인계 문서다. 개발자·법무팀·외부 자문 변호사·학회원이 각자 작업의 base로 그대로 쓸 수 있도록 — (1) 이 부품이 지키는 규제 원리가 어디서 왔고 왜 존재하는지, (2) 어떤 사실을 입력받아 (3) 어떤 로직으로 판정하고 (4) 실패하면 어떻게 처리하며 (5) 어떤 테스트로 검증하는지를, 기술 요소마다 풀이를 함께 붙여 설명한다. + +**자체완결 원칙.** 이 문서는 다른 내부 문서를 열지 않아도 단독으로 이해되도록 작성했다. 인용은 미국 연방법·연방규칙·SEC 발행문서·판례 등 외부 공식 자료만 사용한다. + +**⚠ 출처·정정 노트 (읽기 전 필독).** 본 부품의 인용은 다음 1차 출처를 기준으로 한다 — 15 U.S.C. §77e(1933년 증권법 §5)·§77*l*(a)(1)(§12(a)(1))·§77q(a)(§17(a))·§80a-3(c)(7)(투자회사법)·§78q(a)(1)(1934년 증권거래소법 §17(a)(1))은 uscode.house.gov 현행본, 17 C.F.R. §240.17a-4(브로커-딜러 기록 보존)·§240.10b-5·§242.301·§242.302·§242.303(Regulation ATS)은 eCFR 현행본(Title 17, 2026-07-01 기준), SEC Release No. 34-96034(2022 전자기록 개정, 87 FR 66412)는 sec.gov, SEC v. Ralston Purina Co., 346 U.S. 119 (1953)는 govinfo.gov(U.S. Reports)다. 특히 헷갈리기 쉬운 정정 포인트는 다음과 같다(상세는 부록 C). + +- **B-01은 어느 한 조문의 요건을 판정하는 부품이 아니다.** A-13이 §2(a)(51)를, D-01이 §12(g)를 직접 구현하는 것과 달리, B-01이 지키는 것은 조문 하나가 아니라 **모든 조문 판정의 공통 전제** — "판정에 쓰이는 사실이 승인된 진본이고, 자기모순이 없고, 최신인가"다. 미국 증권법의 모든 면제는 사실(fact)에 달려 있고(§3.1~§3.4), 그 사실을 잘못 기록한 채 도는 컴플라이언스 시스템은 '준수처럼 보이는 위반'을 양산한다. B-01의 법적 근거는 그래서 요건 조문이 아니라 ① 사실 오류의 무과실 책임 구조(§5·§12(a)(1)·Ralston Purina), ② 기록의 규제 지위(§17(a)(1)·17a-4·Reg ATS 302/303), ③ 변경 규율의 규제 원형(Rule 301(b)(2)), ④ 허위 사실의 책임(§17(a)·10b-5)의 네 다발이다. + +- **정합(consistency)과 진실(truth)은 다르다.** B-01이 판정하는 것은 "신상카드가 승인된 버전이고, 온·오프체인이 일치하고, 카드 안에 모순이 없고, 만료성 사실이 신선한가"(정합)이지, "카드에 적힌 내용이 세상의 진실인가"(진실)가 아니다. 진실성은 온보딩 심사(Operator)와 발행자의 사실 진실성 보증, 그리고 반대정보 채널(A-12)이 맡는다. 이 구분을 지우면 B-01에 불가능한 책임(오프체인 세계의 진위 판정)이 얹힌다. + +- **부착은 Recipe, 실행은 최우선.** 부착 매트릭스상 B-01은 R1(발행)·R2(재판매)·R3(펀드) 세 자산 Recipe 모두에 필수(●) 부착되는 유일한 자산 메타 부품이다. 그러나 실행 의미론상 B-01의 검사 대상(Manifest)은 곧 Recipe 해석의 입력이므로, Router가 만드는 Element union에서 B-01은 항상 포함되고 **가장 먼저** 실행되어야 한다 — 카드가 오염된 채 다른 부품이 돌면 그 판정 전부가 오염된 사실 위에 선다(§5.2·§8.4). + +- **A-01·A-02 같은 글로벌 게이트는 아니다.** A-01(OFAC)·A-02(국가)는 거래 상대방의 속성을 보는 transaction-level 글로벌 게이트로 Recipe 해석 전에 돈다. B-01은 자산의 속성(신상카드)을 보는 Recipe 부착 부품이다 — 다만 위 항목대로 union 내 실행 순서가 최우선일 뿐이다. + +- **per-tx 게이트와 hash 대사는 다른 채널이다.** 온체인 hot path는 ManifestCore struct의 SLOAD로 끝나야 하므로(온오프체인 하이브리드 원칙), off-chain 전문(full manifest)의 해시 재계산을 매 거래마다 온체인에서 돌리지 않는다. B-01은 2채널로 작동한다 — 채널 1(per-tx 게이트)은 존재·상태·버전·불변식·신선도를 결정론적으로 검사하고, 채널 2(상시 대사 watcher)는 hot path 밖에서 온체인 앵커(fullManifestHash)와 off-chain 전문을 대사해 불일치 시 자산을 SUSPENDED로 전환한다. 채널 2의 결과는 채널 1이 ②단계(상태)에서 읽는다(§5·§8.3). + +- **신선도 부등호.** 만료성 사실은 now − asOf **≤** maxAge이면 유효(이하 허용), **>** maxAge이면 FAIL(초과 탈락)이다. time-lock은 now **≥** approvedAt + delay이면 발효(이상)다. 두 부등호의 방향이 다르므로 경계값 테스트를 분리한다(§5.3·§7). + +- **A-13 §9.5 표현과의 관계.** A-13 문서 §9.5는 B-01을 "체결 직후(post-trade) R3 부품 결과의 모순을 재검증"하는 것으로 서술한다. 전체 부착 매트릭스와 본 문서의 확정 분류는 pre-trade STATELESS 기계 판정이며, A-13이 말한 사후 교차검증은 Element 본체가 아니라 동일 규칙집합을 소비하는 Operator 감사 채널(채널 2의 확장)로 정리한다. 두 서술은 모순이 아니라 시점이 다른 두 소비처다 — 문서 간 표현 통일은 OD-B01-3. + +**양식 메모.** 이 문서는 A-13 v1 인수인계 양식의 번호·헤더·서술 관습을 따른다. 다만 A-13이 증명서 확인형(Pattern B) 부품인 데 반해 B-01은 기계 판정형(Pattern A) 부품이다 — off-chain 판단의 서명 증명서를 확인하는 것이 아니라, 해시·서명·버전·불변식이라는 결정론적 성질을 계산으로 확인한다. 그래서 §8은 증명서 패턴이 아니라 기계 판정 패턴(+2채널 구조)을, ERC-3643 변환은 claim topic이 아니라 Router·ManifestCore·거버넌스 컨트랙트를 다룬다(claim.basis enum은 B-01에 해당 없음 — 상세 §8·§3.20). + +## §1. 규제 맥락 — 이 부품이 지키는 원리는 어디서 왔는가 (Context First) + +**왜 맥락부터 읽어야 하나.** 이 부품은 한 줄로 말하면 "**이 자산의 신상카드(Manifest)가 진본이고, 승인됐고, 자기모순이 없고, 최신인가**"를 거래 직전에 판정한다. 얼핏 순수 기술 검사처럼 보이지만, 이 검사가 없으면 나머지 26개 부품의 법적 판정 전부가 모래 위에 선다. 그 이유는 미국 증권법의 구조 자체에 있다 — 등록의무가 기본값이고 면제는 전부 사실에 달려 있으며, 그 사실을 주장하는 쪽이 입증책임을 진다. 이 절은 그 구조를 먼저 깐다. + +### 1.1 미국 증권규제의 기본 문법 — "등록이 원칙, 면제는 사실" + +미국 연방 증권규제의 출발점은 1933년 증권법 §5다. 등록신고서 없이 증권을 팔면 그 자체로 위법이고, 고의·과실을 묻지 않는다(무과실, §3.1). 여기서 벗어나는 길은 면제(exemption)뿐인데, 모든 면제는 조건부다 — Reg D 506(c)는 "매수인 전원이 accredited investor일 것", ICA §3(c)(7)은 "보유자 전원이 취득 시점에 qualified purchaser일 것 + 공모하지 않을 것", Rule 144는 "보유기간·물량·방식 조건을 전부 충족할 것"을 요구한다. 조건은 전부 **사실 명제**다: "이 자산은 §3(c)(7) 펀드다", "이 발행은 506(c)다", "지금 판매 중이다", "발행주식총수는 N이다". + +그리고 그 사실이 틀렸을 때 벌어지는 일이 이 부품의 존재 이유다. 사실이 하나라도 틀리면 면제 조건 판정 자체가 잘못된 대상을 향하고, 면제가 성립하지 않으면 기본값인 §5 위반으로 되돌아간다. §12(a)(1)은 그 위반에 대해 매수인에게 무조건 해제권(rescission)을 준다 — 파는 쪽의 선의·주의는 항변이 되지 않는다(§3.2). 게다가 SEC v. Ralston Purina(1953)가 확립했듯, 면제를 주장하는 쪽이 그 성립을 입증해야 한다(§3.3). 요컨대 이 시장에서 "사실"은 (a) 틀리면 무과실로 책임지고, (b) 맞다는 것을 스스로 증명해야 하는 대상이다. + +**쉽게 말하면:** 한국 상장 심사에서 상장 신청 서류의 기재가 틀리면 심사 통과 자체가 무효가 되는 것과 같은 구조가, 미국 사모 시장에서는 거래 한 건 한 건에 걸려 있다. 서류(사실)가 곧 적법성의 토대이고, 서류가 틀리면 그 위의 모든 절차가 무너진다. + +### 1.2 Decipher에서 그 "사실"은 어디에 사는가 — Manifest(신상카드) + +Decipher의 4-Layer 아키텍처(Element / Recipe / Manifest / Operator)에서 위 사실 명제들이 사는 곳이 Manifest, 곧 자산별 신상카드다. 신상카드는 상장 심사 서류의 코드판이다 — fundForm: ICA-3c7(이 선언이 QP 검사 A-13과 보유자 수 카운터 D-01을 자동으로 켠다), issuanceExemption: RegD-506c(발행 Recipe R1 연결), distributionStatus(판매 중 여부 — F-04 발행자 매수 금지 검사용), restrictedParties(매수 금지 명단), 12gThresholds(보유자 수 경보 기준), enabledResalePaths(허용 재판매 경로 — C-00 분기), supportedEngines(B-04) 같은 값이 담긴다. + +구현상 신상카드는 온오프체인 하이브리드다. 온체인에는 경량 core(ManifestCore struct — Recipe ID들·facts 비트필드·**fullManifestHash**)만 두어 hot path가 SLOAD 몇 번으로 끝나게 하고, 무거운 전문(override 근거·법률 문서·거버넌스 설정)은 off-chain에 두되 그 해시를 온체인에 앵커한다. 매 거래에서 Router는 이 core를 읽어 "어느 Recipe들이 붙는가"를 해석하고, 활성화된 Recipe들의 Element를 합쳐(cumulative AND) 일괄 검사한다. + +여기서 구조적 급소가 드러난다. **Manifest는 다른 모든 부품의 입력이면서, 동시에 어느 부품이 돌지를 결정하는 해석 기준 자체다.** 카드의 fundForm이 조작되거나 누락되면 A-13·D-01이 아예 부착되지 않은 채 거래가 통과할 수 있다 — "검사가 틀리는" 것이 아니라 "검사가 안 도는" 실패다. 카드의 outstandingUnits가 낡은 값이면 C-08의 1% cap 분모가 틀어진다. 카드가 승인 절차를 우회해 수정됐다면 그 뒤의 모든 PASS 기록은 규제 방어 자산이 아니라 오염된 기록이다. B-01은 이 급소를 지키는 부품이다. + +### 1.3 왜 별도 부품인가 — 기록·변경·책임의 세 갈래 규제 + +"카드가 맞는지 확인한다"를 굳이 법률 부품으로 승격하는 이유는, 미국 규제가 이 확인 행위 자체를 세 갈래로 규율하기 때문이다. + +첫째, **기록 갈래.** 거래 venue(브로커-딜러·ATS)는 자기 영업에 관한 기록을 만들고 정확히 보존할 제정법상 의무를 진다(Exchange Act §17(a)(1), §3.5). 신상카드는 "이 자산이 이 venue에서 어떤 법적 전제로 거래되는가"를 정의하는 문서이므로 그 의무의 정중앙에 있다. 특히 Rule 17a-4(e)(7)은 compliance manual을 **updates·modifications·revisions까지 포함해** 사용 종료 후 3년까지 보존하라고 명령하는데(§3.6), Manifest + Recipe 레지스트리는 정확히 "기계가독 compliance manual"이다 — 버전 이력 보존은 선택이 아니라 규칙 문언이다. 전자기록이라면 Rule 17a-4(f)가 무결성 방식까지 지정한다: WORM(다시 쓸 수 없는 매체) 또는 **audit-trail**(모든 수정·삭제를 time-stamp와 행위자와 함께 남겨 원본 재구성이 가능한 시스템, 2022년 신설, §3.7~§3.8). 온체인 hash 앵커 + 서명된 버전 이력은 이 audit-trail 요건의 자연스러운 구현이다. + +둘째, **변경 갈래.** Reg ATS Rule 301(b)(2)는 ATS 운영 방식의 중대 변경(material change)을 시행 최소 20일 전에 Form ATS amendment로 신고하고, 기재가 부정확해지면 정정 amendment를 내도록 강제하며, 그 신고를 Exchange Act상 "report"로 지위 부여해 허위 기재에 형사 책임까지 연결한다(§3.9). "규칙 문서를 아무 때나 조용히 바꿀 수 없고, 사전에·기록을 남기며·정정 의무와 함께 바꿔야 한다"는 규제 문법 — Decipher의 Manifest 버전 규율(다중서명 + time-lock + 강화 방향 override만 허용 + 정정 버전)은 이 문법의 시스템 내재화다. + +셋째, **책임 갈래.** venue가 참가자들에게 사실상 표시하는 자산 정보(신상카드가 선언하는 면제 구조·거래 조건)가 허위이면, 증권의 offer·sale에서의 중대 사실 허위 진술(Securities Act §17(a), §3.11)과 시장 사기 일반 조항(Rule 10b-5, §3.12)의 사정권에 들어간다. §17(a)(2)·(3)은 고의(scienter) 없이 과실만으로도 SEC 집행이 가능하다는 점에서, "몰랐다"는 방어가 아니다 — 틀린 카드로 시스템을 돌리는 것 자체가 위험이다. + +이 세 갈래가 합쳐지면 결론은 하나다: 신상카드의 무결성 확인은 사람이 가끔 하는 점검이 아니라, **거래마다 기계가 강제하고 그 이력이 규제 양식으로 남는 상시 게이트**여야 한다. 그것이 B-01이다. + +### 1.4 Decipher 시스템에서 왜 중요한가 — Existential Risk의 증폭기 차단 + +개별 부품의 실패는 국지적이다 — A-13이 오작동하면 무자격자 한 명이 들어온다. B-01의 실패는 전역적이다 — 카드가 오염되면 그 자산의 **모든 거래에서 모든 부품이** 잘못된 전제로 돈다. §3(c)(7) 선언이 빠진 카드는 QP 검사 없는 펀드 거래를, 낡은 분모는 내부자 물량 초과를, 우회 수정된 restrictedParties는 Reg M 위반 매수를 조용히 통과시킨다. 더 나쁜 것은 기록이다: 시스템은 매 거래에서 "검사 통과"를 남기므로, 오염된 카드 위의 통과 기록은 사후 조사에서 "체계적으로 잘못 운영된 증거"가 된다 — Ralston Purina의 입증책임 구조에서, 증명 자산이 오히려 부인 증거로 뒤집히는 최악의 시나리오다. + +역으로 B-01이 제대로 서 있으면, Decipher의 핵심 명제인 "Regulation as Data"(자산이 바뀌어도 코드는 그대로, 데이터만 바뀐다)가 법적으로도 성립한다 — 데이터가 곧 규제 준수의 실체라면, 그 데이터의 무결성 보증이 곧 준수의 보증이기 때문이다. B-01은 시스템 전체의 신뢰 루트(root of trust)를 지키는 부품이다. + +## §2. 메타 정보 (Internal Identifier Box) + +아래는 Decipher 내부 PM 규약상의 식별자·분류값을 한곳에 모은 박스다. 본문에서는 이 코드들을 단독으로 쓰지 않고 "본 부품"·"신상카드 정합 부품" 같은 자연어로 부른다. + +| 항목 | 값 | 한 줄 풀이 | +| --- | --- | --- | +| 부품 이름 | 신상카드 정합 (Manifest Integrity) | 모든 검사의 입력 사실을 지키는 무결성 검사원 | +| 검사 대상 | 자산 Manifest의 존재·활성 상태·버전 승인(다중서명 + time-lock)·내부 불변식(cross-field 정합)·만료성 사실 신선도 + 온체인 hash 앵커와 off-chain 전문의 일치(상시 대사) | "이 거래가 딛고 선 신상카드가 진본·승인·최신·무모순인가" | +| Internal ID | B-01 (Decipher PM 규약) | 부품 일련번호 | +| 검증 방식 | 기계 판정형(Pattern A) — 해시·서명·버전·불변식의 결정론적 확인 | 판단 0, 계산 100 — reasonable belief가 낄 자리가 없다 | +| Timing | pre-trade (Element union 내 실행 순서 최우선) | 다른 부품이 사실을 소비하기 전에 사실부터 검사 | +| Stateful 여부 | STATELESS (Element 한정) | per-tx 판정은 현재 유효 버전의 정적 스냅샷 검사. 검사 대상인 Manifest 자체는 거버넌스 평면에서 버전 관리되는 상태이나, 판정이 과거 거래의 누적에 의존하지 않는다 | +| 주 활성화 Recipe | R1(Reg D 506(c) 발행)·R2(재판매)·R3(ICA §3(c)(7) 펀드) 전부 필수 | 세 자산 Recipe 모두에 ● 부착되는 유일한 부품군(A-01·A-02와 함께)이자 유일한 자산 메타 필수 부품 | +| Cumulative Recipe | 해당 없음 (R4 행위감시에는 미부착) | R4는 자산 사실이 아니라 행위 패턴을 본다 | +| Cascade Element | 없음 — B-01은 다른 부품을 호출하지 않는다 | 반대로 사실 소비 부품 전원(A-03·A-13·C-00·C-08·D-01·F-04·B-04 등)이 B-01의 보증을 전제한다 — cascade의 역방향(공급자) | +| 성숙도 | 완료(재정의 done) → 본 문서로 기준서 확정 | ManifestCore + hash anchor 재정의 반영분 | +| 파일·위치 | B-01_manifest-integrity.md · 산출물/elements/ | 산출물 경로 | + +## §3. 법적 근거 (Layer 1 → 2 → 3) + +**읽는 법.** 법적 근거는 세 겹이다 — Layer 1(조문)은 의회가 만든 법률 텍스트(statute), Layer 2(규칙)는 SEC가 그것을 실무 수준으로 구체화한 연방규칙(rule), Layer 3(해석)은 판례·SEC 발행문서가 모호한 부분을 메운 해석이다. 아래 §3.0.2 표 1의 "종류" 칸이 그대로 Layer에 대응한다 — Statute = Layer 1(§5·§12(a)(1)·§17(a)·§3(c)(7)·Exchange Act §17(a)(1)), SEC Rule = Layer 2(17a-4·Reg ATS 301/302/303·10b-5), Case·SEC Release = Layer 3(Ralston Purina·Release 34-96034). 본 절은 조문이 작동하는 논리 흐름 순서로 배열돼 §3.1~§3.12 번호를 그대로 유지하며, 각 항목이 어느 Layer인지는 이 표로 확인하면 된다. + +B-01의 §3이 다른 부품과 다른 점 하나를 미리 밝힌다. A-13·D-01의 §3은 "요건 조문 → 요건 분해"의 구조지만, B-01이 지키는 것은 요건이 아니라 **요건 판정의 전제**이므로, 본 절의 조문들은 "B-01이 그 조문을 판정한다"가 아니라 "그 조문이 B-01이라는 설계를 명령한다"는 관계로 읽어야 한다. 흐름은 네 다발이다 — ① 왜 사실인가(§3.1~§3.3: 무과실 책임 + 입증책임), ② 무슨 사실인가(§3.4: 사실 의존 면제의 대표례), ③ 그 사실 기록의 규제 지위(§3.5~§3.10: 기록 작성·보존·전자기록 무결성·변경 규율), ④ 허위 사실의 책임(§3.11~§3.12). + +### 3.0 법조문 관계 플로우차트 (개발자용) + +아래 그림은 위 네 다발이 B-01 설계로 수렴하는 흐름을 정리한 것이다 — §5 무과실 기본값 → §12(a)(1) rescission → Ralston Purina 입증책임(사실은 증명 가능해야 한다) → §3(c)(7) 같은 사실 의존 면제(Manifest가 그 사실의 기계가독 선언) → 사실은 규제 '기록'(§17(a)(1) → 17a-4(e)(7) compliance manual 버전 보존 → 17a-4(f) 전자기록 audit-trail/WORM) → 변경 규율의 원형(Reg ATS 301(b)(2)) → 허위 사실의 책임(§17(a)·10b-5) → B-01의 판정 구조(존재 → 상태 → 버전 → 불변식 → 신선도 + hash 상시 대사). 각 조항 상세는 §3.1~§3.12. + +**범례.** + +- 파랑 = 제정법(Layer 1) +- 초록 = SEC 규칙(Layer 2) +- 주황 = 판례·Release(Layer 3) +- 빨강 = 책임 조항(허위 사실의 귀결) +- 보라 = B-01 판정 구조(수렴점) + +![그림 3.0](figures/B-01_fig30.png) + +*그림 3.0 — 법조문 관계 흐름: 무과실 책임·입증책임 → 사실 의존 면제 → 기록·변경 규율 → B-01 (개발자용)* + +### 3.0.1 실제 BUIDL-like 자산에 어떻게 적용되나 + +**(재확인) 본 서술은 실제 BlackRock BUIDL의 발행 표준·transfer architecture·현재 운영 조건을 단정하지 않는다 — BUIDL-like §3(c)(7) private fund interest를 ERC-3643 테스트 토큰으로 모델링한 것이다.** + +BUIDL-like 자산의 신상카드에는 최소 다음이 담긴다: fundForm = ICA-3c7(→ R3·A-13·D-01 활성), issuanceExemption = RegD-506c(→ R1·A-03 활성), reportingStatus = non-reporting, nmsStatus = non-NMS, distributionStatus = { active: true, basis: CONSERVATIVE_DEFAULT }(→ F-04 상시 활성), restrictedParties(발행자·계열·판매 참여 entity), 12gThresholds = { recordHolders: 2000, nonAccredited: 500 }(→ D-01 상한), enabledResalePaths(→ C-00), supportedEngines(→ B-04), legalClassId(D-01 class 분리), fullManifestHash(off-chain 전문 앵커). + +B-01 관점에서 BUIDL 카드의 급소 세 곳: ① **fundForm ↔ fundRecipeId 정합** — fundForm이 ICA-3c7인데 fundRecipeId = 0(펀드 Recipe 미연결)이면 QP 검사가 아예 부착되지 않는 구조적 구멍이므로 불변식 위반으로 즉시 차단한다(§7 T4, 가장 흔한 오구현 지점). ② **distributionStatus의 CONSERVATIVE_DEFAULT** — 상시 발행 펀드는 active = true가 기본값이고, 이 값을 완화(false)하는 변경은 비조치의견서 같은 법적 근거가 등록된 정정 버전으로만 가능하다 — 근거 없는 완화 시도는 거버넌스에서 반려되고, 우회 수정은 버전 승인 검사에서 잡힌다. ③ **12g 사실의 신선도** — 총자산·발행주식총수처럼 D-01·C-08이 소비하는 수치는 basisAsOf가 붙는 만료성 사실이며, maxAge를 넘기면 그 수치를 쓰는 거래가 멈춘다(사실이 낡은 채 상한 판정을 하지 않는다). + +### 3.0.2 조문 근거표 (Authority) + 순서·중요성 + +아래 두 표가 §3의 지도다. **표 1**(Authority)은 각 근거가 어떤 종류(=Layer)이고 무슨 내용이며 B-01에 어떻게 닿는지를, **표 2**(순서·중요성)는 아래 §3.1~§3.12 소단원의 읽는 순서(논리 흐름)와 중요성을 보여준다. 제정법 출처는 uscode.house.gov로 통일했으며 govinfo.gov/link/uscode/... 딥링크도 동일한 1차 출처다. + +**표 1 — Authority(근거 목록)** + +| 종류 | Authority | 내용 | B-01 관련성 | Direct/Supporting | Official URL | +| --- | --- | --- | --- | --- | --- | +| Statute | Securities Act §5 · 15 U.S.C. §77e(a)·(c) | 미등록 offer·sale 금지(무과실 기본값) | 사실 오류의 종착점 — 정합 실패 = 면제 붕괴 = §5 회귀 | Background | uscode.house.gov | +| Statute | Securities Act §12(a)(1) · 15 U.S.C. §77l(a)(1) | §5 위반 매도인에 대한 무조건 rescission | 선의 항변 없음 → 기계 강제 설계 명령 | Background | uscode.house.gov | +| Case | SEC v. Ralston Purina Co. · 346 U.S. 119, 126 (1953) | 면제 주장자가 입증책임 부담 | 사실은 증명 가능해야 — B-01 판정·대사 기록이 그 증명 자산 | Direct(설계 원리) | govinfo.gov | +| Statute | ICA §3(c)(7)(A) · 15 U.S.C. §80a-3(c)(7)(A) | 전원 QP + no public offering의 사실 의존 면제 | fundForm 선언의 무결성 = A-13·D-01 활성화 트리거의 무결성 | Direct(활성화 정합) | uscode.house.gov | +| Statute | Exchange Act §17(a)(1) · 15 U.S.C. §78q(a)(1) | 브로커-딜러 등 기록 작성·보존의 제정법 수권 | Manifest = "records ... as the Commission ... prescribes"의 대상 기록 | Direct | uscode.house.gov | +| SEC Rule | Rule 17a-4(e)(7) · 17 C.F.R. §240.17a-4(e)(7) | compliance·supervisory·procedures manual을 updates·modifications·revisions 포함 보존 | Manifest + Recipe 레지스트리 = 기계가독 compliance manual → 버전 이력 보존 의무 | Direct | ecfr.gov | +| SEC Rule | Rule 17a-4(f)(1)(ii)·(f)(2) · 17 C.F.R. §240.17a-4(f) | 전자기록: audit-trail 대안((f)(2)(i)(A)) 또는 WORM((B)) | hash 앵커·서명 버전 이력 = audit-trail 요건의 온체인 구현 | Direct | ecfr.gov | +| SEC Release | Release No. 34-96034 · 87 FR 66412 (2022-11-03) | 2022 전자기록 개정 — audit-trail alternative 채택 | "수정·삭제 시 원본 재구성 가능"이 규제가 인정한 무결성 방식임을 확인 | Supporting | sec.gov | +| SEC Rule | Reg ATS Rule 301(b)(2) · 17 C.F.R. §242.301(b)(2) | Form ATS 초기 신고·중대변경 20일 전 amendment·부정확 정정·report 지위 | Manifest 버전 규율(사전 time-lock·정정 버전·기록)의 규제 원형 | Conditional(ATS 등록 시) | ecfr.gov | +| SEC Rule | Reg ATS Rule 301(b)(8)·302·303 · 17 C.F.R. §242.301(b)(8)·§242.302·§242.303 | ATS 기록 작성·보존 — 303(a)(2)(ii) Form ATS 사본 기업 존속기간 보존 | venue 기록 규율 — manifest 버전 이력의 보존 기간·형식 근거 | Conditional(ATS 등록 시) | ecfr.gov | +| Statute | Securities Act §17(a) · 15 U.S.C. §77q(a) | offer·sale에서의 사기·중대 허위 진술 금지 | 허위 카드로 운영되는 venue의 책임 노출 — (a)(2)·(3)은 과실로 족함 | Supporting | uscode.house.gov | +| SEC Rule | Rule 10b-5 · 17 C.F.R. §240.10b-5 | 매매 관련 사기·허위 진술 일반 금지 | 동일 노출의 1934년법 축 | Supporting | ecfr.gov | + +**표 2 — 조문 순서·중요성 한눈에 보기** + +| 순서 | 조문 | 중요성 | B-01이 그걸로 하는 일 | +| --- | --- | --- | --- | +| §3.1 | Securities Act §5 — 등록의무 기본값 | 배경(핵심 전제) | 안 함 — 정합 실패의 종착점을 정의 | +| §3.2 | §12(a)(1) — 무조건 rescission | 배경(핵심 전제) | 안 함 — "선의 항변 없음"이 기계 강제를 명령 | +| §3.3 | Ralston Purina — 입증책임 | 핵심(설계 원리) | 판정·대사 이력을 증명 자산으로 남기는 근거 | +| §3.4 | ICA §3(c)(7)(A) — 사실 의존 면제 | 핵심(활성화 정합) | fundForm ↔ fundRecipeId 불변식의 법적 무게 | +| §3.5 | Exchange Act §17(a)(1) — 기록 수권 | 핵심 | Manifest를 규제 기록으로 자리매김 | +| §3.6 | Rule 17a-4(e)(7) — manual 보존 | 핵심 | 버전·수정 이력 보존을 판정 전제로 | +| §3.7 | Rule 17a-4(f) — 전자기록 무결성 | 핵심 | hash 앵커·audit-trail 채널(채널 2)의 규제 문법 | +| §3.8 | Release 34-96034 — 2022 개정 | 보조 | 안 함 — (f)(2)(i)(A)의 채택 취지 확인 | +| §3.9 | Reg ATS 301(b)(2) — 변경 규율 | 조건부(핵심 원형) | 버전 수명주기(사전 대기·정정·기록)의 원형 | +| §3.10 | Reg ATS 301(b)(8)·302·303 — 기록 | 조건부 | 보존 기간·형식(3년/존속기간)의 근거 | +| §3.11 | Securities Act §17(a) — 허위 진술 | 보조(책임) | 안 함 — 오염 카드 운영의 책임 노출 정의 | +| §3.12 | Rule 10b-5 — 시장 사기 일반 | 보조(책임) | 안 함 — 동일 노출의 1934년법 축 | +| §3.19 | Sub-요건 분해 매트릭스 | — | 위 원리를 원자적 검증 단위로 분해 | +| §3.20 | ERC-3643 변환 총정리 | — | §3.1~§3.12의 시스템 매핑을 한 표로 | + +**경계 — 이 부품이 다루지 않는 것.** 아래는 같은 자산·같은 카드 필드에 작동하지만 B-01이 아니라 다른 부품·레이어가 책임진다 — 누락이 아니라 소관 분리이며, B-01 안에 끌어다 구현하지 않는다. + +- **카드에 담긴 개별 사실의 법적 판정** — fundForm이 켠 QP 요건은 A-13, 12gThresholds의 상한 집계는 D-01, distributionStatus가 켠 매수 금지는 F-04, enabledResalePaths의 경로 분기는 C-00 소관. B-01은 그 사실이 진본·승인·최신·무모순임만 보증한다. +- **카드 내용의 진실성** — 발행자가 신고한 사실이 세상의 진실인가는 온보딩 6단계 심사(Operator)·발행자의 사실 진실성 보증·반대정보 채널(A-12) 소관(§4.2). +- **토큰 컨트랙트 자체의 표준 준수** — ERC-3643 인터페이스 구현 여부는 B-02, restrictedFlag 메타데이터는 B-03 소관. B-01은 "카드의 tokenStandard 기재와 실제 설정의 지시 관계"까지만 본다. +- **Form ATS 신고 행위 자체** — 규제기관 제출은 Operator의 법적 이행 행위. B-01은 그 규율을 내부 버전 규율의 원형으로 삼고(§3.9), 이중 트랙 정렬은 OD-B01-5로 남긴다. + +### 3.1 Securities Act §5 — 등록의무 기본값 (무과실) [uscode.house.gov] + +- **조항**: Securities Act of 1933 §5(a)·(c), 15 U.S.C. §77e(a)·(c) — uscode.house.gov + +- **핵심 원문**: (a) Unless a registration statement is in effect as to a security, it shall be unlawful for any person, directly or indirectly— (1) to make use of any means or instruments of transportation or communication in interstate commerce or of the mails to sell such security through the use or medium of any prospectus or otherwise; or (2) to carry or cause to be carried through the mails or in interstate commerce, by any means or instruments of transportation, any such security for the purpose of sale or for delivery after sale. … (c) It shall be unlawful for any person, directly or indirectly, to make use of any means or instruments of transportation or communication in interstate commerce or of the mails to offer to sell or offer to buy through the use or medium of any prospectus or otherwise any security, unless a registration statement has been filed as to such security, or while the registration statement is the subject of a refusal order or stop order or (prior to the effective date of the registration statement) any public proceeding or examination under section 77h of this title. + +- **한국어**: (a) 어느 증권에 관하여 등록신고서가 효력을 갖고 있지 아니하는 한, 누구든지 직접 또는 간접으로 — (1) 주간통상의 운송·통신 수단 또는 우편을 이용하여 prospectus 그 밖의 수단으로 그 증권을 판매하는 것; 또는 (2) 판매 목적으로 또는 판매 후 인도를 위하여 그 증권을 우편 또는 주간통상으로 운반하거나 운반하게 하는 것은 위법이다. … (c) 어느 증권에 관하여 등록신고서가 제출되어 있지 아니하는 한(또는 그 등록신고서가 거부명령·정지명령의 대상이거나 효력 발생 전의 공개 절차·심사 대상인 동안), 누구든지 직접 또는 간접으로 주간통상의 운송·통신 수단 또는 우편을 이용하여 prospectus 그 밖의 수단으로 그 증권의 매도 청약 또는 매수 청약을 하는 것은 위법이다. + +- **쉬운 설명**: 미국 증권규제의 기본값이다 — 등록 없이는 팔지도(a), 청약하지도(c) 못한다. 조문 어디에도 "고의로"·"과실로"가 없다. 위법의 성립에 마음 상태를 묻지 않는 무과실 구조이며, 여기서 벗어나는 유일한 길이 면제다. 그리고 §1.1에서 본 대로 면제는 전부 사실 조건이다. 그래서 이 조문은 B-01에게 이렇게 읽힌다: **신상카드의 사실이 틀리는 순간 도착하는 곳이 바로 여기다.** 정합 실패는 기술 버그가 아니라 §5 위반으로 가는 문이다. + +- **PASS/FAIL 반영**: 간접 ✕ — B-01이 §5를 판정하지 않는다. 정합 실패의 법적 종착점으로서 fail-closed(모호하면 차단) 설계 원칙의 근거가 된다. + +- **ERC-3643 변환**: 직접 매핑 없음. Router의 cumulative AND 구조(하나라도 FAIL이면 revert)와 B-01의 union 내 최우선 실행이 이 조문의 "기본값 = 금지" 구조를 코드에 옮긴 것이다. + +### 3.2 Securities Act §12(a)(1) — §5 위반의 무조건 rescission [uscode.house.gov] + +- **조항**: Securities Act §12(a)(1), 15 U.S.C. §77l(a)(1) — uscode.house.gov + +- **핵심 원문**: (a) In general. Any person who— (1) offers or sells a security in violation of section 77e of this title, or … shall be liable, subject to subsection (b), to the person purchasing such security from him, who may sue either at law or in equity in any court of competent jurisdiction, to recover the consideration paid for such security with interest thereon, less the amount of any income received thereon, upon the tender of such security, or for damages if he no longer owns the security. + +- **한국어**: (a) 일반 원칙. 다음에 해당하는 자는 — (1) §77e(§5)를 위반하여 증권을 청약하거나 판매한 자는 … subsection (b)를 조건으로, 그로부터 그 증권을 매수한 자에 대하여 책임을 지며, 매수인은 관할 법원에서 보통법상 또는 형평법상 소를 제기하여, 그 증권을 반환하면서 지급한 대금에 이자를 더한 금액(그로부터 수취한 수익은 공제)을 회수하거나, 더 이상 그 증권을 보유하지 아니하는 경우 손해배상을 청구할 수 있다. + +- **쉬운 설명**: §5 위반의 민사적 귀결이다. 매수인은 이유를 묻지 않고 "물러달라"고 할 수 있다 — 매도인의 고의·과실도, 매수인의 신뢰(reliance)도, 손해의 인과도 요건이 아니다(같은 조 (a)(2)의 허위 진술 책임에는 reasonable care 항변이 있지만, (a)(1)의 §5 위반 책임에는 그런 항변 문구 자체가 없다). B-01에게 이 조문이 명령하는 것은 검증의 **방식**이다: 선의가 항변이 되지 않는 책임 구조 아래에서, 사실 무결성을 사람의 성실성이나 사후 점검에 맡길 수 없다 — 거래마다 기계가 결정론적으로 강제해야 하고, "그때는 몰랐다"는 상태 자체가 발생하지 않게 해야 한다. + +- **PASS/FAIL 반영**: 간접 ✕ — 판정 대상이 아니라 판정 방식(기계 강제·fail-closed)의 근거. + +- **ERC-3643 변환**: 직접 매핑 없음. B-01의 모든 FAIL 코드가 사람 개입 없는 revert로 구현되는 이유가 이 조문이다 — 예외 승인 경로(§6.2)조차 거버넌스 평면의 서명·기록으로만 존재한다. + +### 3.3 SEC v. Ralston Purina Co. — 면제 주장자의 입증책임 [govinfo.gov] + +- **조항**: SEC v. Ralston Purina Co., 346 U.S. 119, 126 (1953) — govinfo.gov (U.S. Reports) + +- **핵심 원문**: Keeping in mind the broadly remedial purposes of federal securities legislation, imposition of the burden of proof on an issuer who would plead the exemption seems to us fair and reasonable. + +- **한국어**: 연방 증권 입법의 광범위한 구제적 목적을 염두에 둘 때, 면제를 주장하고자 하는 issuer에게 입증책임을 지우는 것이 우리에게는 공정하고 합리적으로 보인다. + +- **쉬운 설명**: 사모 면제 법리의 뿌리 판결이다(비공모 여부는 offeree가 등록이 줄 정보 없이도 스스로를 지킬 수 있는가라는 기능적 기준으로 판단 — A-13 §3.18이 상술). B-01에게 중요한 것은 그중 입증책임 문장이다: 면제가 성립한다는 사실은 **주장하는 쪽이 증명해야** 한다. Decipher가 매 거래에서 남기는 판정 로그·카드 버전 이력·hash 대사 기록은 바로 이 증명의 원료다. 뒤집어 말하면, 카드가 오염된 채 쌓인 "통과" 기록은 증명 자산이 아니라 반대 증거가 된다(§1.4). 그래서 B-01은 판정만 하지 않고 판정의 전제(카드 무결성)와 그 확인 이력 자체를 기록으로 남긴다 — 증명 가능성이 곧 설계 요건이다. + +- **PASS/FAIL 반영**: 직접 ○(설계 원리) — 개별 거래의 PASS/FAIL 분기 조건은 아니나, "판정 + 판정 근거의 보존"이라는 B-01의 이중 산출(게이트 결과 + audit trail)을 직접 명령한다. + +- **ERC-3643 변환**: 판정 이벤트(elementId = B-01, reasonCode, manifestVersion, timestamp)를 불변 로그로 emit; 대사 채널의 확인 이력을 Operator 보존 양식으로 export(§11). 기록이 없으면 증명이 없다. + +### 3.4 ICA §3(c)(7)(A) — 사실 의존 면제의 대표례 (fundForm 트리거) [uscode.house.gov] + +- **조항**: Investment Company Act §3(c)(7)(A), 15 U.S.C. §80a-3(c)(7)(A) — uscode.house.gov + +- **핵심 원문**: Any issuer, the outstanding securities of which are owned exclusively by persons who, at the time of acquisition of such securities, are qualified purchasers, and which is not making and does not at that time propose to make a public offering of such securities. Securities that are owned by persons who received the securities from a qualified purchaser as a gift or bequest, or in a case in which the transfer was caused by legal separation, divorce, death, or other involuntary event, shall be deemed to be owned by a qualified purchaser, subject to such rules, regulations, and orders as the Commission may prescribe as necessary or appropriate in the public interest or for the protection of investors. + +- **한국어**: 그 발행 증권이, 해당 증권의 취득 시점에 qualified purchaser인 자들에 의하여 배타적으로(exclusively) 소유되고, 그 시점에 해당 증권의 public offering(공모)을 하고 있지 아니하며 또한 그때 이를 하려고 제안하지도 아니하는 모든 issuer. qualified purchaser로부터 증여(gift) 또는 유증(bequest)으로 증권을 받은 자, 또는 법적 별거·이혼·사망 그 밖의 비자발적 사건으로 이전이 발생한 경우의 그 증권은, Commission이 공익 또는 투자자 보호를 위하여 필요·적절하다고 정하는 규칙·규정·명령을 조건으로, qualified purchaser가 소유한 것으로 본다. + +- **쉬운 설명**: 사실 의존 면제의 대표례로서 인용한다(요건의 실체 — QP 정의·전원 QP 판정 — 는 A-13 문서가 전담하며 여기서 재론하지 않는다). B-01의 관점은 이 조문의 첫 두 단어에 있다: "Any issuer, the outstanding securities of which are owned exclusively by …" — 면제의 주어는 issuer이고, 성립 여부는 그 issuer의 **속성 사실**이다. Decipher에서 그 속성 사실을 선언하는 곳이 신상카드의 fundForm = ICA-3c7이고, 이 한 필드가 A-13(전원 QP)과 D-01(보유자 수)의 부착을 켠다. 즉 이 조문의 준수 여부 판정이 시작되기도 전에, **선언 자체의 무결성**이라는 선행 문제가 있다 — 필드가 조작·누락되면 검사가 틀리는 게 아니라 검사가 안 돈다. §3.19의 불변식 B01-INV-1(fundForm ↔ fundRecipeId)이 이 선행 문제의 원자 단위다. + +- **PASS/FAIL 반영**: 직접 ○(활성화 정합 한정) — B-01은 이 조문의 요건(전원 QP·no public offering)을 판정하지 않고, 이 조문을 켜는 선언의 정합(fundForm과 fundRecipeId·부착 부품 집합의 상호 일치)만 판정한다. + +- **ERC-3643 변환**: ManifestCore.factsPacked의 fundForm 비트 ↔ ManifestCore.fundRecipeId ≠ 0 ↔ Recipe R3의 elementSubset ⊇ {A-13, D-01} — 세 층의 일치를 불변식으로 검사. 불일치 시 FAIL_FACTS_INCONSISTENT. + +### 3.5 Exchange Act §17(a)(1) — 기록 작성·보존의 제정법 수권 [uscode.house.gov] + +- **조항**: Securities Exchange Act of 1934 §17(a)(1), 15 U.S.C. §78q(a)(1) — uscode.house.gov + +- **핵심 원문**: (1) Every national securities exchange, member thereof, broker or dealer who transacts a business in securities through the medium of any such member, registered securities association, registered broker or dealer, registered municipal securities dealer municipal advisor,, registered securities information processor, registered transfer agent, nationally recognized statistical rating organization, and registered clearing agency and the Municipal Securities Rulemaking Board shall make and keep for prescribed periods such records, furnish such copies thereof, and make and disseminate such reports as the Commission, by rule, prescribes as necessary or appropriate in the public interest, for the protection of investors, or otherwise in furtherance of the purposes of this chapter. + +- **한국어**: (1) 모든 national securities exchange와 그 회원, 그러한 회원을 매개로 증권업을 영위하는 broker 또는 dealer, 등록 증권협회, 등록 broker 또는 dealer, 등록 municipal securities dealer·municipal advisor, 등록 증권정보처리기관, 등록 transfer agent, 국가공인 신용평가기관, 등록 clearing agency 및 MSRB는, Commission이 공익·투자자 보호 또는 본 장의 목적 달성을 위하여 필요·적절하다고 규칙으로 정하는 바에 따라, 소정 기간 동안 기록을 작성·보존하고, 그 사본을 제공하며, 보고서를 작성·배포하여야 한다. (원문의 "municipal securities dealer municipal advisor,,"의 중복 쉼표는 법전 원문 그대로다 — 편집 오류 주석 "So in original.") + +- **쉬운 설명**: 미국 시장 인프라 전체에 걸리는 기록 의무의 제정법 뿌리다. 구체적으로 무엇을 어떻게 보존할지는 SEC 규칙(17a-3·17a-4, ATS라면 Reg ATS 302·303)에 위임되지만, "기록을 만들고 보존하라"는 명령 자체는 의회가 직접 걸었다. Decipher의 거래 venue 주체(브로커-딜러 등록 예정, Reg ATS 경로)는 이 수권 아래의 규칙들을 그대로 받는다. B-01에게 이 조문은 신상카드의 법적 신분을 정한다: 카드는 내부 편의 데이터가 아니라, 이 수권 체계가 말하는 "records" — 만들 의무, 정확할 의무, 보존할 의무, 제출할 의무가 붙는 규제 기록이다. + +- **PASS/FAIL 반영**: 간접 ✕ — 판정 조건이 아니라 판정 대상(Manifest)의 규제 지위를 정의. + +- **ERC-3643 변환**: 직접 매핑 없음. Manifest 버전 이력·B-01 판정 로그·대사 이력을 "규제 보존 양식으로 내보내는" Operator export 경로(§11)가 이 수권의 이행 통로다. + +### 3.6 Rule 17a-4(e)(7) — compliance manual의 버전 포함 보존 [ecfr.gov] + +- **조항**: 17 C.F.R. §240.17a-4(e)(7) — ecfr.gov (Title 17 현행본) + +- **핵심 원문**: (e) Every member, broker or dealer subject to §240.17a-3 must maintain and preserve in an easily accessible place: … (7) Each compliance, supervisory, and procedures manual, including any updates, modifications, and revisions to the manual, describing the policies and practices of the member, broker or dealer with respect to compliance with applicable laws and rules, and supervision of the activities of each natural person associated with the member, broker or dealer until three years after the termination of the use of the manual. + +- **한국어**: (e) §240.17a-3의 적용을 받는 모든 member·broker·dealer는 접근이 용이한 장소에 다음을 유지·보존하여야 한다: … (7) 적용 법령·규칙의 준수와 관련한 그 member·broker·dealer의 정책·관행, 그리고 소속 자연인 각각의 활동에 대한 감독을 기술하는 각 compliance·supervisory·procedures manual — **그 manual에 대한 모든 update·modification·revision을 포함하여** — 을, 그 manual의 사용 종료 후 3년이 될 때까지. + +- **쉬운 설명**: 이 규칙의 급소는 "including any updates, modifications, and revisions"다. 준수 매뉴얼은 최신본만 보관하면 되는 문서가 아니라, **모든 중간 버전이 보존 대상**이다 — 감독기관이 "그 시점에 어떤 규칙으로 운영했나"를 재구성할 수 있어야 하기 때문이다. Decipher에서 "적용 법령 준수의 정책·관행을 기술하는 문서"의 기계가독판이 바로 Manifest(자산별)와 Recipe/Element 레지스트리(규칙 본체)다. 따라서 이 규칙은 B-01 설계에 두 가지를 직결한다: ① 카드의 과거 버전은 삭제 불가·전량 보존 대상이고(사용 종료 후에도 3년 이상), ② B-01의 버전 검사(§5.2 ③)는 "현재 버전이 승인 이력 사슬 위에 있는가"를 볼 수 있는 이력 구조를 전제한다 — 이력 없는 카드는 그 자체로 보존 의무 위반 상태다. + +- **PASS/FAIL 반영**: 직접 ○(전제 구조) — 개별 거래에서 (e)(7) 위반을 판정하지는 않으나, ③버전 검사가 딛는 이력 구조(승인 집합·버전 사슬)의 법적 근거이며, 이력 파손이 감지되면 REVIEW_MANIFEST_DRIFT로 운영 검토에 올린다. + +- **ERC-3643 변환**: ManifestRegistry가 버전별 (coreHash, fullManifestHash, approvedAt, signers[]) 튜플을 append-only로 축적; 폐기(retire)는 삭제가 아니라 상태 전환. "사용 종료 후 3년" 카운트는 Operator 보존 정책 필드(retiredAt + 3y)로 관리. + +### 3.7 Rule 17a-4(f) — 전자기록의 무결성 방식: audit-trail 또는 WORM [ecfr.gov] + +- **조항**: 17 C.F.R. §240.17a-4(f)(1)(ii)·(f)(2)(i) — ecfr.gov (Title 17 현행본, 2022 개정 반영) + +- **핵심 원문**: (f) Subject to the conditions set forth in this paragraph (f), the records required to be maintained and preserved pursuant to §240.17a-3 and this section may be immediately produced or reproduced by means of an electronic recordkeeping system or by means of micrographic media and be maintained and preserved for the required time in that form. (1) For purposes of this paragraph (f): … (ii) The term electronic recordkeeping system means a system that preserves records in a digital format in a manner that permits the records to be viewed and downloaded; … (2) An electronic recordkeeping system must: (i)(A) Preserve a record for the duration of its applicable retention period in a manner that maintains a complete time-stamped audit trail that includes: (1) All modifications to and deletions of the record or any part thereof; (2) The date and time of actions that create, modify, or delete the record; (3) If applicable, the identity of the individual creating, modifying, or deleting the record; and (4) Any other information needed to maintain an audit trail of the record in a way that maintains security, signatures, and data to ensure the authenticity and reliability of the record and will permit re-creation of the original record if it is modified or deleted; or (B) Preserve the records exclusively in a non-rewriteable, non-erasable format; + +- **한국어**: (f) 본 항의 조건을 충족하는 한, §240.17a-3 및 본 조에 따라 유지·보존이 요구되는 기록은 전자기록시스템 또는 마이크로그래픽 매체로 즉시 생산·재생산되고 그 형태로 소정 기간 유지·보존될 수 있다. (1) 본 항에서: … (ii) "전자기록시스템"이란 기록을 열람·다운로드할 수 있는 방식으로 디지털 형식으로 보존하는 시스템을 말한다; … (2) 전자기록시스템은 다음을 하여야 한다: (i)(A) 기록을 그 보존기간 동안, 다음을 포함하는 완전한 time-stamp 부착 audit trail을 유지하는 방식으로 보존할 것: (1) 그 기록 또는 그 일부에 대한 모든 수정과 삭제; (2) 기록을 생성·수정·삭제하는 행위의 일시; (3) 해당되는 경우, 생성·수정·삭제하는 개인의 신원; (4) 보안·서명·데이터를 유지하여 기록의 진정성과 신뢰성을 보장하고, 기록이 수정 또는 삭제된 경우 **원본의 재구성을 가능하게 하는** 방식으로 audit trail을 유지하는 데 필요한 그 밖의 정보; 또는 (B) 기록을 오로지 재기록 불가·삭제 불가 형식으로 보존할 것; + +- **쉬운 설명**: 규제가 인정하는 전자기록 무결성 방식은 두 갈래다 — (B) WORM(애초에 못 고치게) 또는 (A) audit-trail(고치더라도 누가·언제·무엇을 고쳤는지 전부 남겨 원본을 언제든 재구성). 2022년 개정 전에는 WORM만 허용됐고, (A)는 분산원장 같은 기술을 수용하기 위해 신설됐다(§3.8). Decipher의 신상카드 관리가 정확히 (A)의 구현이다: 온체인 fullManifestHash 앵커(변조 시 hash 불일치로 즉시 노출), 버전별 다중서명 기록(행위자 신원), 블록 timestamp(일시), append-only 버전 사슬(원본 재구성). B-01의 채널 2(상시 대사)는 이 audit-trail이 실제로 살아 있는지 — 앵커와 전문이 일치하는지 — 를 지키는 감시자다. + +- **PASS/FAIL 반영**: 직접 ○(채널 2 한정) — per-tx 게이트(채널 1)의 분기 조건은 아니고, hash 대사 채널의 규제 문법이다. 대사 불일치는 SUSPENDED 전환을 거쳐 채널 1의 ②단계에서 FAIL로 나타난다. + +- **ERC-3643 변환**: fullManifestHash = keccak256(canonicalize(fullManifest)); watcher가 주기 재계산·대사(OD-B01-2); 불일치 시 서명 입력으로 ManifestCore.status = SUSPENDED. 버전 이력 = (f)(2)(i)(A)의 (1)~(4) 필드에 1:1 대응하는 이벤트 스키마. + +### 3.8 Release No. 34-96034 — 2022 전자기록 개정 (audit-trail alternative 채택) [sec.gov] + +- **조항**: Electronic Recordkeeping Requirements for Broker-Dealers, Security-Based Swap Dealers, and Major Security-Based Swap Participants, Release No. 34-96034 (2022-10-12), 87 FR 66412 (2022-11-03) — sec.gov (발효 2023-01-03, 브로커-딜러 준수기한 2023-05-03) + +- **핵심 원문**: The amendments to Rule 17a-4 add an audit-trail alternative to the WORM requirement. Under the audit-trail alternative, a broker-dealer will need to use an electronic recordkeeping system that maintains and preserves electronic records in a manner that permits the recreation of an original record if it is modified or deleted. + +- **한국어**: Rule 17a-4 개정은 WORM 요건에 audit-trail 대안을 추가한다. audit-trail 대안 하에서 broker-dealer는, 전자기록이 수정 또는 삭제된 경우 원본 기록의 재구성을 가능하게 하는 방식으로 전자기록을 유지·보존하는 전자기록시스템을 사용하여야 한다. + +- **쉬운 설명**: §3.7 규칙 문언의 채택 배경이다. 개정 취지는 기술 중립화 — "기록을 물리적으로 못 고치게 하는" WORM 하나만 인정하던 체계를, "고침이 전부 추적되고 원본이 재구성되는" 시스템도 동등하게 인정하는 체계로 넓혔다. 이것이 B-01 설계에 주는 확신은, 온체인 앵커 + 서명 버전 이력이라는 접근이 규제 문법 밖의 창작이 아니라 규제가 명시적으로 승인한 두 방식 중 하나의 구현이라는 점이다. + +- **PASS/FAIL 반영**: 간접 ✕ — 판정 조건 아님. §3.7 채택 취지의 확인 자료. + +- **ERC-3643 변환**: 직접 매핑 없음(§3.7의 구현이 곧 대응). + +### 3.9 Reg ATS Rule 301(b)(2) — Form ATS 사전 신고·중대변경 amendment·정정 의무 [ecfr.gov] + +- **조항**: 17 C.F.R. §242.301(b)(2)(i)~(vi) — ecfr.gov (Title 17 현행본) + +- **핵심 원문**: (2) Notice. (i) The alternative trading system shall file an initial operation report on Form ATS, §249.637 of this chapter, in accordance with the instructions therein, at least 20 days prior to commencing operation as an alternative trading system. (ii) The alternative trading system shall file an amendment on Form ATS at least 20 calendar days prior to implementing a material change to the operation of the alternative trading system. (iii) If any information contained in the initial operation report filed under paragraph (b)(2)(i) of this section becomes inaccurate for any reason and has not been previously reported to the Commission as an amendment on Form ATS, the alternative trading system shall file an amendment on Form ATS correcting such information within 30 calendar days after the end of each calendar quarter in which the alternative trading system has operated. (iv) The alternative trading system shall promptly file an amendment on Form ATS correcting information previously reported on Form ATS after discovery that any information filed under paragraphs (b)(2)(i), (ii) or (iii) of this section was inaccurate when filed. (v) The alternative trading system shall promptly file a cessation of operations report on Form ATS in accordance with the instructions therein upon ceasing to operate as an alternative trading system. (vi) Every notice or amendment filed pursuant to this paragraph (b)(2) shall constitute a "report" within the meaning of sections 11A, 17(a), 18(a), and 32(a), (15 U.S.C. 78k-1, 78q(a), 78r(a), and 78ff(a)), and any other applicable provisions of the Act. + +- **한국어**: (2) 신고. (i) ATS는 운영 개시 최소 20일 전에 Form ATS 최초 운영 보고서를 제출하여야 한다. (ii) ATS는 운영에 대한 중대한 변경(material change)을 시행하기 **최소 20역일 전에** Form ATS amendment를 제출하여야 한다. (iii) (i)에 따라 제출된 최초 보고서의 정보가 어떤 이유로든 부정확해지고 아직 amendment로 보고되지 아니한 경우, 운영한 각 분기 종료 후 30역일 내에 이를 정정하는 amendment를 제출하여야 한다. (iv) (i)~(iii)에 따라 제출된 정보가 **제출 당시에 부정확하였음을 발견한** 후에는 지체 없이 이를 정정하는 amendment를 제출하여야 한다. (v) 운영을 중단하면 지체 없이 운영 중단 보고서를 제출하여야 한다. (vi) 본 (b)(2)에 따라 제출된 모든 신고·amendment는 1934년법 §11A·§17(a)·§18(a)·§32(a) 및 그 밖의 적용 조항에서 말하는 "report"를 구성한다. + +- **쉬운 설명**: 거래 시스템의 "자기 서술 문서"가 어떻게 관리되어야 하는지에 대한 규제의 표준 답안이다 — ① 바꾸기 전에 신고한다(중대변경은 최소 20역일 전, ≥ 20일 사전 대기), ② 부정확해지면 정정한다(사후 변화는 분기 정정, 애초 오류는 즉시 정정 — 두 트랙이 다르다), ③ 그 문서는 법적 "report"라서 허위 기재가 §32(a) 형사 책임까지 연결된다. Decipher의 Manifest 버전 규율이 이 문법의 내재화다: time-lock(사전 대기)은 (ii)의, 정정 버전 절차는 (iii)·(iv)의, 서명·기록 의무는 (vi)의 시스템 대응물이다. 주의할 것 두 가지 — 첫째, 이는 유추이지 동일성이 아니다. Form ATS는 규제기관 제출 문서이고 Manifest는 내부 운영 기록이므로, 어떤 카드 변경이 Form ATS상 "material change to the operation"에 해당해 실제 신고를 요하는지는 별도 판단이다(OD-B01-5). 둘째, (vi)의 report 지위는 이 유추에 무게를 싣는다 — 카드 사실이 Form ATS 기재의 원료가 되는 구조라면, 카드 오류는 신고 서류 오류로 전이된다. + +- **PASS/FAIL 반영**: 조건부 — Reg ATS 등록 시 직접 무게가 실린다. per-tx 게이트에서는 ③버전 검사(time-lock 경과·승인 사슬)가 이 규율의 런타임 대응물이다. + +- **ERC-3643 변환**: 거버넌스 컨트랙트의 (proposedAt, approvedAt, effectiveAt = approvedAt + delay) 수명주기; 정정 버전은 correctionOf(priorVersion) 참조 필드로 사슬화; Form ATS 연동 필드(atsAmendmentRef)는 Operator 기록(OD-B01-5). + +### 3.10 Reg ATS Rule 301(b)(8)·302·303 — venue 기록의 작성·보존 [ecfr.gov] + +- **조항**: 17 C.F.R. §242.301(b)(8), §242.302, §242.303 — ecfr.gov (Title 17 현행본) + +- **핵심 원문**: §242.301(b)(8) Recordkeeping. The alternative trading system shall: (i) Make and keep current the records specified in §242.302; and (ii) Preserve the records specified in §242.303. — §242.302 To comply with the condition set forth in paragraph (b)(8) of §242.301, an alternative trading system shall make and keep current the following records: … — §242.303(a) To comply with the condition set forth in paragraph (b)(8) of §242.301, an alternative trading system shall preserve the following records: (1) For a period of not less than three years, the first two years in an easily accessible place, an alternative trading system shall preserve: (i) All records required to be made pursuant to §242.302; (ii) All notices provided by such alternative trading system to subscribers generally, whether written or communicated through automated means, including, but not limited to, notices addressing hours of system operations, system malfunctions, changes to system procedures, maintenance of hardware and software, instructions pertaining to access to the market and denials of, or limitations on, access to the alternative trading system; … (2) During the life of the enterprise and of any successor enterprise, an alternative trading system shall preserve: (i) All partnership articles or, in the case of a corporation, all articles of incorporation or charter, minute books and stock certificate books; and (ii) Copies of reports filed pursuant to paragraph (b)(2) of §242.301 or §242.304 of this chapter and records made pursuant to paragraph (b)(5) of §242.301 of this chapter. + +- **한국어**: §242.301(b)(8) 기록. ATS는 (i) §242.302에 명시된 기록을 작성하고 최신으로 유지하며, (ii) §242.303에 명시된 기록을 보존하여야 한다. — §242.302 … ATS는 다음 기록을 작성·최신 유지하여야 한다: … — §242.303(a) … ATS는 다음 기록을 보존하여야 한다: (1) **3년 이상**(not less than three years), 최초 2년은 접근이 용이한 장소에: (i) §242.302에 따라 작성이 요구되는 모든 기록; (ii) 구독자 일반에게 제공된 모든 통지 — 서면이든 자동화 수단이든 — 시스템 운영시간·시스템 장애·**시스템 절차의 변경**·하드웨어·소프트웨어 유지보수·시장 접근 지침·접근 거부 또는 제한에 관한 통지를 포함하되 이에 한정되지 아니함; … (2) **기업 및 승계 기업의 존속기간 동안**: (i) 조합계약서 또는 법인의 경우 정관·의사록·주권대장 전부; 및 (ii) §242.301(b)(2) 또는 §242.304에 따라 제출된 보고서의 사본과 §242.301(b)(5)에 따라 작성된 기록. + +- **쉬운 설명**: ATS 기록 의무의 3층 구조다 — (b)(8)이 의무를 걸고, 302가 "무엇을 만들 것"을, 303이 "얼마나 보존할 것"을 정한다. B-01에 닿는 지점 세 곳: ① 303(a)(1)(ii)의 "changes to system procedures" 통지 보존 — 신상카드 변경으로 특정 자산의 거래 조건이 달라지면 그 변경 통지 자체가 3년 이상 보존 대상이다. ② 303(a)(2)(ii) — Form ATS 사본은 3년이 아니라 **기업 존속기간 전체** 보존이다. 시스템 자기 서술 문서의 버전 이력은 사실상 영구 보존 대상이라는 신호이고, Manifest 버전 사슬의 append-only 설계(§3.6)와 정확히 공명한다. ③ 302의 "keep current"(최신 유지) — 기록은 만들어두는 것이 아니라 **현재와 일치하게 유지**하는 것이다. B-01의 신선도 검사(⑤)와 상시 대사(채널 2)가 이 "current" 의무의 자산 사실 판이다. + +- **PASS/FAIL 반영**: 조건부 — Reg ATS 등록 시. ⑤신선도 검사와 채널 2 대사의 규제 근거이며, 보존 기간(3년/존속기간)은 Operator 보존 정책(§11)에 직결. + +- **ERC-3643 변환**: Operator export 파이프라인: B-01 판정 로그·대사 이력·버전 사슬 → 302/303 대응 보존 양식. 보존 기간 필드: elementLog ≥ 3y(최초 2y 즉시 접근), manifestVersionChain = 존속기간. + +### 3.11 Securities Act §17(a) — offer·sale에서의 사기·중대 허위 진술 [uscode.house.gov] + +- **조항**: Securities Act §17(a), 15 U.S.C. §77q(a) — uscode.house.gov + +- **핵심 원문**: (a) It shall be unlawful for any person in the offer or sale of any securities (including security-based swaps) or any security-based swap agreement (as defined in section 78c(a)(78) of this title) by the use of any means or instruments of transportation or communication in interstate commerce or by use of the mails, directly or indirectly— (1) to employ any device, scheme, or artifice to defraud, or (2) to obtain money or property by means of any untrue statement of a material fact or any omission to state a material fact necessary in order to make the statements made, in light of the circumstances under which they were made, not misleading; or (3) to engage in any transaction, practice, or course of business which operates or would operate as a fraud or deceit upon the purchaser. + +- **한국어**: (a) 누구든지 증권(security-based swap 포함) 또는 security-based swap agreement의 offer 또는 sale에서, 주간통상의 운송·통신 수단 또는 우편을 이용하여 직접 또는 간접으로 — (1) 사기를 위한 장치·계략·술책을 사용하는 것, 또는 (2) 중대한 사실에 관한 허위 진술, 또는 진술이 이루어진 상황에 비추어 그 진술을 오도적이지 않게 하기 위하여 필요한 중대한 사실의 누락에 의하여 금전 또는 재산을 취득하는 것; 또는 (3) 매수인에 대한 사기 또는 기망으로 작동하거나 작동할 거래·관행·영업 방식에 관여하는 것은 위법이다. + +- **쉬운 설명**: 발행·매도 국면의 사기 일반 조항이다. B-01에 닿는 경로는 이렇다 — 신상카드가 선언하는 사실(면제 구조·거래 조건·매수 금지 명단)은 venue가 참가자들에게 사실상 표시하는 정보의 뼈대다. 카드가 허위인 채 거래가 체결되면, 그 표시 위에서 이루어진 offer·sale은 (2)의 "중대 사실 허위 진술에 의한" 거래 사정권에 들어간다. 특히 유의할 것: Aaron v. SEC, 446 U.S. 680 (1980)에 따라 (a)(1)은 scienter(고의)를 요하지만 **(a)(2)·(a)(3)은 과실만으로 SEC 집행이 가능**하다. "몰랐다"·"실수였다"가 방어가 아니라는 뜻이고, 이는 §3.2와 같은 방향에서 기계 강제 설계를 명령한다 — 허위 카드가 살아 있는 상태 자체를 만들지 않아야 한다. + +- **PASS/FAIL 반영**: 간접 ✕ — 판정 조건이 아니라 오염 카드 운영의 책임 노출을 정의. fail-closed·즉시 SUSPENDED 설계의 근거. + +- **ERC-3643 변환**: 직접 매핑 없음. 채널 2 불일치 → SUSPENDED 즉시 전환(허위 표시 상태의 지속 시간 최소화)이 이 조문 대응의 핵심 파라미터다. + +### 3.12 Rule 10b-5 — 매매 관련 사기·허위 진술의 일반 금지 [ecfr.gov] + +- **조항**: 17 C.F.R. §240.10b-5 — ecfr.gov (Title 17 현행본; 수권: Exchange Act §10(b), 15 U.S.C. §78j(b)) + +- **핵심 원문**: It shall be unlawful for any person, directly or indirectly, by the use of any means or instrumentality of interstate commerce, or of the mails or of any facility of any national securities exchange, (a) To employ any device, scheme, or artifice to defraud, (b) To make any untrue statement of a material fact or to omit to state a material fact necessary in order to make the statements made, in the light of the circumstances under which they were made, not misleading, or (c) To engage in any act, practice, or course of business which operates or would operate as a fraud or deceit upon any person, in connection with the purchase or sale of any security. + +- **한국어**: 누구든지 직접 또는 간접으로, 주간통상의 수단·도구, 우편, 또는 national securities exchange의 시설을 이용하여, 증권의 매수 또는 매도와 관련하여(in connection with) — (a) 사기를 위한 장치·계략·술책을 사용하는 것, (b) 중대한 사실에 관한 허위 진술을 하거나, 진술이 이루어진 상황에 비추어 그 진술을 오도적이지 않게 하기 위하여 필요한 중대한 사실의 진술을 누락하는 것, 또는 (c) 어느 누구에 대한 사기 또는 기망으로 작동하거나 작동할 행위·관행·영업 방식에 관여하는 것은 위법이다. + +- **쉬운 설명**: §3.11이 1933년법의 발행·매도 축이라면, 10b-5는 1934년법의 매매 전반 축이다 — "in connection with the purchase or sale"이라 2차 시장 거래 전체를 덮는다(10b-5 책임에는 scienter가 요구된다는 점이 §17(a)(2)·(3)과의 차이다 — Aaron). B-01 문맥에서의 의미는 §3.11과 같은 방향의 확장이다: 오염된 신상카드 위에서 도는 2차 거래는 발행 국면이 끝난 뒤에도 이 조항의 사정권에 남는다. 정합 게이트가 발행 시 1회 검사가 아니라 **매 거래 상시 게이트**여야 하는 이유가 여기서 완성된다. + +- **PASS/FAIL 반영**: 간접 ✕ — §3.11과 동일한 성격(책임 노출 정의). + +- **ERC-3643 변환**: 직접 매핑 없음. B-01이 R1(발행)만이 아니라 R2(재판매)·R3(펀드 상시)에도 필수 부착되는 구조가 "in connection with the purchase or sale"의 시간적 범위에 대응한다. + +### 3.19 Sub-요건 분해 매트릭스 + +위 §3.1~§3.12의 원리를, B-01이 실제로 판정하는 원자적 검증 단위로 분해한다. 각 행은 §5.2의 판정 분기와 1:1 대응한다(채널 표기: G = per-tx 게이트, W = 상시 대사, GOV = 거버넌스 평면 전제). + +| Sub-ID | 원자 검증 단위 | 근거 원리 | 채널 | PASS 조건 | FAIL 코드 | +| --- | --- | --- | --- | --- | --- | +| B01-S1 | Manifest 존재 — 상장 자산에 ACM 엔트리가 있다 | §5·§12(a)(1) (fail-closed) | G① | ACM[asset] ≠ empty | FAIL_MANIFEST_MISSING | +| B01-S2 | 활성 상태 — status = ACTIVE | §17(a)·10b-5 (허위 표시 상태 차단) + 채널 2 결과 소비 | G② | status = ACTIVE (SUSPENDED·RETIRED 아님) | FAIL_MANIFEST_SUSPENDED | +| B01-S3a | 버전 승인 — 참조 버전이 승인 사슬 위에 있다 | 301(b)(2)(vi) report 지위·17a-4(e)(7) 이력 | G③ | version ∈ approvedSet ∧ 미폐기 | FAIL_VERSION_UNAPPROVED | +| B01-S3b | time-lock 경과 — 발효 전 버전 참조 금지 | 301(b)(2)(ii) 사전 대기(≥ 20일)의 내부 대응 | G③ | now ≥ approvedAt + delay | FAIL_VERSION_PENDING | +| B01-INV-1 | fundForm ↔ fundRecipeId ↔ 부착 집합 일치 | §3(c)(7)(A) 활성화 정합 | G④ | fundForm = ICA-3c7 ⇒ fundRecipeId ≠ 0 ∧ R3 ⊇ {A-13, D-01}; fundForm = none ⇒ fundRecipeId = 0 | FAIL_FACTS_INCONSISTENT | +| B01-INV-2 | issuanceExemption ↔ issuanceRecipeId 일치 | 동일 원리(R1 축) | G④ | RegD-506c ⇒ issuanceRecipeId = R1 (등가 상호) | FAIL_FACTS_INCONSISTENT | +| B01-INV-3 | enabledResalePaths ⊆ framework 허용집합 | C-00 분기 전제의 정합 | G④ | 비트셋 포함 관계 성립 | FAIL_FACTS_INCONSISTENT | +| B01-INV-4 | distributionStatus.active = true ⇒ restrictedParties ≠ ∅ | Reg M 검사(F-04) 전제의 정합 | G④ | 함의 성립 | FAIL_FACTS_INCONSISTENT | +| B01-INV-5 | supportedEngines ≠ 0 ∧ legalClassId 지정 ∧ 12gThresholds 존재(fundForm 활성 시) | B-04·D-01 소비 필드의 존재성 | G④ | 필수 필드 non-null | FAIL_FACTS_INCONSISTENT | +| B01-INV-6 | override 방향 — 강화 방향만 (완화 시도 차단) | Operator 규칙 §3-2의 런타임 대응 | G④/GOV | overrideDelta가 제약을 좁히는 방향 | FAIL_FACTS_INCONSISTENT | +| B01-S5 | 만료성 사실 신선도 | 302 "keep current" | G⑤ | 대상 필드마다 now − asOf ≤ maxAge (초과 즉 > 이면 FAIL) | FAIL_FACT_STALE | +| B01-W1 | hash 앵커 대사 — 온체인 fullManifestHash = H(off-chain 전문) | 17a-4(f)(2)(i)(A) audit-trail | W | 일치 (불일치 → SUSPENDED 전환 → B01-S2에서 차단) | (게이트 표면상) FAIL_MANIFEST_SUSPENDED | +| B01-W2 | 버전 사슬 무결 — append-only·서명 완전성 | 17a-4(e)(7)·303(a)(2)(ii) | W | 사슬 파손·서명 결손 없음 (파손 → 운영 검토) | REVIEW_MANIFEST_DRIFT | +| B01-GOV | 승인 절차 — m-of-n 다중서명·심사 이력 | 301(b)(2)·Operator §4.3 | GOV | 게이트가 아닌 전제 — approvedSet 형성의 조건 | (해당 없음 — 미충족이면 S3a로 표면화) | + +모든 PASS/FAIL 경로가 이 표에 있다 — 게이트 5단(①~⑤)의 각 FAIL, 대사 채널의 2종(하드 불일치 → SUSPENDED 경유 차단, 소프트 드리프트 → REVIEW), 그리고 거버넌스 전제 1종. deemed-PASS 같은 우회 경로는 존재하지 않는다(§6.2 — 증명서 cure 없음). + +### 3.20 ERC-3643 변환 총정리 — Router·ManifestCore·거버넌스 매핑 (claim.basis 해당 없음) + +B-01은 사람 자격 부품이 아니므로 ONCHAINID claim topic·claim.basis enum을 쓰지 않는다. 매핑 대상은 Router가 읽는 자산 메타 계층이다. + +| 법적 원리 (§3.X) | 시스템 대응물 | 구체 필드·동작 | +| --- | --- | --- | +| §5·§12(a)(1) fail-closed (§3.1~§3.2) | Router cumulative AND + B-01 최우선 실행 | union 첫 원소 고정; 어느 단계든 FAIL 즉시 revert(reasonCode) | +| Ralston 입증책임 (§3.3) | 판정·대사 이벤트의 불변 로그 | emit B01Check(asset, manifestVersion, reasonCode, ts); Operator export | +| §3(c)(7)(A) 활성화 정합 (§3.4) | factsPacked ↔ RecipeId 상호 불변식 | B01-INV-1 검사; 위반 시 FAIL_FACTS_INCONSISTENT | +| §17(a)(1) 기록 수권 (§3.5) | Manifest = 규제 기록 지위 | 보존 양식 export 경로(§11) 상시 유지 | +| 17a-4(e)(7) 버전 보존 (§3.6) | ManifestRegistry append-only 사슬 | (coreHash, fullManifestHash, approvedAt, signers[], correctionOf) 튜플; retire = 상태 전환(삭제 아님) | +| 17a-4(f) audit-trail (§3.7~§3.8) | 온체인 hash 앵커 + watcher 대사 | fullManifestHash = keccak256(canonical(fullManifest)); 불일치 → status = SUSPENDED (서명 입력) | +| 301(b)(2) 변경 규율 (§3.9) | 다중서명 + time-lock 수명주기 | effectiveAt = approvedAt + delay; now ≥ effectiveAt에서 발효(이상); 정정 버전 correctionOf 사슬 | +| 302/303 작성·보존 (§3.10) | 신선도 필드 + 보존 정책 | (value, asOf, maxAge) 트리플; 로그 ≥ 3y, 버전 사슬 = 존속기간 | +| §17(a)·10b-5 책임 (§3.11~§3.12) | SUSPENDED 즉시 전환·상시 게이트 | R1·R2·R3 전 Recipe 필수 부착; 표시 오염 지속시간 최소화 | + +**자기참조 차단 (설계 불변식).** B-01의 판정 파라미터(만료성 사실 목록·maxAge·delay 등)는 검사 대상인 Manifest 안이 아니라 별도의 거버넌스 상수(Element 레지스트리 설정)에 둔다 — 카드가 자기 검사의 기준을 스스로 정하는 순환(자기 인증)을 구조적으로 끊기 위해서다. 자산별 차등이 필요한 경우의 처리 방식은 OD-B01-6. + +## §4. 입력 사실 (Input Facts) + +### 4.1 판정에 필요한 데이터 + +| 입력 | 의미 | 출처 | +| --- | --- | --- | +| manifestEntry | ACM[asset]의 ManifestCore struct (존재 여부 포함) | Router 저장소 (on-chain, SLOAD) | +| status | ACTIVE / SUSPENDED / RETIRED | ManifestCore (채널 2·거버넌스가 서명 입력으로 전환) | +| coreVersion | 현재 참조 중인 카드 버전 식별자 | ManifestCore | +| approvedSet·approvedAt·delay | 승인된 버전 집합·승인 시각·time-lock 지연 | ManifestRegistry(거버넌스 컨트랙트) | +| factsPacked·RecipeId들 | fundForm·distributionStatus·restrictedFlag 등 + issuanceRecipeId·fundRecipeId·enabledResalePaths·supportedEngines | ManifestCore | +| freshness 필드들 | 만료성 사실의 (value, asOf) — outstandingUnits·totalAssetsUSD·NAV·distributionStatus 등 | ManifestCore / off-chain 전문(앵커 경유) | +| maxAge·만료성 목록·delay 값 | B-01 판정 파라미터 | 거버넌스 상수 (Element 레지스트리 — Manifest 밖, §3.20 자기참조 차단) | +| fullManifestHash | off-chain 전문의 온체인 앵커 | ManifestCore | +| offChainManifest | 전문(override 근거·법률 문서·governance config 포함) | Operator 보관소 (17a-4(f) 전자기록) — 채널 2만 접근 | +| governanceRecord | 버전별 m-of-n 서명·심사 이력·correctionOf 사슬 | ManifestRegistry + Operator 기록 | + +### 4.2 데이터 출처와 책임경계 + +- **온체인 core가 판정의 유일한 hot-path 입력이다.** 채널 1(per-tx 게이트)은 ManifestCore·ManifestRegistry의 SLOAD와 순수 계산만으로 끝난다 — off-chain 조회·해시 재계산·외부 호출이 없다(온오프체인 하이브리드 원칙: hot path 경량 유지). + +- **off-chain 전문은 채널 2의 관할이다.** 전문 접근·canonical 직렬화·해시 재계산·대사는 watcher가 hot path 밖에서 수행하고, 그 결론(불일치)만이 서명된 상태 입력(status = SUSPENDED)으로 온체인에 반영된다 — "판단은 상태가 되어야 효력이 있다"는 Operator 규칙의 B-01 판이다. + +- **진실 ≠ 정합 (책임경계의 핵심).** 카드에 적힌 사실이 세상의 진실인가 — 예컨대 발행주식총수가 실제로 그 수인가, 펀드가 실제로 §3(c)(7) 구조로 조직됐는가 — 는 B-01의 판정 대상이 아니다. 진실성 확보의 소관: ① 온보딩 6단계 심사에서 Operator가 발행자 제출 초안을 검증·조정하고, ② 발행자가 사실 진실성을 보증하며(온보딩 통제 수단), ③ 운영 중의 반대정보는 A-12 채널이 flag한다. B-01은 그렇게 확립된 기록이 **승인 절차대로, 변조 없이, 자기모순 없이, 낡지 않게** 시스템에 반영되어 있는가만 본다. 이 경계를 지켜야 B-01이 결정론적 기계 판정으로 남는다(§8.2). + +- **분모류 사실의 원천 대사는 소비 부품과 공동 규율이다.** outstandingUnits 같은 값의 "Securitize 명세 ↔ Manifest ↔ totalSupply" 3자 대사는 C-08(OD-C08-2)·D-01(OD-D01-1)과 공유하는 운영 규율이다 — B-01은 asOf·maxAge의 신선도 축을, 각 소비 부품은 자기 판정에서의 사용 축을 맡는다. + +### 4.4 갈래별 필수 확인 항목 (전체 표) + +공통 행(모든 거래) + 검사 갈래별 항목. "예시"가 아니라 갈래별로 반드시 확인해야 하는 항목 전체다. + +| 갈래 | 공통 필수 | 갈래별 필수 | +| --- | --- | --- | +| ① 존재 (G) | asset 식별자 정규화(토큰 컨트랙트 주소) | ACM[asset] ≠ empty — 상장 자산인데 없으면 즉시 FAIL. Router의 passThrough(empty → 무검사 통과)는 비상장·비증권 토큰 전용이며, 상장 처리된 자산에는 적용되지 않는다 | +| ② 상태 (G) | 상동 | status = ACTIVE. SUSPENDED(채널 2 불일치·긴급 정지)·RETIRED(폐기) 모두 차단 | +| ③ 버전 (G) | 상동 | ⓐ coreVersion ∈ approvedSet ⓑ now ≥ approvedAt + delay(이상에서 발효) ⓒ 미폐기·미대체(superseded 아님) | +| ④ 불변식 (G) | 상동 | B01-INV-1~6 전부(§3.19): fundForm↔fundRecipeId·issuanceExemption↔issuanceRecipeId·resalePaths 포함관계·distribution⇒restrictedParties·필수 필드 존재·override 강화 방향 | +| ⑤ 신선도 (G) | 만료성 목록·maxAge를 거버넌스 상수에서 로드 | 대상 필드마다 now − asOf ≤ maxAge. 하나라도 > maxAge면 FAIL_FACT_STALE(어느 필드인지 코드에 병기) | +| 대사 (W) | canonical 직렬화 규칙(OD-B01-1) | ⓐ H(offChainManifest) = fullManifestHash ⓑ 버전 사슬 append-only·서명 완전성 ⓒ 불일치 시 SUSPENDED 서명 입력 + drift 경보 | +| 거버넌스 (GOV) | — | 버전 등록 시 m-of-n 서명·심사 이력·(정정이면) correctionOf 참조 — 미비하면 approvedSet에 진입 자체가 안 된다 | + +## §5. 판정 로직 (Decision Logic) + +### 5.1 개념 — 기계 판정형 2채널 + +B-01은 증명서를 확인하는 부품도, 누적 카운터를 갱신하는 부품도 아니다. 결정론적 성질(존재·상태·집합 소속·부등식·논리 함의)을 계산으로 확인하는 기계 판정형이며, 실행은 두 채널로 나뉜다. + +- **채널 1 — per-tx 게이트 (moduleCheck, pre-trade)**: 매 거래에서 ①존재 → ②상태 → ③버전 → ④불변식 → ⑤신선도를 순서대로 검사. 순수 read + 계산, 상태 변경 없음(STATELESS). + +- **채널 2 — 상시 대사 (watcher, hot path 밖)**: off-chain 전문을 canonical 직렬화해 해시를 재계산하고 온체인 앵커와 대사; 버전 사슬·서명 완전성 점검. 불일치는 게이트가 직접 소비하지 않고, 서명된 상태 입력(SUSPENDED)으로 변환되어 채널 1의 ②단계에서 나타난다. + +D-01의 "게이트 + commit" 2단계가 하나의 거래 안에서 시간축으로 나뉜 것이라면, B-01의 "게이트 + 대사"는 실행 주체와 주기가 다른 **2채널 병행**이다 — 게이트는 거래마다, 대사는 상시로 돈다. 이 분리 덕에 hot path는 SLOAD 수 회로 유지되면서도 17a-4(f)(2)(i)(A)의 audit-trail 무결성이 상시 보증된다. + +**실행 위치(중요).** Router의 흐름 — manifest 로드 → 적용 Recipe 식별 → Element union → 일괄 검사 — 에서 B-01은 union의 **첫 원소로 고정**된다. 이유는 의존성이다: 다른 모든 부품의 입력(상한값·활성 여부·경로 집합·명단)이 카드에서 오므로, 카드 검사가 뒤에 오면 앞선 부품들이 오염 가능성이 있는 사실로 판정을 마친 뒤가 된다. fail-fast 관점에서도 카드 오염은 그 거래의 다른 어떤 검사보다 먼저 알아야 할 사실이다. 한 가지 정직한 한계 — Recipe 식별 자체가 이미 core의 facts를 읽으므로, "식별 전 검사"는 불가능하다. 이 창은 구조로 닫는다: 식별이 읽는 대상과 B-01이 검사하는 대상이 **동일한 온체인 core**(별도 사본 없음)이고, ④불변식이 "facts가 가리키는 Recipe 집합"과 "실제 부착 집합"의 일치를 검사하므로, 오염된 facts로 잘못 식별된 조합은 union 첫 검사에서 모순으로 잡힌다. + +### 5.2 판정 순서 (싸고 탈락 잘 되는 검사·선행조건 먼저) + +증명서형(A-13)의 "존재 → 진위 → 신선도 → 갈래"와 구조적으로 상응하되, 대상이 사람의 claim이 아니라 자산의 카드다. + +- **① 존재**: ACM[asset]이 비어 있으면 즉시 FAIL_MANIFEST_MISSING — SLOAD 1회, 가장 싸고 가장 치명적인 결손을 가장 먼저. + +- **② 상태**: status ≠ ACTIVE면 FAIL_MANIFEST_SUSPENDED. 채널 2의 불일치 판정·Operator 긴급 정지·폐기가 모두 이 한 관문으로 수렴한다 — 게이트는 "왜 정지됐는지"를 몰라도 되고, 정지 사유는 로그·거버넌스 기록에 있다. + +- **③ 버전**: coreVersion ∈ approvedSet ∧ now ≥ approvedAt + delay ∧ 미대체. 승인 밖 버전은 거버넌스 우회(단일 키 수정 등) 신호이므로 FAIL_VERSION_UNAPPROVED, 발효 전 버전은 FAIL_VERSION_PENDING으로 구분해 기록한다(사고 조사 시 성격이 다르다). + +- **④ 불변식**: B01-INV-1~6의 cross-field 검사 — 비트 연산·널 검사·포함 관계·함의뿐이라 여전히 싸다. 어느 불변식이 깨졌는지 코드에 병기. + +- **⑤ 신선도**: 만료성 목록을 순회하며 now − asOf ≤ maxAge. 목록·maxAge는 거버넌스 상수에서 로드(자기참조 차단). 가장 뒤에 두는 이유: 유일하게 필드 수에 비례하는 루프라 상대적으로 무겁고, 앞 단계 FAIL 시 순회 자체가 불필요하다. + +- **[병행] 채널 2**: watcher가 주기적으로 H(offChainManifest)를 재계산해 앵커와 대사, 버전 사슬 점검. 하드 불일치(해시 상이) → SUSPENDED 서명 입력, 소프트 드리프트(사슬 메타데이터 결손 등) → REVIEW_MANIFEST_DRIFT 큐. + +### 5.3 경계 매트릭스 (부등호 규율) + +| 검사 | 법문·규율 문언 | 경계식 | 경계값에서의 결과 | +| --- | --- | --- | --- | +| time-lock 발효 | Reg ATS (b)(2)(ii) "at least 20 calendar days prior"의 내부 대응 | now ≥ approvedAt + delay → 발효 | now = approvedAt + delay 정확히 그 시각 → **발효(이상)**. 1초라도 전이면 FAIL_VERSION_PENDING | +| 신선도 | 302 "keep current"의 파라미터화 | now − asOf ≤ maxAge → 유효 | now − asOf = maxAge 정확히 → **유효(이하)**. 초과(>) 순간부터 FAIL_FACT_STALE | +| 버전 소속 | 승인 사슬 | coreVersion ∈ approvedSet (정확 일치) | 근사·prefix 일치 없음 — 집합 소속만 | +| hash 대사 | 17a-4(f)(2)(i)(A) | H(전문) = fullManifestHash (완전 일치) | 1바이트 상이도 불일치 — 부분 일치 개념 없음 | +| 보존 기간(운영) | 303(a)(1) "not less than three years" / (a)(2) 존속기간 | 로그 보존 ≥ 3y(이상)·버전 사슬 = 존속기간 | 게이트 아님 — Operator 보존 정책(§11) | + +두 부등호의 방향이 반대임을 다시 명시한다 — time-lock은 경계 도달 시 **허용**(≥), 신선도는 경계 초과 시 **차단**(>). §7 T6이 이 비대칭을 경계값 쌍으로 고정한다. + +### 5.4 Pseudocode + 단계별 해설 + +``` +function check_B01(asset, now) -> (PASS | FAIL(code)): + core = ACM[asset] # SLOAD + if core == empty: return FAIL(MANIFEST_MISSING) # ① + if core.status != ACTIVE: return FAIL(MANIFEST_SUSPENDED) # ② (채널 2·긴급정지 수렴점) + reg = ManifestRegistry[asset, core.version] + if core.version not in reg.approvedSet or reg.superseded: + return FAIL(VERSION_UNAPPROVED) # ③a + if now < reg.approvedAt + params.delay: + return FAIL(VERSION_PENDING) # ③b (now ≥ 발효, 이상) + if not invariants_hold(core): # ④ B01-INV-1..6 + return FAIL(FACTS_INCONSISTENT, whichInv) + for f in params.expiringFields: # ⑤ (params = 거버넌스 상수) + if now - core[f].asOf > params.maxAge[f]: # 초과(>)면 탈락 + return FAIL(FACT_STALE, f) + emit B01Check(asset, core.version, PASS, now) # Ralston 증명 자산 + return PASS + +# 채널 2 (watcher, off-chain, 주기 실행 — hot path 아님): +# h = keccak256(canonicalize(fullManifest)) +# if h != core.fullManifestHash: submit_signed(status := SUSPENDED); alert(drift) +# verify_chain_append_only_and_signatures() # 결손 → REVIEW_MANIFEST_DRIFT +``` + +해설: ①~⑤는 전부 결정론이고 외부 호출이 없다. params가 Manifest 밖(거버넌스 상수)에서 오는 것이 자기참조 차단의 구현이다. emit되는 PASS/FAIL 이벤트가 §3.3(입증책임)의 증명 자산이며, 채널 2의 대사 로그와 함께 §11의 보존 양식으로 export된다. + +### 5.5 비결정성을 결정성으로 — 본 부품 구현의 본질 + +다른 자격 부품들은 "비결정론적 판단(자산 산정·지배관계)을 off-chain 전문가에게 격리하고 온체인은 그 서명 결과만 소비"하는 방식으로 결정성을 얻는다. B-01은 더 단순하다 — 판정 대상 자체에 판단 요소가 없다. 존재·소속·일치·함의·부등식은 참/거짓이 계산으로 닫히는 성질이다. B-01에 남는 유일한 비결정성은 "카드 내용이 진실인가"인데, 이는 §4.2에서 본 대로 애초에 B-01의 질문이 아니며 온보딩 심사·발행자 보증·A-12로 격리된다. 이 격리가 유지되는 한 B-01은 reasonable belief도, manual review도 없는 순수 기계 게이트로 남는다 — §12(a)(1)의 무과실 구조(§3.2)가 요구하는 바로 그 형태다. + +## §6. 거절·예외 처리 (Rejection & Exception) + +### 6.1 거절 코드 + +| 코드 | 발생 단계 | 의미 | 매수인 노출 메시지(예) | 내부 기록 | +| --- | --- | --- | --- | --- | +| FAIL_MANIFEST_MISSING | ① | 상장 자산에 신상카드 없음 | "이 자산은 현재 거래 준비가 완료되지 않았습니다" | asset, ts — 온보딩 결손 조사 | +| FAIL_MANIFEST_SUSPENDED | ② | 정지·폐기 상태(대사 불일치·긴급 정지 포함) | "이 자산의 거래가 일시 정지되어 있습니다" | 정지 사유 참조(governance/watcher 로그 링크) | +| FAIL_VERSION_UNAPPROVED | ③a | 승인 사슬 밖 버전 — 거버넌스 우회 의심 | 상동(일시 정지 문구) | ⚠ 보안 사건 등급(최우선) — 즉시 Operator 경보 | +| FAIL_VERSION_PENDING | ③b | time-lock 미경과 버전 참조 | 상동 | 발효 예정 시각 병기 | +| FAIL_FACTS_INCONSISTENT | ④ | 내부 불변식 위반(INV-1~6 중 어느 것인지 병기) | 상동 | 위반 불변식 ID·필드 스냅샷 | +| FAIL_FACT_STALE | ⑤ | 만료성 사실 신선도 초과(> maxAge) | 상동 | 필드명·asOf·maxAge·초과폭 | +| REVIEW_MANIFEST_DRIFT | W(소프트) | 사슬 메타데이터 결손 등 경미 드리프트 | (거래 차단 아님 — 운영 큐) | drift 내역·검토 시한(flag 처리 시한 규칙 연동) | + +매수인 노출 메시지와 내부 기록을 분리한다(A-13 §6.4와 동일 원칙) — 외부에는 자산 단위의 중립적 상태만, 내부에는 원인 규명에 필요한 전체 스냅샷을 남긴다. 특히 FAIL_VERSION_UNAPPROVED는 단순 설정 오류가 아니라 통제 우회 신호일 수 있으므로 보안 사건 트랙으로 승격한다. + +### 6.2 예외·해소 경로 — 구조적 게이트 (증명서 cure 없음) + +B-01의 FAIL에는 증명서 재발급 같은 매수인 측 cure가 존재하지 않는다 — 결손이 매수인이 아니라 자산·시스템 쪽에 있기 때문이다. 해소는 전부 거버넌스 평면에서 일어난다: + +- MISSING → 온보딩 절차 완료(심사 → 승인 → 등록). +- SUSPENDED → 원인 제거(전문 복원 또는 정정 버전) 후 재활성화 승인(다중서명). +- UNAPPROVED/PENDING → 정상 버전으로의 참조 복구 또는 time-lock 만료 대기. 우회 흔적이 있으면 보안 조사 선행. +- INCONSISTENT/STALE → **정정 버전**(correctionOf 사슬) 승인 + time-lock. 값만 몰래 고치는 경로는 없다 — Rule 301(b)(2)(iv)의 "promptly file an amendment correcting" 규율의 내부 판이다. + +"오늘만 이 요건 빼고 체결" 같은 런타임 재량 개입은 구조적으로 불가능하며(Operator는 체결 경로에 없다), 유일한 방향성 예외 — override — 도 **강화 방향만** 허용된다. 완화 방향 시도는 거버넌스에서 타입 차원으로 반려되고, 그 반려를 뚫고 들어온 데이터는 B01-INV-6이 런타임에서 잡는다: 이중 방벽. + +### 6.3 정책 vs 법정 구분 (중요) + +| 항목 | 성격 | 근거 | +| --- | --- | --- | +| ①~④의 검사 자체 | 법정 원리의 직접 구현 — 조정 불가 | §3.1~§3.9 | +| ⑤의 maxAge 값·만료성 목록 | **정책** — "keep current"(302)의 파라미터화. 값 자체는 법정 아님 | OD-B01-4 | +| time-lock delay 값 | **정책** — (b)(2)(ii)의 20일은 규제 신고 기한이지 내부 delay의 법정값이 아님. 내부 delay는 거버넌스 등급 규칙(부품 24h·Recipe 48h 등)과 정렬 | OD-B01-5 | +| 보존 기간 | 법정 하한(3년·존속기간) + 정책 상회 가능 | §3.10 | +| SUSPENDED 자동 전환 권한 | **정책·설계** — watcher 신뢰 모델에 따름 | OD-B01-2 | + +## §7. 테스트 케이스 (통과·거절·경계) + +각 케이스는 §3.19의 Sub-ID와 §5.2 분기에 대응한다. T4·T8이 회귀 테스트 핵심(가장 흔한 오구현 차단)이다. + +**T1 — Pass (정상).** BUIDL-like 자산, 승인 버전 v3(발효 완료), 불변식 전부 성립, 만료성 사실 전부 신선, 대사 일치. 기대: PASS + B01Check 이벤트. 이후 A-01·A-02·A-13·D-01 등 후속 검사로 진행. + +**T2 — Fail (미등록 자산).** 상장 목록에는 있으나 ACM 엔트리 미생성(온보딩 미완). 기대: FAIL_MANIFEST_MISSING — passThrough로 새지 않음을 확인(상장 자산 판별이 선행돼야 함). + +**T3 — Fail (거버넌스 우회).** 단일 키로 core를 직접 수정해 coreVersion이 approvedSet 밖. 기대: FAIL_VERSION_UNAPPROVED + 보안 경보. 회귀 포인트: 승인 검사를 "버전 번호가 최신인가"로 잘못 구현하면 우회 버전이 최신 번호를 달고 통과한다 — 검사는 **집합 소속**이지 크기 비교가 아니다. + +**T4 — Fail (활성화 정합 — 회귀 핵심).** fundForm = ICA-3c7인데 fundRecipeId = 0(또는 R3 부착 집합에서 A-13 누락). 기대: FAIL_FACTS_INCONSISTENT(INV-1). 회귀 포인트: 가장 흔한 오구현은 "카드가 존재·승인이면 통과"로 끝내고 불변식을 생략하는 것 — 그 경우 QP 검사 없는 펀드 거래가 구조적으로 열린다(§3.4). 이 한 케이스가 B-01 존재 이유의 절반이다. + +**T5 — Fail (신선도).** outstandingUnits.asOf가 maxAge를 하루 초과. 기대: FAIL_FACT_STALE(outstandingUnits) — C-08의 1% cap이 낡은 분모로 계산되는 사태를 상류에서 차단. + +**T6 — Boundary (부등호 비대칭 쌍).** ⓐ now = approvedAt + delay 정확히 → **PASS 쪽**(발효, ≥). ⓑ now = approvedAt + delay − 1초 → FAIL_VERSION_PENDING. ⓒ now − asOf = maxAge 정확히 → **PASS 쪽**(유효, ≤). ⓓ now − asOf = maxAge + 1초 → FAIL_FACT_STALE. 네 값을 한 케이스로 묶어 두 부등호의 반대 방향을 고정한다. + +**T7 — 채널 2 (대사 → 게이트 전이).** off-chain 전문 1바이트 변조 → watcher 해시 불일치 → SUSPENDED 서명 입력 → 직후 거래가 FAIL_MANIFEST_SUSPENDED. 검증 포인트: 게이트가 해시를 직접 재계산하지 않아도(hot path 무접촉) 차단이 전이되는 2채널 배선. + +**T8 — 회귀 (완화 방향 override).** overrideDelta가 assetGate 완화(제약을 넓히는 방향)를 담은 채 core에 주입 시도. 기대: 거버넌스 반려가 1차, 주입 성공 가정 시 B01-INV-6이 FAIL_FACTS_INCONSISTENT로 차단(이중 방벽 확인). + +**T9 — 실행 순서.** union에서 B-01이 첫 원소가 아니게 배열된 설정 오류 시나리오 — 통합 테스트로 순서 보장을 고정(D-01·C-08이 오염 카드의 상한값으로 먼저 판정하는 사태 방지). + +## §8. 검증 패턴 — 기계 판정형 (Pattern A) + 2채널 + +### 8.1 세 패턴 속의 자리 + +| 패턴 | 대표 부품 | 판정 대상 | 결정성의 원천 | +| --- | --- | --- | --- | +| A 기계 판정형 | **B-01**·A-01·C-01 | 계산 가능한 성질(소속·일치·부등식·함의) | 성질 자체가 결정론 — 판단 0 | +| B 증명서형 | A-13·A-03·A-08·A-09 | off-chain 전문 판단의 서명 결과 | 판단을 신뢰기관에 격리, 온체인은 claim 확인 | +| C 감시형 | F-02·F-03·A-12 | 총체적 판단이 필요한 패턴 | flag만 기계, 결론은 사람 → 상태 입력 | + +B-01이 A인 이유는 §5.5에서 밝혔다 — 정합은 참/거짓이 닫히는 성질이고, 유일한 판단 요소(진실성)는 설계상 부품 밖으로 격리했기 때문이다. 같은 A라도 A-01(명단 대조)·C-01(기간 계산)이 단일 성질 검사인 반면, B-01은 다섯 성질의 직렬 검사 + 별도 채널이라는 점이 다르다. + +### 8.2 왜 기계 판정형이 유일한 선택인가 + +두 방향에서 강제된다. 법 쪽에서, §5·§12(a)(1)의 무과실 구조와 §17(a)(2)·(3)의 과실 책임(§3.1·§3.2·§3.11)은 "성실히 점검했다"는 절차 항변을 인정하지 않는다 — 오염 상태의 발생 자체를 막는 상시 기계 강제만이 대응이 된다. 기술 쪽에서, 판정 대상이 이미 결정론이므로 reasonable belief 구조(패턴 B)를 쓸 이유가 없고, 쓰면 오히려 불필요한 신뢰 지점(누가 정합을 '믿어주는가')이 생긴다. 감시형(패턴 C)은 차단이 사후적이라 §5의 사전 차단 요구와 맞지 않는다 — 다만 채널 2의 드리프트 검토(REVIEW)는 C의 문법을 국소적으로 빌린 것이다. + +### 8.3 2채널 구조 — 게이트와 audit-trail의 분업 + +17a-4(f)(2)(i)는 전자기록 무결성의 두 방식(audit-trail / WORM)을 제시한다(§3.7). B-01의 채널 2가 그 audit-trail의 살아 있는 구현이다: 온체인 앵커(변조 노출) + 서명 버전 사슬(행위자·일시) + append-only(원본 재구성). 채널 1은 그 무결성 위에서 매 거래의 소비 안전을 보증한다. 분업의 요점 — **게이트는 상태를 읽고, 대사는 상태를 만든다.** 게이트가 해시 재계산까지 떠안으면 hot path가 무거워지고, 대사가 차단까지 떠안으면 거래별 강제가 사라진다. 두 채널을 잇는 유일한 배선이 status 필드(서명 입력)라는 점이 이 부품의 보안 경계다 — 그래서 그 입력의 권한·신뢰 모델이 OD-B01-2로 남는다. + +### 8.4 글로벌 게이트가 아님, 그러나 union의 첫 원소 + +A-01·A-02는 거래 상대방 속성을 보는 transaction-level 글로벌 게이트로, Recipe 해석 이전에 무조건 돈다(manifest.globalGates). B-01은 자산 속성을 보는 Recipe 부착 부품이므로 그 분류에 들어가지 않는다 — Manifest가 없거나 자산이 비증권이면 B-01이 돌 이유 자체가 없기 때문이다. 대신 두 가지로 위치를 고정한다: ① R1·R2·R3 세 자산 Recipe 전부에 필수(●) 부착 — 어느 조합이 활성화되든 union에 반드시 포함, ② union 내 실행 순서 최우선(§5.1) — 의존성 위상정렬상 모든 사실 소비 부품의 앞. "글로벌은 아니지만 자산 Recipe 세계의 공통 관문"이라는 이 위치가 B-01의 정확한 좌표다. + +## §9. Coordination — 다른 부품과의 협응 + +B-01의 협응은 대부분 **공급 관계**다 — 호출(cascade)이 아니라, 검증된 사실을 하류 부품이 소비하는 관계. + +| 상대 부품 | 관계 | 협응 내용 | +| --- | --- | --- | +| A-13 QP / A-03 AI | 공급 (활성화) | fundForm = ICA-3c7 → R3·A-13 활성, issuanceExemption = RegD-506c → R1·A-03 활성. B-01은 그 선언의 정합(INV-1·2)을, 자격 판정 자체는 각 부품이 | +| D-01 보유자 수 | 공급 (강한 의존) | activeCaps·capValues·totalAssetsUSD(자산게이트)·fundRegistered80a8·issuerIsFPI·legalClassId를 카드에서 공급 — D-01 문서가 명시한 "B-01이 Manifest와 실제 설정의 일치를 보증"의 이행 주체 | +| C-08 내부자 물량 | 공급 (강한 의존) | volumeLimitActive·outstandingUnits·basisRef·basisAsOf 정합 보증. 분모 신선도(⑤)가 C-08 attestationMaxAge 규율과 짝을 이룸 — 원천 대사는 공동 규율(OD-C08-2 연동) | +| F-04 판매중 매수금지 | 공급 | distributionStatus·restrictedParties 공급 + INV-4(active ⇒ 명단 존재). CONSERVATIVE_DEFAULT의 완화는 정정 버전 경로만(§3.0.1) | +| C-00 전매 경로 | 공급 | enabledResalePaths 공급 + INV-3(framework 허용집합 포함 관계) | +| B-04 엔진 선택 | 공급 | supportedEngines 공급 + INV-5(비영) | +| B-02 토큰 표준 / B-03 이전제한 | 병행 (sibling) | 경계: B-02는 토큰 컨트랙트의 ERC-3643 준수를, B-03은 restrictedFlag 메타데이터를, B-01은 카드 기재의 정합을 본다. 카드의 tokenStandard와 B-02 판정 결과가 어긋나면 — 카드 정합 문제로서 B-01의 REVIEW 큐 | +| A-01·A-02 글로벌 게이트 | 선행 (구조) | Recipe 해석 전에 실행 — B-01보다도 앞. 상호 데이터 의존 없음 | +| A-12 반대정보 | 보완 (진실 축) | 카드 사실의 진실성에 대한 반대정보 flag — B-01(정합 축)과 직교. A-12 flag가 서면 Operator가 정정 버전·SUSPENDED 검토(§4.2의 경계) | +| A-11 증명 유효기간 | 유사 규율 (사람 축) | 사람 claim의 신선도 = A-11, 자산 사실의 신선도 = B-01 ⑤ — 같은 문법의 다른 대상. maxAge 정책의 일관성 검토는 OD-B01-4 | +| Router / Manifest layer | 숙주 | union 첫 원소 고정(§5.1)·ManifestCore/Registry가 판정 입력. B-01은 Manifest layer의 자기 무결성 부품이다 | + +**책임경계 요약**: B-01 = 카드의 존재·상태·버전 승인·내부 정합·신선도 + 앵커 대사 전담. 개별 사실의 법적 판정 = 각 소비 부품. 사실의 진실성 = 온보딩 심사·발행자 보증·A-12. 토큰 표준 = B-02·B-03. 사람 자격·신원 = A계열. B-01은 사실을 만들지도 해석하지도 않고, 사실의 **그릇**이 온전한지만 본다. + +**A-13 §9.5와의 조화 (재확인).** A-13이 서술한 "체결 직후 부품 결과 모순의 재검증·audit alert"는 본 문서 체계에서 채널 2의 확장(Operator 감사 기능 — 판정 로그 간 교차 대사)으로 수용한다. Element 본체의 분류(pre-trade STATELESS)는 부착 매트릭스를 따른다. 표현 통일은 OD-B01-3. + +## §10. 3-Layer Solution — Element / Recipe / Manifest / Operator 매핑 + +- **법 계층(Layer 1→2→3)**: Layer 1 = §5·§12(a)(1)·§17(a)(1933년법 축) + Exchange Act §17(a)(1) + ICA §3(c)(7)(A)(활성화 정합); Layer 2 = Rule 17a-4(e)(7)·(f)·Reg ATS 301(b)(2)·(b)(8)·302·303·Rule 10b-5; Layer 3 = SEC v. Ralston Purina(입증책임)·Release 34-96034(audit-trail 채택). + +- **Element (B-01)**: 채널 1(존재→상태→버전→불변식→신선도 게이트) + 채널 2(hash 대사·사슬 점검) — "카드가 진본·승인·최신·무모순인가"만 판정. + +- **Recipe**: R1·R2·R3 전부 필수 부착, union 첫 원소 고정. R4 미부착(자산 사실이 아닌 행위 패턴 소관). + +- **Manifest**: 검사 대상이자 숙주 — ManifestCore(온체인 경량 core + fullManifestHash 앵커) / off-chain 전문 / ManifestRegistry(버전 사슬). **자기참조 차단**: B-01 판정 파라미터는 카드 밖 거버넌스 상수에 둔다(§3.20). + +- **Operator**: 온보딩 심사·버전 승인(다중서명 + time-lock)·정정 버전 처리·watcher 운영·SUSPENDED/재활성화 서명·보존 양식 export — 05 자료 §4.3(Operator ↔ Manifest) 표의 각 행이 B-01의 거버넌스·대사 전제와 1:1로 정렬된다. Operator의 개입은 전부 서명된 상태 입력이며 체결 경로에는 없다. + +![그림 5.0](figures/B-01_fig50.png) + +*그림 5.0 — 런타임 검증 흐름: 채널 1 게이트(①~⑤) + 채널 2 상시 대사 + 거버넌스 평면 (개발자용)* + +## §11. Operator Layer — Frontend·Off-chain 운영 + +기계 판정형이라도 그 전제(승인 사슬·전문 보관·대사)는 운영이 만든다. B-01의 Operator 층: + +- **대시보드**: 자산별 카드 버전·상태, 마지막 대사 성공 시각·다음 대사 예정, 만료성 사실별 신선도 잔여(만료 임박 경보 — 예: 잔여 20% 도달 시), 보류 중 업그레이드 큐(time-lock 카운트다운), REVIEW_MANIFEST_DRIFT 미처리 건수·시한. + +- **버전 워크플로**: 발행자 신고 → 6단계 심사(기술·법적 검증 포함) → m-of-n 승인 → time-lock → 발효 → 사슬 기록. 정정 버전은 correctionOf 참조와 함께 우선 처리 트랙(301(b)(2)(iv)의 "promptly" 대응). + +- **watcher 운영**: 대사 주기·재시도·다중 watcher 합의(신뢰 모델은 OD-B01-2), 불일치 시 SUSPENDED 서명 입력 + 원인 조사(전문 변조 vs 직렬화 버그 vs 앵커 오기재) — 원인 유형별로 후속이 다르다. + +- **Form ATS 이중 트랙**: 카드 변경 중 Form ATS상 material change 해당분의 식별·신고 캘린더(시행 최소 20일 전, ≥ 20일)와 내부 time-lock의 정렬 — 내부 발효가 규제 신고보다 앞서지 않도록 스케줄 가드(OD-B01-5). + +- **보존·export**: B-01 판정 로그·대사 이력 ≥ 3년(최초 2년 즉시 접근, 303(a)(1)), 버전 사슬 = 존속기간(303(a)(2)(ii) 정신), 17a-4(f) 전자기록 요건 충족 형식으로 export — 감독 검사 시 "그 시점의 카드"를 즉시 재구성 가능해야 한다. + +- **긴급 정지 연동**: Operator 긴급 pause(다중서명 + 사유 기록)는 B-01 관점에서 status 전환의 한 원인일 뿐 — 게이트 로직은 동일 관문(②)으로 처리하고, 사유·해제는 거버넌스 기록이 담는다. + +## §12. Open Issues + +| # | 질문(무엇을 결정해야 하나) | 왜 필요한가 | Priority | 해소 경로(권고) | +| --- | --- | --- | --- | --- | +| OD-B01-1 | **canonical 직렬화 규격** — off-chain 전문의 정규형(필드 순서·인코딩·공백 규칙)을 무엇으로 확정하나 | 정규형 없이는 hash 대사가 불안정 — 동일 내용이 다른 해시를 낳는 false drift 양산 | ⚠ 즉시 | 개발팀 결정 + 규격 문서화(테스트 벡터 포함) | +| OD-B01-2 | **watcher 신뢰 모델** — 대사 주기, 단일 Operator vs 다중 watcher 합의 vs 공개 챌린지, SUSPENDED 자동 전환의 권한·서명 요건 | 채널 간 유일 배선(status 입력)의 보안 경계 — 과소하면 무결성 구멍, 과대하면 오탐 정지 남발 | ⚠ 즉시 | 설계 결정(Operator 키 매트릭스 논의와 병행) + 변호사 검토(자동 정지의 책임) | +| OD-B01-3 | **A-13 §9.5 표현 통일** — post-trade 재검증 서술을 본 문서의 2채널 정리(게이트 = pre-trade, 교차검증 = Operator 감사)로 정렬 | 문서 간 분류 불일치는 구현 혼선의 씨앗 | 높음 | A-13 차기 개정 시 반영(Decipher 자체) | +| OD-B01-4 | **만료성 사실 목록 + maxAge 값** — 어떤 필드가 (value, asOf, maxAge) 대상인가(outstandingUnits·totalAssetsUSD·NAV·distributionStatus·coverageDelta …), 값은 얼마인가 | ⑤의 판정 파라미터 — 법정 아닌 정책이므로 명시적 결정·기록 필요. C-08 attestationMaxAge·A-11 규율과의 일관성 | 높음 | 사업·법무 결정 + 거버넌스 상수 등록 | +| OD-B01-5 | **Form ATS 이중 트랙 정렬** — 카드 변경 중 어느 것이 "material change to the operation"에 해당해 실제 amendment를 요하나; (b)(2)(vi) report 지위에 따른 허위 기재 형사 노출의 내부 통제 반영 | 자산별 사실 변경과 시스템 운영 변경의 경계가 미확정 — 과소 신고·과다 신고 양쪽 위험 | 높음 (Reg ATS 등록 전 확정) | 변호사 위임 | +| OD-B01-6 | **자기참조 차단의 예외 범위** — 판정 파라미터를 거버넌스 상수에 두는 원칙 하에서, 자산별 신선도 차등이 필요한 경우의 배치(자산별 상수 테이블 vs 카드 내 배치 + 별도 승인) | 원칙의 순수성과 운영 유연성의 절충점 | 중간 | 설계 결정(Decipher 자체) | +| OD-B01-7 | **발행자 강제조치 수신 시 정합 검사 범위** — forcedTransfer/recovery 수신 이벤트에서 B-01이 확인할 최소 항목(카드의 restrictedFlag·수신 권한 기재와의 일치 등) | "수신·정합 검사·기록만"이라는 처리 원칙의 검사 항목이 미구체화 (07 자료 Q-B2 연동) | 중간 | 변호사 위임(Q-B2와 병합) + 설계 | + +## §13. 파일명 규칙 (Naming Convention) + +Decipher Element / Recipe 산출물 명명 규칙: + +- **Element:** B-XX_부품이름.md (예: B-01_manifest-integrity.md) +- **Recipe:** R-XX_Recipe이름.md (예: R3_ICA-3c7-fund.md) + +Element 부품 ID 체계(앞글자 = 카테고리): + +| 앞글자 | 카테고리 | +| --- | --- | +| A | 신원·자격 (매수인 측) | +| B | 자산·기술 메타 ← 본 부품(B-01)이 여기 | +| C | 거래 경로·시점 | +| D | 집계·누적 | +| E | 발행자 측 | +| F | 행위·운영 | + +본 부품: **B-01 = "자산·기술 메타 카테고리의 1번 부품"** — 자산 메타 계층의 신뢰 루트. + +물리적 위치: 산출물/elements/ (모든 Element walkthrough) + +## 부록 A — 관련 조문·URL 빠른참조 + +| 조문 | 인용 | 1차 출처 | +| --- | --- | --- | +| Securities Act §5 | 15 U.S.C. §77e(a)·(c) | uscode.house.gov | +| Securities Act §12(a)(1) | 15 U.S.C. §77l(a)(1) | uscode.house.gov | +| Securities Act §17(a) | 15 U.S.C. §77q(a) | uscode.house.gov | +| ICA §3(c)(7)(A) | 15 U.S.C. §80a-3(c)(7)(A) | uscode.house.gov | +| Exchange Act §17(a)(1) | 15 U.S.C. §78q(a)(1) | uscode.house.gov | +| Rule 17a-4(e)(7)·(f) | 17 C.F.R. §240.17a-4 | ecfr.gov | +| Rule 10b-5 | 17 C.F.R. §240.10b-5 | ecfr.gov | +| Reg ATS 요건·기록 | 17 C.F.R. §242.301·§242.302·§242.303 | ecfr.gov | +| 전자기록 개정 release | Release No. 34-96034 (2022-10-12), 87 FR 66412 | sec.gov | +| 입증책임 판례 | SEC v. Ralston Purina Co., 346 U.S. 119, 126 (1953) | govinfo.gov | + +## 부록 B — BUIDL 적용 노트 + +BUIDL-like 테스트 토큰(ERC-3643 모델링 전제)의 카드에서 B-01이 실제로 지키는 것: ① fundForm = ICA-3c7 ↔ fundRecipeId ↔ {A-13, D-01} 부착의 3층 일치(INV-1) — 이 자산 최대의 구조 리스크(QP 검사 누락) 차단, ② distributionStatus의 CONSERVATIVE_DEFAULT 유지 — 완화는 법적 근거가 등록된 정정 버전으로만, ③ D-01·C-08이 소비하는 수치 사실(12gThresholds 전제값·totalAssetsUSD·outstandingUnits)의 asOf 신선도, ④ restrictedParties 명단의 존재성(INV-4) — F-04의 판정 대상이 비어 있는 채 도는 사태 방지, ⑤ 카드 버전 사슬의 무결 — Securitize 명세 갱신 등 사실 변경이 반드시 승인·time-lock 경로로만 반영. 실제 BUIDL의 운영 조건(FPI 여부·발행 표준)은 단정하지 않으며, 그 확정은 D-01 부록 B의 선행 검토(OD-D01-3)와 발행자 확인 사안이다 — B-01은 어느 쪽으로 확정되든 그 확정값이 카드에 정합하게 실리는 것만 보증한다. + +## 부록 C — 용어·경계 정정 노트 + +- **정합 ≠ 진실.** B-01은 기록의 무결성(진본·승인·최신·무모순)을 보고, 내용의 진실성은 온보딩 심사·발행자 보증·A-12가 본다(§4.2). 이 경계를 지우면 기계 판정형이 무너진다. +- **B-01의 §3은 요건 조문이 아니라 설계 명령이다.** "B-01이 §5를 판정한다"가 아니라 "§5의 무과실 구조가 B-01이라는 게이트를 명령한다"로 읽는다(§3 인트로). +- **게이트와 대사는 다른 채널이다.** per-tx 게이트는 SLOAD + 계산만, 해시 재계산·전문 접근은 상시 watcher만 — 둘을 잇는 배선은 서명된 status 입력 하나다(§5.1·§8.3). +- **부등호 두 개의 방향이 반대다.** time-lock: now ≥ approvedAt + delay에서 발효(이상, 경계 허용). 신선도: now − asOf ≤ maxAge에서 유효(이하 허용), > 초과 순간 탈락. 경계값 테스트를 쌍으로 고정한다(§5.3·T6). +- **버전 검사는 집합 소속이지 크기 비교가 아니다.** "더 최신 번호"는 승인의 증거가 아니다 — 우회 버전이 최신 번호를 달 수 있다(T3). +- **글로벌 게이트가 아니다.** A-01·A-02(상대방 속성, Recipe 해석 전)와 달리 B-01은 자산 속성의 Recipe 부착 부품 — 다만 세 자산 Recipe 전부 필수 + union 첫 원소(§8.4). +- **maxAge·delay 값은 정책이다.** 검사 구조는 법정 원리의 구현이지만 파라미터 값은 정책 — 법정인 것처럼 문서화하지 않는다(§6.3). +- **20일은 내부 delay의 법정값이 아니다.** Reg ATS (b)(2)(ii)의 "at least 20 calendar days"는 규제 신고 기한 — 내부 time-lock은 별도 정책이며, 둘의 정렬만 스케줄 가드로 지킨다(OD-B01-5). +- **A-13 §9.5의 post-trade 서술은 Operator 감사 채널로 정리한다.** Element 본체는 pre-trade STATELESS(부착 매트릭스 기준) — OD-B01-3. + +## 부록 D — 결론 + +B-01은 "이 거래가 딛고 선 신상카드가 진본·승인·최신·무모순인가"를 기계로 판정하는 부품이다. 법리 골격은 이렇다 — 미국 증권규제에서 면제는 전부 사실에 달려 있고(§3.4가 대표례), 사실이 틀리면 무과실 책임의 기본값(§5·§12(a)(1))으로 되돌아가며, 맞다는 것은 주장하는 쪽이 증명해야 한다(Ralston Purina). 그 사실의 기록은 규제 기록으로서 작성·정확 유지·버전 포함 보존 의무를 지고(§17(a)(1)·17a-4(e)(7)·302/303), 전자기록이라면 audit-trail 또는 WORM의 무결성 방식을 요구받으며(17a-4(f)·Release 34-96034), 변경은 사전 대기·정정 의무·기록의 규율을 따라야 하고(Reg ATS 301(b)(2)), 허위인 채 운영되면 과실만으로도 책임이 열린다(§17(a)(2)·(3)·10b-5). 구현은 2채널이다 — per-tx 게이트(존재→상태→버전→불변식→신선도, 순수 SLOAD + 계산)와 상시 대사(hash 앵커·버전 사슬, 불일치 시 서명 입력으로 SUSPENDED). 게이트는 union의 첫 원소로 고정되어 모든 사실 소비 부품에 앞선다. 정합과 진실의 경계, 자기참조 차단(파라미터는 카드 밖), 강화 방향 override의 이중 방벽, 부등호 두 개의 반대 방향이 설계의 급소이며, canonical 직렬화·watcher 신뢰 모델·Form ATS 이중 트랙은 변호사·개발팀 확정으로 남긴다. B-01이 서 있는 한, "Regulation as Data"는 표어가 아니라 증명 가능한 운영 상태다. + +--- + +**변경 로그** + +- [2026-07-07 v1.0] (canton-rwa) B-01 최초 작성 — A-13 v1 형식. 재정의(ManifestCore + fullManifestHash 앵커·온오프체인 하이브리드) 반영: 2채널 구조(per-tx 게이트 + 상시 대사) 확정, union 첫 원소 실행 위치 고정, 자기참조 차단(판정 파라미터의 카드 외부 배치) 설계 불변식화. §3 = 설계 명령형 구성(무과실 §5·§12(a)(1) + Ralston 입증책임 + §3(c)(7)(A) 활성화 정합 + §17(a)(1)→17a-4(e)(7)/(f)[2022 audit-trail, Release 34-96034] + Reg ATS 301(b)(2)/(b)(8)·302·303 + §17(a)·10b-5), 전 조문 1차 출처 verbatim 검증(uscode.house.gov·ecfr.gov 2026-07-01 현행본·sec.gov·govinfo.gov). 불변식 INV-1~6·거절 코드 7종·테스트 T1~T9(회귀: T3 집합 소속, T4 활성화 정합, T8 완화 override) 확정. A-13 §9.5 post-trade 서술과의 조화(OD-B01-3) 및 D-01·C-08 공급 관계 명문화. OD-B01-1~7 등록. 그림 2매(fig30 법조문 흐름·fig50 런타임 2채널) Graphviz 렌더. diff --git a/docs/compliance/elements/B-02.md b/docs/compliance/elements/B-02.md new file mode 100644 index 0000000..1ede972 --- /dev/null +++ b/docs/compliance/elements/B-02.md @@ -0,0 +1,725 @@ +# B-02 토큰 표준 (Token Standard Conformance) — 부품 심층 인수인계 문서 (Walkthrough) + +**이 문서는 무엇인가.** Decipher RWA DEX의 컴플라이언스 부품 중 하나인 토큰 표준 부품(내부 식별자 B-02)을, 미국 증권법을 처음 보는 사람도 이해할 수 있도록 풀어 쓴 인수인계 문서다. 개발자·법무팀·외부 자문 변호사·학회원이 각자 작업의 base로 그대로 쓸 수 있도록 — (1) 이 부품이 지키는 규제 원리가 어디서 왔고 왜 존재하는지, (2) 어떤 사실을 입력받아 (3) 어떤 로직으로 판정하고 (4) 실패하면 어떻게 처리하며 (5) 어떤 테스트로 검증하는지를, 기술 요소마다 풀이를 함께 붙여 설명한다. + +**자체완결 원칙.** 이 문서는 다른 내부 문서를 열지 않아도 단독으로 이해되도록 작성했다. 인용은 미국 연방법·연방규칙·SEC 발행문서·판례 등 외부 공식 자료만 사용하며, 기술 표준은 Ethereum 공식 표준 문서(EIP-3643, eips.ethereum.org)를 기준으로 한다. + +**⚠ 출처·정정 노트 (읽기 전 필독).** 본 부품의 인용은 다음 1차 출처를 기준으로 한다 — 15 U.S.C. §77e(1933년 증권법 §5)·§77b(a)(11)(underwriter 정의)·§77d(§4(a)(7)·§4(d)·§4(e))·§80a-3(c)(7)(A)(투자회사법)·§78c(a)(25)(transfer agent 정의)·§78q-1(1934년법 §17A)은 uscode.house.gov 현행본, 17 C.F.R. §230.502(d)(Reg D 재판매 제한)·§230.144(a)(3)(restricted securities 정의)는 eCFR 현행본(Title 17, 2026-07-01 기준), Commissioner Peirce 성명(2025-07-09)과 3개 Division 공동 staff statement(2026-01-28)는 sec.gov, SEC v. Ralston Purina Co., 346 U.S. 119 (1953)는 govinfo.gov(U.S. Reports)다. 특히 헷갈리기 쉬운 정정 포인트는 다음과 같다(상세는 부록 C). + +- **B-02는 매수인 자격을 판정하지 않는다.** B-02가 보는 것은 사람이 아니라 **기계**다 — "이 거래의 대상 토큰이 실제로 ERC-3643 표준 기계이고, 그 기계의 구성요소(Identity Registry·Compliance·agent 권한)가 등록된 대로 배선되어 있고, 지금 살아서 이 이전을 허용하는가". 매수인의 적격투자자·QP 자격은 A-03·A-13이, 지갑↔신원 바인딩의 사실은 A-04가 본다. B-02의 마지막 단계인 위임 프로브(canTransfer 조회)가 결과적으로 수신자 검증 여부를 스치지만, 이는 **발행 측 기계에게 그 기계 자신의 답을 미리 물어보는 것**이지 Decipher가 자격을 재판정하는 것이 아니다. + +- **B-02의 법적 심장은 Rule 502(d)의 legend·stop-transfer다.** 종이 증권 시대에 제한증권의 유통을 실제로 막던 도구는 세 가지였다 — 증서 문면의 제한 문구(legend), 명의개서 정지 지시(stop transfer), 그리고 그 지시를 집행하는 명의개서대행(transfer agent). Rule 502(d)(3)이 legend를 reasonable care의 예시로 명문화한다(§3.4). ERC-3643은 이 세 도구의 디지털 후계자다 — legend는 코드에 내장된 이전 조건으로, stop transfer는 canTransfer의 revert로, 명의개서대행의 명부는 Identity Registry로. **B-02는 "그 디지털 legend 기계가 존재하고, 진짜이고, 켜져 있는가"를 확인하는 부품**이다. + +- **위임(G2)의 자물쇠.** Decipher 설계 원칙 G2(Build On, Don't Rebuild)는 발행 측이 이미 수행하는 검증(수신자 자격·토큰 룰)을 재수행하지 않고 신뢰·위임한다. 그런데 위임이 법적으로 안전하려면 세 가지가 전제되어야 한다 — 위임 대상이 (a) 검증된 표준 기계 그 자체이고, (b) 상장 후 몰래 바꿔치기되지 않았고, (c) 지금 작동 상태여야 한다. 이 전제 셋을 매 거래 확인하는 것이 B-02다. B-02 없이 G2를 돌리는 것은, 은행이 주민센터 증명서를 믿으면서 그 증명서가 진짜 주민센터에서 나왔는지는 안 보는 것과 같다. + +- **B-01(카드)과 B-02(기계)는 대칭 부품이다.** B-01은 자산 신상카드(Manifest)의 무결성 — "판정에 쓰이는 사실이 진본·승인·최신·무모순인가" — 을 지킨다. B-02는 그 카드가 가리키는 실물, 즉 토큰 컨트랙트의 무결성 — "카드에 적힌 기계가 실제로 그 표준·그 배선으로 존재하고 살아 있는가" — 을 지킨다. 카드 없는 기계 검사도, 기계 확인 없는 카드 신뢰도 반쪽이다. 실행 순서상 B-01이 카드를 보증한 직후 B-02가 그 카드의 토큰 측 기재를 실물과 대조한다. + +- **부착은 R1·R2, 커버리지는 전수.** 부착 매트릭스상 B-02는 R1(발행)·R2(재판매)에 필수(●) 부착되고 R3(펀드)·R4(행위감시)에는 부착되지 않는다. 그런데 DEX 위의 모든 토큰 이동은 발행(R1) 아니면 재판매(R2)이므로, **B-02는 사실상 모든 거래에서 돈다** — R3에 별도 부착하면 같은 검사가 한 거래에서 중복 실행될 뿐이다. R3가 부착하는 것은 펀드 상태에 고유한 요건(A-13·D-01)이고, 그 요건의 집행 기계를 확인하는 일은 R1·R2 경유로 이미 커버된다(§8.4). + +- **표준 준수와 규칙 내용의 적법성은 다르다.** B-02가 확인하는 것은 기계의 **형식과 상태**(표준 인터페이스·배선·작동)이지, 그 기계에 발행자가 등록한 규칙(compliance 모듈의 국가 제한값·보유 한도값 등)의 **실체적 적법성**이 아니다. 발행 측 규칙 내용의 적법성은 발행자 책임 영역(설계 원칙 G5 — 각자의 의무는 각자에게)이며, Decipher는 상장 심사에서 카드 선언과의 정합(요구 모듈 존재)까지만 본다. 이 경계를 지우면 B-02에 불가능한 책임(타인 규칙집의 법률 감수)이 얹힌다. + +- **표준 문언상 mint·forcedTransfer는 compliance 모듈을 우회한다.** EIP-3643 표준 문서는 mint와 forcedTransfer가 수신자의 신원 검증(isVerified)만 요구하고 compliance 규칙은 우회하며, burn은 자격 검사 전부를 우회한다고 명시한다. 상시 발행 펀드(BUIDL-like)에서 신규 보유자는 mint로 들어오므로, **보유자 수 상한 같은 모듈이 발행 경로에서 강제되는지는 구현 의존**이다 — 표준만 믿고 D-01의 온체인 팔이 발행까지 덮는다고 가정하면 안 된다(상장 심사 L4의 행위 검증 항목, §7 T9·OD-B02-4). + +**양식 메모.** 이 문서는 A-13 v1 인수인계 양식의 번호·헤더·서술 관습을 따른다. B-01과 마찬가지로 B-02는 기계 판정형(Pattern A) 부품이라 §8은 증명서 패턴이 아니라 기계 판정 패턴을 다루되, B-02 고유의 변형 — 마지막 검사가 정적 계산이 아니라 **다른 기계의 판정 함수를 호출하는 위임 프로브**라는 점 — 을 §5·§8에서 별도로 정리한다. ERC-3643 변환은 claim topic이 아니라 토큰 표면(함수·바인딩·상태)을 다룬다(claim.basis enum은 B-02에 해당 없음 — 상세 §3.20). + +## §1. 규제 맥락 — 이 부품이 지키는 원리는 어디서 왔는가 (Context First) + +**왜 맥락부터 읽어야 하나.** 이 부품은 한 줄로 말하면 "**이 거래의 대상 토큰이 진짜 ERC-3643 기계이고, 등록된 배선 그대로이고, 지금 이 이전을 허용하는가**"를 거래 직전에 판정한다. 얼핏 순수한 기술 스펙 검사처럼 보이지만, 이 검사의 뿌리는 미국 제한증권(restricted securities) 유통 통제의 90년 된 실물 인프라 — 증서 legend, stop transfer, 명의개서대행 — 에 있다. 그 인프라가 왜 존재했고, 토큰에서 무엇으로 바뀌었으며, 왜 확인 없이는 위임할 수 없는지를 먼저 깐다. + +### 1.1 종이 시대의 세 도구 — legend, stop transfer, 명의개서대행 + +미국 사모 시장의 기본 문법은 이렇다. 등록 없이 발행된 증권은 "제한증권"이 되고(§3.5), 그 증권은 등록 또는 별도 면제 없이는 되팔 수 없다(§3.4). 문제는 집행이다 — 매수인이 이 제한을 무시하고 아무에게나 팔면, 그 매수인은 발행인에서 대중으로 증권이 흘러가는 사슬의 고리, 즉 법정 underwriter가 되어(§3.2) 자신의 면제를 잃고, 발행인의 발행 면제까지 위태롭게 한다. 그래서 시장은 제한을 **증권 자체에 물리적으로 붙이는** 세 도구를 발전시켰다. + +첫째, **legend** — 증서 문면에 "이 증권은 1933년법에 따라 등록되지 않았으며 등록 또는 면제 없이 재판매할 수 없다"는 문구를 인쇄한다. 매수인·중개인·명의개서대행 누구도 "몰랐다"고 말할 수 없게 만드는 경고판이다. 둘째, **stop transfer** — 발행인이 명의개서대행에게 "이 증서는 법률의견서 없이 명의개서하지 말라"는 지시를 등록한다. 경고판을 넘어, 이전 자체를 물리적으로 막는 빗장이다. 셋째, **명의개서대행(transfer agent)** — 주주명부를 유지하고, 이전을 등록하고, 무권한 발행을 감시하는 기관(§3.8). legend를 읽고 stop transfer를 집행하는 실행 주체다. + +Rule 502(d)는 이 실무를 규칙 문언으로 끌어올렸다 — Reg D로 판 증권의 발행인은 매수인이 underwriter가 되지 않도록 reasonable care를 다해야 하고, 그 care는 (1) 매수 목적의 합리적 조사, (2) 재판매 제한의 서면 고지, (3) **증서 또는 증권을 표창하는 그 밖의 문서에의 legend 부착**으로 증명될 수 있다(§3.4). 요컨대 미국법은 "제한을 문서에 새기고, 이전 기계에 빗장을 걸고, 그 기계를 규제받는 기관이 운영한다"는 3중 구조를 제한증권 유통 통제의 표준형으로 인정해 왔다. + +**쉽게 말하면:** 한국의 보호예수와 비슷한 목적을, 미국은 예탁기관의 일괄 동결이 아니라 증권 낱장마다 붙는 경고문 + 명의개서 창구의 빗장으로 달성해 왔다. 제한이 증권을 따라다니는 구조다. + +### 1.2 토큰 시대의 대응물 — ERC-3643, 자기집행형 legend + +ERC-3643(T-REX — Token for Regulated EXchanges)은 위 세 도구를 코드로 옮긴 Ethereum 공식 표준이다(Final, 2021-07, ERC-20·ERC-173 기반). 표준이 정의하는 구성요소와 종이 시대 도구의 대응은 정확히 1:1이다. + +| 종이 시대 도구 | ERC-3643 대응물 | 작동 방식 | +| --- | --- | --- | +| 증서 legend (경고문) | Token의 조건부 transfer 구현 | 이전 조건이 증서 문면이 아니라 이전 함수 자체에 내장 — 읽는 경고가 아니라 실행되는 조건 | +| stop transfer (빗장) | isVerified·canTransfer의 revert | 무자격 수신자·규칙 위반 이전은 접수 후 반려가 아니라 체결 자체가 성립하지 않음 | +| 명의개서대행의 주주명부 | Identity Registry(+Storage) | 지갑↔검증된 신원의 공식 매핑 — 적격자 명부의 온체인 판 | +| 명의개서대행의 강제 권한 | Agent 역할(forcedTransfer·freeze·recovery·mint·burn) | 법원 명령·상속·키 분실 같은 상황의 처리 권한 | +| 공인 검증기관 지정 | Trusted Issuers Registry + Claim Topics Registry | 어느 기관의 어떤 자격 확인서를 믿을지의 온체인 명단 | +| 발행인의 이전 규칙 | Modular Compliance | 국가 제한·보유 한도·보유자 수 상한 등을 이전 순간 자동 검사 | + +핵심 차이는 집행의 시점이다. 종이 legend는 **읽히기를 기다리는** 수동적 경고이고 stop transfer는 사람이 집행하는 지시이지만, ERC-3643의 이전 조건은 **자기집행형(self-executing)**이다 — 조건 미충족 이전은 시도 단계에서 revert된다. Rule 502(d)의 마지막 문단이 명시하듯 (1)~(3)은 reasonable care의 배타적 방법이 아니고 "다른 조치"도 이를 충족할 수 있는데(§3.4), 이전 조건을 코드로 강제하는 토큰은 종이 legend보다 구조적으로 강한 "다른 조치"다. 다만 규제기관의 확인도 명확하다: 토큰화는 마법이 아니다 — "Tokenized securities are still securities"(§3.10). 표준은 법을 대체하는 것이 아니라 법이 요구해 온 통제를 구현하는 수단이며, 그 수단이 진짜인지의 확인 책임은 사라지지 않는다. + +### 1.3 왜 별도 부품인가 — 위임의 세 전제 + +Decipher의 거래 측 검사는 발행 측이 이미 하는 검증을 재수행하지 않는다(설계 원칙 G2 — 같은 사실을 두 번 검사하지 않는다). BUIDL-like 자산에서 수신자 자격 확인(QP claim·KYC)의 1차 집행자는 토큰 자신이다 — Identity Registry에 없는 지갑, claim이 없는 신원으로의 이전은 토큰이 거부한다. Decipher의 부품들(A-03·A-13·A-04)은 같은 레지스트리·같은 claim을 읽어 **거래 맥락의 판정**(매도인 측·경로·시장 행위)을 얹을 뿐이다. + +이 분업은 세 가지가 참일 때만 법적으로 안전하다. + +첫째, **표준성** — 위임 대상이 정말 그 표준이어야 한다. "ERC-3643 호환"이라 주장하는 컨트랙트가 실제로는 isVerified를 항상 true로 반환하는 껍데기라면, Decipher의 모든 위임은 허공에 대고 이루어진다. 표준 준수는 자기 신고가 아니라 검증 대상이다(상장 심사 L1~L4, §4.3). + +둘째, **배선 불변** — 상장 시점에 검증한 기계가 거래 시점에도 같은 기계여야 한다. ERC-3643 토큰의 owner는 identityRegistry·compliance 바인딩을 교체할 수 있고, 프록시 구조라면 구현체 자체를 업그레이드할 수 있다. 상장 후 compliance가 무제한 통과 모듈로 조용히 바뀌면, 상장 심사의 모든 결론이 소급 무효가 된다. 그래서 배선은 상장 때 한 번이 아니라 **매 거래** 등록값과 대조한다(게이트 ②). + +셋째, **작동 상태** — 기계가 지금 살아서 이 이전을 허용해야 한다. 토큰이 pause되어 있거나, 매도인 지갑이 동결되어 있거나, 자유 잔액이 부족하거나, 발행 측 규칙이 이 이전을 거부한다면, Decipher의 다른 26개 부품이 전부 PASS해도 체결은 토큰에서 revert된다. 그 실패를 체결 시점이 아니라 검사 시점에 미리 아는 것 — 발행 측 기계에게 그 기계 자신의 판정 함수(canTransfer)를 미리 물어보는 위임 프로브 — 이 게이트 ⑤다. + +이 세 전제의 확인을 "기술팀이 알아서"에 두지 않고 법률 부품으로 승격하는 이유는, 전제가 무너졌을 때의 귀결이 기술 장애가 아니라 **법률 사고**이기 때문이다 — 제한 기계가 꺼진 채 제한증권이 유통되면 §5 위반(§3.1)·underwriter 책임(§3.2)의 사정권으로 직행하고, 그 유통을 venue가 매개했다면 venue 자신의 노출이 된다. + +### 1.4 Decipher 시스템에서 왜 중요한가 — 위임 구조 전체의 자물쇠 + +B-01이 무너지면 모든 부품이 오염된 사실 위에서 돌고, B-02가 무너지면 모든 위임이 존재하지 않는 기계를 향한다 — 둘은 Decipher 신뢰 루트의 두 기둥이다. 구체적으로 B-02의 실패는 세 층에서 증폭된다. ① **집행 층**: 발행 측 게이트가 껍데기면 "위반 거래는 체결되지 않는다"(G1)는 명제 자체가 거짓이 된다 — 컴플라이언스가 돌아가는 것처럼 보이는 시장에서 무자격 보유자가 조용히 쌓인다. ② **면제 층**: §3(c)(7) 펀드의 "전원 QP 보유" 조건(§3.7)은 이전 게이트가 유지 장치인데, 게이트가 가짜면 면제 조건이 거래마다 침식된다. ③ **기록 층**: Ralston Purina의 입증책임 구조(§3.3)에서, 바꿔치기된 기계 위에 쌓인 "검사 통과" 기록은 증명 자산이 아니라 "체계적으로 잘못 운영된 증거"로 뒤집힌다. + +역으로 B-02가 서 있으면, Decipher의 심리스함의 원천인 Coverage Delta(발행 측 검증의 신뢰·위임)가 맹신이 아니라 **매 거래 검증되는 신뢰**가 된다. "재검증 안 함 ≠ 확인 안 함" — 사실은 두 번 검사하지 않되, 그 사실을 만드는 기계의 무결성은 매번 확인한다. 이것이 B-02의 자리다. + +## §2. 메타 정보 (Internal Identifier Box) + +아래는 Decipher 내부 PM 규약상의 식별자·분류값을 한곳에 모은 박스다. 본문에서는 이 코드들을 단독으로 쓰지 않고 "본 부품"·"토큰 표준 부품" 같은 자연어로 부른다. + +| 항목 | 값 | 한 줄 풀이 | +| --- | --- | --- | +| 부품 이름 | 토큰 표준 (Token Standard Conformance) | 위임 대상 기계의 진위·배선·작동 확인원 | +| 검사 대상 | 대상 토큰의 ERC-3643 표준 준수(상장 심사) + 구성요소 배선 불변(Identity Registry·Compliance 바인딩·구현체 codehash) + 표준 상태(paused·동결·자유 잔액) + 위임 프로브(isVerified·canTransfer의 사전 실행) | "카드가 가리키는 기계가 진짜·그대로·살아 있고, 이 이전을 허용하는가" | +| Internal ID | B-02 (Decipher PM 규약) | 부품 일련번호 | +| 검증 방식 | 기계 판정형(Pattern A) — 정적 배선 대조 + 결정론적 위임 프로브 | 판단 0, 계산·조회 100 — reasonable belief가 낄 자리가 없다 | +| Timing | pre-trade (union 내 B-01 직후 — 자산 메타 계열 2순위) | 카드 보증 직후, 사람 자격 부품보다 앞서 기계부터 확인 | +| Stateful 여부 | STATELESS | per-tx 판정은 현재 온체인 상태의 정적 스냅샷 검사 — 과거 거래 누적에 의존하지 않음 | +| 주 활성화 Recipe | R1(Reg D 506(c) 발행)·R2(재판매) 필수 부착 | 모든 토큰 이동은 R1 또는 R2 경유 → 사실상 전 거래 커버(§8.4) | +| Cumulative Recipe | 해당 없음 (R3·R4 미부착) | R3는 펀드 고유 요건만 부착 — 기계 확인은 R1·R2 경유로 충족 | +| Cascade Element | 없음 — B-02는 다른 부품을 호출하지 않는다 | 위임 프로브는 부품 간 cascade가 아니라 발행 측 컨트랙트로의 staticcall | +| 성숙도 | 완료 → 본 문서로 기준서 확정 | 기존 정리(그룹 1) + 배선 드리프트·위임 프로브·상장 파이프라인 정밀화 반영 | +| 파일·위치 | B-02_token-standard.md · 산출물/elements/ | 산출물 경로 | + +## §3. 법적 근거 (Layer 1 → 2 → 3) + +**읽는 법.** 법적 근거는 세 겹이다 — Layer 1(조문)은 의회가 만든 법률 텍스트(statute), Layer 2(규칙)는 SEC가 그것을 실무 수준으로 구체화한 연방규칙(rule), Layer 3(해석)은 판례·SEC 발행문서가 모호한 부분을 메운 해석이다. 아래 §3.0.2 표 1의 "종류" 칸이 그대로 Layer에 대응한다 — Statute = Layer 1(§5·§2(a)(11)·§4(a)(7)/(d)/(e)·§3(c)(7)(A)·Exchange Act §3(a)(25)·§17A), SEC Rule = Layer 2(502(d)·144(a)(3)), Case·SEC Staff = Layer 3(Ralston Purina·Peirce 성명·2026 공동 staff statement). 본 절은 논리 흐름 순서로 배열돼 §3.1~§3.11 번호를 유지하며, 각 항목이 어느 Layer인지는 이 표로 확인하면 된다. + +B-01과 마찬가지로, B-02의 §3도 "요건 조문 → 요건 분해"가 아니라 **"조문이 이런 기계를 명령한다"**의 구조로 읽어야 한다. 흐름은 네 다발이다 — ① 왜 제한이 증권을 따라다니는가(§3.1~§3.3: 무과실 기본값 + underwriter 사슬 + 입증책임), ② 제한을 증권에 붙이는 법정 도구(§3.4~§3.7: legend·restricted 지위의 승계·재판매 후 지속·펀드 축), ③ 그 도구를 돌리는 기계의 규제 지위(§3.8~§3.9: transfer agent 정의·등록), ④ 토큰이어도 같다(§3.10~§3.11: 토큰화의 법적 불변성). + +### 3.0 법조문 관계 플로우차트 (개발자용) + +아래 그림은 위 네 다발이 B-02 설계로 수렴하는 흐름을 정리한 것이다 — §5 무과실 기본값 → §2(a)(11) underwriter 사슬 위험 → Ralston Purina 입증책임 → Rule 502(d) legend·stop-transfer(핵심) → Rule 144(a)(3) restricted 지위의 승계 → §4(a)(7)·§4(e)(1)(C) 재판매 후에도 제한 지속 → §3(c)(7)(A) 펀드 축(이전 게이트 = 면제 유지 장치) → §3(a)(25)·§17A transfer agent 기계·권한(D-01 연동 hook) → Peirce·2026 staff statement(토큰화는 성질 불변, native/wrapper 분기) → B-02의 판정 구조(상장 L1~L5 + 게이트 ①~⑤). 각 조항 상세는 §3.1~§3.11. + +**범례.** + +- 파랑 = 제정법(Layer 1) + +- 초록 = SEC 규칙(Layer 2) + +- 주황 = 판례·SEC Staff(Layer 3) + +- 빨강 = 책임·위험 조항(제한 붕괴의 귀결) + +- 보라 = B-02 판정 구조(수렴점) + +![그림 3.0](fig30_b02_statute_flow.png) + +*그림 3.0 — 법조문 관계 흐름: 무과실·underwriter 사슬·입증책임 → legend·restricted 승계 → transfer agent 기계 → 토큰화 불변 → B-02 (개발자용)* + +### 3.0.1 실제 BUIDL-like 자산에 어떻게 적용되나 + +**(재확인) 본 서술은 실제 BlackRock BUIDL의 발행 표준·transfer architecture·현재 운영 조건을 단정하지 않는다 — BUIDL-like §3(c)(7) private fund interest를 ERC-3643 테스트 토큰으로 모델링한 것이다.** 현실의 BUIDL은 Securitize의 자체 표준(DS Protocol)으로 존재하며, "ERC-3643으로 재구성됐다"는 가정 자체가 B-02의 검사 대상이다 — 가정이 아니라 확인으로 바꾸는 것이 상장 심사다. + +B-02 관점에서 BUIDL-like 카드의 토큰 측 기재와 확인 지점은 다음과 같다. ① **tokenStandard = ERC-3643 + tokenAddress** — 상장 심사 L1~L2에서 그 주소의 컨트랙트가 실제로 표준 함수 표면(identityRegistry()·compliance()·paused()·isFrozen()·getFrozenTokens()·forcedTransfer()·recoveryAddress() 등)을 갖추고 구성요소가 배선되어 있음을 확인하고, 검증 시점의 구성요소 주소·구현체 codehash를 카드에 등록값으로 봉인한다. ② **tokenizationModel = NATIVE_ISSUER** — Giwa 체인에서 발행인 명의로 native 발행된 토큰인지, 제3자가 보관 증권을 wrapping한 토큰인지의 구분. wrapper라면 그 토큰은 원 증권과 **별개의 증권**("receipt for a security")일 수 있어 법률 분석 전체가 달라진다(§3.10~§3.11) — NATIVE_ISSUER가 아니면 본 Recipe 구성으로는 상장 거절. ③ **agent 권한 배선** — mint·forcedTransfer·freeze·recovery 권한이 카드에 기재된 주체(transfer agent인 Securitize 통제 키·발행자 거버넌스)에게만 있는지. 상시 발행 펀드는 매월 분배가 신규 발행(mint)이므로 mint 권한의 배선이 특히 중요하다. ④ **요구 모듈 존재** — 카드가 선언한 발행 측 규칙(국가 제한·보유자 수 상한 등)에 대응하는 compliance 모듈이 실제 바인딩되어 있는지 — 단, 표준 문언상 mint는 모듈을 우회하므로 보유자 수 상한이 발행 경로까지 덮는지는 구현 확인 사항이다(§7 T9). 거래 시점에는 위 등록값과 실물의 일치(게이트 ②)와 작동 상태(③~⑤)만 빠르게 확인한다. + +### 3.0.2 조문 근거표 (Authority) + 순서·중요성 + +아래 두 표가 §3의 지도다. **표 1**(Authority)은 각 근거가 어떤 종류(=Layer)이고 무슨 내용이며 B-02에 어떻게 닿는지를, **표 2**(순서·중요성)는 아래 §3.1~§3.11 소단원의 읽는 순서(논리 흐름)와 중요성을 보여준다. 제정법 출처는 uscode.house.gov로 통일했으며 govinfo.gov/link/uscode/... 딥링크도 동일한 1차 출처다. + +**표 1 — Authority(근거 목록)** + +| 종류 | Authority | 내용 | B-02 관련성 | Direct/Supporting | Official URL | +| --- | --- | --- | --- | --- | --- | +| Statute | Securities Act §5 · 15 U.S.C. §77e(a)·(c) | 미등록 offer·sale 금지(무과실 기본값) | 제한 기계 붕괴의 종착점 — 통제 없는 재판매 = §5 회귀 | Background | uscode.house.gov | +| Statute | Securities Act §2(a)(11) · 15 U.S.C. §77b(a)(11) | underwriter 정의(발행인→대중 사슬의 고리 포함) | 기계 없는 유통이 만드는 인적 책임 — 502(d) reasonable care의 보호 대상 | Background(핵심 전제) | uscode.house.gov | +| Case | SEC v. Ralston Purina Co. · 346 U.S. 119, 126 (1953) | 면제 주장자가 입증책임 부담 | 기계 확인·상장 심사 기록이 그 증명 자산 | Direct(설계 원리) | govinfo.gov | +| SEC Rule | Rule 502(d) · 17 C.F.R. §230.502(d) | 재판매 제한 + reasonable care 3방법(조사·서면 고지·legend) + 비배타 | ★핵심 — ERC-3643 = 자기집행형 legend·stop-transfer. B-02 = 그 기계의 실재·작동 확인 | Direct | ecfr.gov | +| SEC Rule | Rule 144(a)(3) · 17 C.F.R. §230.144(a)(3)(i)·(ii) | restricted securities 정의 — 502(d) 제한부 취득분 명시 포함 | 제한 지위는 증권을 따라다닌다 → 기계도 전 수명 유지 | Direct | ecfr.gov | +| Statute | Securities Act §4(a)(7)·§4(d)·§4(e) · 15 U.S.C. §77d | 자격자 간 재판매 면제 요건 + (e)(1)(C) restricted 지위 유지 | R2 경로 — 적법 재판매 후에도 제한·기계는 지속 | Conditional(R2) | uscode.house.gov | +| Statute | ICA §3(c)(7)(A) · 15 U.S.C. §80a-3(c)(7)(A) | 전원 QP 보유 + no public offering의 사실 의존 면제 | 펀드 자산에서 이전 게이트 = 면제 유지 장치 — 기계 무결성의 추가 stakes | Conditional(펀드 자산) | uscode.house.gov | +| Statute | Exchange Act §3(a)(25) · 15 U.S.C. §78c(a)(25) | transfer agent 정의(registrar·이전 등록·book-entry) | ERC-3643 agent·Identity Registry가 수행하는 기능의 법적 이름 | Direct(기능 식별) | uscode.house.gov | +| Statute | Exchange Act §17A(a)(1)(A)·(c)(1) · 15 U.S.C. §78q-1 | 정확한 이전·명부의 투자자 보호 지위 + TA 등록 의무의 범위(§12 등록 증권) | agent 권한 배선 검사의 규제 축 — D-01 실패 시 등록 의무 활성 hook | Conditional(권한 배선·D-01 연동) | uscode.house.gov | +| SEC Staff | Peirce, "Enchanting, but Not Magical" (2025-07-09) | 토큰화는 성질 불변 — native/제3자 wrapper 모델 구분, receipt·swap 위험 | tokenizationModel 검사(NATIVE_ISSUER)의 근거 | Supporting | sec.gov | +| SEC Staff | Corp Fin·IM·Trading and Markets 공동 statement (2026-01-28) | tokenized security 정의 + 분류 — 실질 우선 | 동일 원리의 최신 staff 정리 — Commission action 아님(법적 효력 없음) 유의 | Supporting | sec.gov | + +**표 2 — 조문 순서·중요성 한눈에 보기** + +| 순서 | 조문 | 중요성 | B-02가 그걸로 하는 일 | +| --- | --- | --- | --- | +| §3.1 | Securities Act §5 — 등록의무 기본값 | 배경(핵심 전제) | 안 함 — 기계 붕괴의 종착점을 정의 | +| §3.2 | §2(a)(11) — underwriter 정의 | 배경(핵심 전제) | 안 함 — 통제 없는 유통의 인적 책임 구조 정의 | +| §3.3 | Ralston Purina — 입증책임 | 핵심(설계 원리) | 상장 심사·게이트 이력을 증명 자산으로 남기는 근거 | +| §3.4 | Rule 502(d) — legend·reasonable care | ★핵심 | 자기집행형 legend 기계의 실재·작동을 매 거래 확인 | +| §3.5 | Rule 144(a)(3) — restricted 정의 | 핵심 | 제한 지위의 승계 = 기계의 전 수명 유지 요구 | +| §3.6 | §4(a)(7)·(d)·(e) — 자격자 간 재판매 | 조건부(R2) | 적법 재판매 후에도 (e)(1)(C)로 제한 지속 확인 | +| §3.7 | ICA §3(c)(7)(A) — 펀드 축 | 조건부(펀드) | 안 함(요건은 A-13·D-01) — 게이트 = 면제 유지 장치임을 확인 | +| §3.8 | Exchange Act §3(a)(25) — TA 정의 | 핵심(기능 식별) | agent·Registry 기능을 TA 기능으로 식별 | +| §3.9 | §17A(a)(1)·(c)(1) — TA 등록 | 조건부 | agent 권한 배선 검사 + D-01 연동 hook | +| §3.10 | Peirce 성명 (2025) — 토큰화 불변 | 보조 | tokenizationModel = NATIVE_ISSUER 상장 검사 | +| §3.11 | 공동 staff statement (2026) — 분류 | 보조 | 동일 검사의 최신 staff 정리 참조 | +| §3.19 | Sub-요건 분해 매트릭스 | — | 위 원리를 원자적 검증 단위로 분해 | +| §3.20 | ERC-3643 변환 총정리 | — | §3.1~§3.11의 토큰 표면 매핑을 한 표로 | + +**경계 — 이 부품이 다루지 않는 것.** 아래는 같은 토큰·같은 거래에 작동하지만 B-02가 아니라 다른 부품·레이어가 책임진다 — 누락이 아니라 소관 분리이며, B-02 안에 끌어다 구현하지 않는다. + +- **매수인·매도인의 자격 실체** — 적격투자자는 A-03, QP는 A-13, 신원·지갑 바인딩의 사실은 A-04, 증명 신선도는 A-11 소관. B-02의 위임 프로브가 isVerified를 경유하더라도 자격을 재판정하는 것이 아니다(§8.2). + +- **카드 기재의 정합·진실** — Manifest의 무결성은 B-01, 기재 내용의 진실성은 온보딩 심사·발행자 보증·A-12 소관. B-02는 카드의 토큰 측 기재를 **실물과 대조**할 뿐, 카드 자체를 검사하지 않는다. + +- **이전제한 메타데이터의 법적 의미** — restrictedFlag·보유기간 태그 등 제한의 **선언**은 B-03, 그 태그를 소비하는 경로·기간 판정은 C-00·C-01 소관. B-02는 제한을 **집행하는 기계**를 본다 — 선언과 기계의 분업이다. + +- **발행 측 규칙 내용의 적법성** — compliance 모듈에 등록된 규칙값의 법률 감수는 발행자 책임(G5). B-02는 카드 선언 대비 요구 모듈의 존재·바인딩까지만 본다. + +- **체결 엔진의 선택** — 자산별 허용 엔진은 B-04 소관. 다만 위임 프로브의 호출 위상(1-hop/2-hop)이 엔진에 의존하므로 설계 협응이 있다(§9·OD-B02-2). + + +### 3.1 Securities Act §5 — 등록의무 기본값 (무과실) [uscode.house.gov] + +- **조항**: Securities Act of 1933 §5(a)·(c), 15 U.S.C. §77e(a)·(c) — uscode.house.gov + +- **핵심 원문**: (a) Unless a registration statement is in effect as to a security, it shall be unlawful for any person, directly or indirectly— (1) to make use of any means or instruments of transportation or communication in interstate commerce or of the mails to sell such security through the use or medium of any prospectus or otherwise; or (2) to carry or cause to be carried through the mails or in interstate commerce, by any means or instruments of transportation, any such security for the purpose of sale or for delivery after sale. … (c) It shall be unlawful for any person, directly or indirectly, to make use of any means or instruments of transportation or communication in interstate commerce or of the mails to offer to sell or offer to buy through the use or medium of any prospectus or otherwise any security, unless a registration statement has been filed as to such security, or while the registration statement is the subject of a refusal order or stop order or (prior to the effective date of the registration statement) any public proceeding or examination under section 77h of this title. + +- **한국어**: (a) 어느 증권에 관하여 등록신고서가 효력을 갖고 있지 아니하는 한, 누구든지 직접 또는 간접으로 — (1) 주간통상의 운송·통신 수단 또는 우편을 이용하여 prospectus 그 밖의 수단으로 그 증권을 판매하는 것; 또는 (2) 판매 목적으로 또는 판매 후 인도를 위하여 그 증권을 우편 또는 주간통상으로 운반하거나 운반하게 하는 것은 위법이다. … (c) 어느 증권에 관하여 등록신고서가 제출되어 있지 아니하는 한(또는 그 등록신고서가 거부명령·정지명령의 대상이거나 효력 발생 전의 공개 절차·심사 대상인 동안), 누구든지 직접 또는 간접으로 주간통상의 운송·통신 수단 또는 우편을 이용하여 prospectus 그 밖의 수단으로 그 증권의 매도 청약 또는 매수 청약을 하는 것은 위법이다. + +- **쉬운 설명**: 미국 증권규제의 기본값이다 — 등록 없이는 팔지도(a), 청약하지도(c) 못하며, 조문 어디에도 고의·과실 요건이 없다. 여기서 핵심은 §5가 **발행 한 번이 아니라 거래 한 건 한 건**에 걸린다는 점이다. 발행인이 Reg D로 적법하게 팔았어도, 그 매수인의 재판매는 자기만의 면제(§4(a)(1)·§4(a)(7)·Rule 144 등)가 따로 필요하다. 제한증권의 이전 통제 기계가 꺼진 채 무자격자에게 재판매가 흘러가면, 그 재판매 각각이 §5의 사정권으로 들어가고 사슬 전체가 오염된다. B-02에게 이 조문은 이렇게 읽힌다: **기계 확인의 실패가 도착하는 곳이 바로 여기다.** fail-closed(확인 불가면 차단)가 유일한 안전 방향이다. + +- **PASS/FAIL 반영**: 간접 ✕ — B-02가 §5를 판정하지 않는다. 기계 붕괴의 법적 종착점으로서 fail-closed 설계 원칙의 근거가 된다. + +- **ERC-3643 변환**: 직접 매핑 없음. Router의 cumulative AND(하나라도 FAIL이면 revert)와 B-02의 자산 메타 초반 배치, 그리고 ERC-3643 자체의 조건부 transfer(조건 미충족 = 체결 불성립)가 이 조문의 "기본값 = 금지" 구조를 코드에 옮긴 것이다. + +### 3.2 Securities Act §2(a)(11) — underwriter 정의: 사슬의 고리 책임 [uscode.house.gov] + +- **조항**: Securities Act §2(a)(11), 15 U.S.C. §77b(a)(11) — uscode.house.gov + +- **핵심 원문**: The term "underwriter" means any person who has purchased from an issuer with a view to, or offers or sells for an issuer in connection with, the distribution of any security, or participates or has a direct or indirect participation in any such undertaking, or participates or has a participation in the direct or indirect underwriting of any such undertaking; but such term shall not include a person whose interest is limited to a commission from an underwriter or dealer not in excess of the usual and customary distributors' or sellers' commission. As used in this paragraph the term "issuer" shall include, in addition to an issuer, any person directly or indirectly controlling or controlled by the issuer, or any person under direct or indirect common control with the issuer. + +- **한국어**: "underwriter"란 distribution(유통)을 목적으로(with a view to) 발행인으로부터 증권을 매수한 자, 또는 발행인을 위하여 그 유통과 관련하여 증권을 청약·판매하는 자, 또는 그러한 undertaking에 직접·간접으로 참여하거나 그 직접·간접 인수에 참여하는 자를 말한다; 다만 통상적인 판매 수수료를 넘지 않는 수수료에만 이해관계가 국한된 자는 포함하지 아니한다. 본 항에서 "issuer"에는 발행인 외에, 발행인을 직접·간접으로 지배하거나 발행인에 의하여 지배되는 자, 또는 발행인과 직접·간접의 공동 지배 하에 있는 자를 포함한다. + +- **쉬운 설명**: 투자은행만 underwriter가 아니다. Rule 144의 Preliminary Note가 명시하듯, 증권업 비전문가인 개인 투자자도 "발행인에서 대중으로 증권이 이동하는 거래 사슬의 고리(links in a chain of transactions through which securities move from an issuer to the public)"로 행위하면 underwriter가 될 수 있다. underwriter가 되는 순간 그 사람의 재판매는 §4(a)(1) 면제("issuer, underwriter, dealer가 아닌 자의 거래")를 잃고 §5 위반이 된다. 마지막 문장의 확장도 중요하다 — 지배관계인(affiliate)으로부터의 매수도 "발행인으로부터"로 본다(A-06이 이 지배 개념을 전담). 이 조문이 B-02에 명령하는 것은 통제의 **구조화**다: "유통 목적이었는가"라는 주관적 요건은 사후에나 다투어지므로, 시장 설계는 유통이 무자격자에게 흘러갈 **경로 자체가 없는** 상태를 만들어야 한다 — 그 경로 차단 장치가 이전제한 기계이고, B-02가 그 기계의 실재를 확인한다. + +- **PASS/FAIL 반영**: 간접 ✕ — 판정 대상이 아니라 "기계 없는 유통이 만드는 인적 책임"의 구조를 정의. Rule 502(d)가 발행인에게 요구하는 reasonable care(§3.4)의 보호 목적어가 바로 이 정의다. + +- **ERC-3643 변환**: 직접 매핑 없음. Identity Registry 밖으로는 이전 자체가 성립하지 않는 permissioned 구조가 "사슬이 대중에 닿는 경로"를 구조적으로 제거한다 — B-02는 그 구조가 실재함을 확인한다. + +### 3.3 SEC v. Ralston Purina Co. — 면제 주장자의 입증책임 [govinfo.gov] + +- **조항**: SEC v. Ralston Purina Co., 346 U.S. 119, 126 (1953) — govinfo.gov (U.S. Reports) + +- **핵심 원문**: Keeping in mind the broadly remedial purposes of federal securities legislation, imposition of the burden of proof on an issuer who would plead the exemption seems to us fair and reasonable. + +- **한국어**: 연방 증권 입법의 광범위한 구제적 목적을 염두에 둘 때, 면제를 주장하고자 하는 issuer에게 입증책임을 지우는 것이 우리에게는 공정하고 합리적으로 보인다. + +- **쉬운 설명**: 사모 면제 법리의 뿌리 판결이다(비공모 여부의 기능적 기준 — offeree가 스스로를 지킬 수 있는가 — 은 A-13 §3.18이 상술). B-02에 중요한 것은 입증책임 문장이다: 면제 위에서 돌아가는 시장은 면제의 성립을 **스스로 증명할 수 있어야** 한다. "우리는 표준 토큰만 상장했고, 그 표준의 이전제한이 매 거래 작동했다"는 명제를 증명하려면 두 종류의 기록이 필요하다 — ① 상장 시점의 심사 기록(무엇을 어떤 기준으로 검증했고 어떤 값을 등록값으로 봉인했는가, §4.3), ② 거래 시점의 게이트 기록(등록값과의 대조·프로브 결과가 매 거래 PASS였다는 이벤트 로그, §5.4). 뒤집으면, 기계가 바꿔치기된 뒤에 쌓인 PASS 기록은 증명 자산이 아니라 반대 증거가 된다(§1.4) — 그래서 배선 대조(게이트 ②)는 상장 때 한 번이 아니라 매 거래다. + +- **PASS/FAIL 반영**: 직접 ○(설계 원리) — 개별 거래의 분기 조건은 아니나, "확인 + 확인 이력의 보존"이라는 B-02의 이중 산출(게이트 결과 + 상장 심사 기록)을 직접 명령한다. + +- **ERC-3643 변환**: 판정 이벤트(elementId = B-02, reasonCode, tokenAddress, wiringSnapshotRef, timestamp)를 불변 로그로 emit; 상장 심사 패키지(감사 보고서·codehash·테스트 벡터 결과)를 Operator 보존 양식으로 export(§11). 기록이 없으면 증명이 없다. + +### 3.4 Rule 502(d) — 재판매 제한과 reasonable care: legend·stop-transfer의 명문화 (★핵심) [ecfr.gov] + +- **조항**: Regulation D Rule 502(d), 17 C.F.R. §230.502(d) — ecfr.gov (2026-07-01 현행) + +- **핵심 원문**: (d) Limitations on resale. Except as provided in § 230.504(b)(1), securities acquired in a transaction under Regulation D shall have the status of securities acquired in a transaction under section 4(a)(2) of the Act and cannot be resold without registration under the Act or an exemption therefrom. The issuer shall exercise reasonable care to assure that the purchasers of the securities are not underwriters within the meaning of section 2(a)(11) of the Act, which reasonable care may be demonstrated by the following: (1) Reasonable inquiry to determine if the purchaser is acquiring the securities for himself or for other persons; (2) Written disclosure to each purchaser prior to sale that the securities have not been registered under the Act and, therefore, cannot be resold unless they are registered under the Act or unless an exemption from registration is available; and (3) Placement of a legend on the certificate or other document that evidences the securities stating that the securities have not been registered under the Act and setting forth or referring to the restrictions on transferability and sale of the securities. While taking these actions will establish the requisite reasonable care, it is not the exclusive method to demonstrate such care. Other actions by the issuer may satisfy this provision. + +- **한국어**: (d) 재판매의 제한. §230.504(b)(1)의 경우를 제외하고, Regulation D 하의 거래로 취득한 증권은 본법 §4(a)(2) 하의 거래로 취득한 증권의 지위를 가지며, 본법에 따른 등록 또는 그로부터의 면제 없이는 재판매될 수 없다. 발행인은 증권의 매수인이 본법 §2(a)(11)의 의미에서의 underwriter가 아님을 보증하기 위하여 reasonable care를 다하여야 하며, 그 reasonable care는 다음에 의하여 증명될 수 있다: (1) 매수인이 자기 자신을 위하여 취득하는지 타인을 위하여 취득하는지를 판단하기 위한 합리적 조사; (2) 그 증권이 본법에 따라 등록되지 아니하였고 따라서 등록되거나 등록 면제가 가능하지 아니하는 한 재판매될 수 없다는 사실의, 판매 전 각 매수인에 대한 서면 고지; 및 (3) 그 증권이 본법에 따라 등록되지 아니하였음을 기재하고 그 증권의 양도·판매에 대한 제한을 명시하거나 인용하는 legend를, 증서 또는 **그 증권을 표창하는 그 밖의 문서**에 부착하는 것. 이러한 조치를 취하면 소요 reasonable care가 성립하지만, 이것이 그 care를 증명하는 배타적 방법은 아니다. 발행인의 다른 조치도 본 규정을 충족할 수 있다. + +- **쉬운 설명**: B-02의 법적 심장이다. 세 가지가 이 조문에서 나온다. 첫째, **제한의 원천**: Reg D 취득분은 등록 또는 면제 없이 재판매 불가 — 이 문장이 대상 자산에 이전제한 기계가 필요해지는 출발점이다. 둘째, **기계의 법정 원형**: (3)의 legend가 종이 시대의 제한 부착 장치이고, "certificate or other document that evidences the securities"라는 문구가 무증서·전자 형태를 이미 포용한다 — 증권을 표창하는 것이 토큰 컨트랙트라면, 제한을 새길 자리도 그 컨트랙트다. 셋째, **비배타 조항**: 마지막 문단이 (1)~(3)이 배타적 방법이 아니고 "다른 조치"도 충족할 수 있다고 명시한다 — 이전 조건을 코드로 강제해 위반 재판매가 **성립 자체가 불가능한** ERC-3643 구조는, 읽히기를 기다리는 종이 legend보다 구조적으로 강한 "다른 조치"다. 단 유의점 둘: ① 이 reasonable care의 수범자는 발행인이다 — venue인 Decipher는 이 조문을 직접 이행하는 것이 아니라, 발행인의 이행 장치(토큰의 제한 기계)가 자기 시장에서 실재·작동함을 확인함으로써 자기 시장의 적법 전제를 지킨다. ② (2)의 서면 고지 축은 코드 제한과 별개로 남는다 — 기계가 막아준다고 고지 실무가 사라지는 것은 아니며, 재판매 venue에서의 고지·기록 실무는 OD-B02-7이다. + +- **PASS/FAIL 반영**: 직접 ○ — B-02 전체가 이 조문의 기계화다. 상장 심사(L1~L4)는 "legend 기계가 표준대로 존재함"의, 게이트 ②~⑤는 "그 기계가 지금도 그대로이고 작동함"의 확인이다. + +- **ERC-3643 변환**: legend의 "restrictions on transferability" = Token의 조건부 transfer(isVerified ∧ canTransfer ∧ 비동결 ∧ 자유 잔액) 그 자체; "setting forth or referring to" = 카드(Manifest)의 제한 기재(B-03)와 off-chain 법률 문서 참조; 게이트 ⑤의 위임 프로브가 "이 이전에 대해 legend 조건이 충족되는가"를 체결 전에 묻는다. + +### 3.5 Rule 144(a)(3) — restricted securities 정의: 제한 지위의 승계 [ecfr.gov] + +- **조항**: Rule 144(a)(3) 본문 및 (i)·(ii), 17 C.F.R. §230.144(a)(3) — ecfr.gov (2026-07-01 현행) + +- **핵심 원문**: (3) The term restricted securities means: (i) Securities acquired directly or indirectly from the issuer, or from an affiliate of the issuer, in a transaction or chain of transactions not involving any public offering; (ii) Securities acquired from the issuer that are subject to the resale limitations of § 230.502(d) under Regulation D or § 230.701(c); … + +- **한국어**: (3) "restricted securities"란 다음을 말한다: (i) 발행인으로부터 또는 발행인의 affiliate로부터, 공모를 수반하지 아니하는 거래 또는 **거래의 사슬**을 통하여 직접 또는 간접으로 취득한 증권; (ii) Regulation D의 §230.502(d) 또는 §230.701(c)의 재판매 제한이 적용되는, 발행인으로부터 취득한 증권; … + +- **쉬운 설명**: "제한증권"의 공식 정의다. B-02에 중요한 지점 셋. 첫째, (ii)가 Reg D 502(d) 제한부 취득분을 **명시적으로** restricted로 지정한다 — 본 자산(Reg D 506(c) 발행분)의 제한 지위는 해석이 아니라 문언이다. 둘째, (i)의 "transaction or chain of transactions" — 제한 지위는 첫 매수인에서 끝나지 않고, 비공모 사슬을 타고 **후속 취득자에게 승계**된다. 자격자 간 재판매(§4(a)(7))로 넘어간 증권도 restricted로 남으므로(§3.6), 제한 기계는 발행 직후 한 철이 아니라 증권의 전 수명 동안 유지되어야 한다 — B-02가 R1(발행)만이 아니라 R2(재판매)에도 필수 부착되는 이유다. 셋째, Rule 144의 Preliminary Note는 모든 조건을 충족한 Rule 144 매도의 매수인은 "not restricted securities"를 받는다고 정리하는데, 제한 없는 증권으로의 **출구**는 경로 부품(C-00)의 판정 사항이고, permissioned 시장 안에서 도는 한 B-02의 기계 확인은 경로와 무관하게 계속된다 — 출구 성립 여부가 불확정인 상태에서 기계를 끄는 일은 없다(보수 기본값). + +- **PASS/FAIL 반영**: 직접 ○(전제 확인) — B-02의 상장 심사는 카드의 restricted 선언(B-03 소관)과 별개로, "restricted 자산에 요구되는 이전제한 기계"의 실재를 확인한다. restricted 자산인데 제한 기계가 없는 조합은 상장 거절이다. + +- **ERC-3643 변환**: restricted 지위의 승계 = 이전 후에도 동일 토큰 컨트랙트·동일 이전 조건이 그대로 적용되는 구조 그 자체(토큰은 이전으로 제한을 잃지 않는다); 카드의 restrictedFlag·경로 태그는 B-03, 그 소비는 C-00·C-01 — B-02는 태그가 가리키는 집행 기계를 담당. + +### 3.6 Securities Act §4(a)(7)·§4(d)·§4(e) — 자격자 간 재판매와 제한의 지속 [uscode.house.gov] + +- **조항**: Securities Act §4(a)(7)·§4(d)·§4(e), 15 U.S.C. §77d(a)(7)·(d)·(e) — uscode.house.gov + +- **핵심 원문**: (a) In general. The provisions of section 77e of this title shall not apply to— … (7) transactions meeting the requirements of subsection (d). … (d) Certain accredited investor transactions. The transactions referred to in subsection (a)(7) are transactions meeting the following requirements: (1) Accredited investor requirement.—Each purchaser is an accredited investor, as that term is defined in section 230.501(a) of title 17, Code of Federal Regulations (or any successor regulation). (2) Prohibition on general solicitation or advertising.—Neither the seller, nor any person acting on the seller's behalf, offers or sells securities by any form of general solicitation or general advertising. … (3)(F) The name and address of the transfer agent, corporate secretary, or other person responsible for transferring shares and stock certificates. … (e) Additional requirements. (1) In general.—With respect to an exempted transaction described under subsection (a)(7): (A) Securities acquired in such transaction shall be deemed to have been acquired in a transaction not involving any public offering. (B) Such transaction shall be deemed not to be a distribution for purposes of section 77b(a)(11) of this title. (C) Securities involved in such transaction shall be deemed to be restricted securities within the meaning of Rule 144 (17 CFR 230.144). + +- **한국어**: (a) 일반. §77e(§5)의 규정은 다음에 적용되지 아니한다 — … (7) subsection (d)의 요건을 충족하는 거래. … (d) 일정한 적격투자자 거래. subsection (a)(7)의 거래란 다음 요건을 충족하는 거래를 말한다: (1) 적격투자자 요건 — 각 매수인이 17 C.F.R. §230.501(a)(또는 그 승계 규정)에 정의된 accredited investor일 것. (2) 일반청약·광고의 금지 — 매도인도, 매도인을 위하여 행위하는 어느 누구도, 어떠한 형태의 일반청약 또는 일반광고로도 증권을 청약·판매하지 아니할 것. … (3)(F) [매도인이 제공할 발행인 정보 중] 주식·주권의 이전을 담당하는 transfer agent, corporate secretary 또는 그 밖의 자의 성명과 주소. … (e) 추가 요건. (1) 일반 — subsection (a)(7)의 면제 거래에 관하여: (A) 그 거래로 취득한 증권은 공모를 수반하지 아니하는 거래로 취득한 것으로 본다. (B) 그 거래는 §77b(a)(11)의 목적상 distribution이 아닌 것으로 본다. (C) 그 거래에 관련된 증권은 Rule 144(17 CFR 230.144)의 의미에서의 restricted securities로 본다. + +- **쉬운 설명**: R2(재판매) Recipe의 유력 면제 경로다(경로 선택 자체는 C-00 소관·변호사 위임 진행 중). B-02에 닿는 지점 셋. 첫째, **(e)(1)(C)** — §4(a)(7)로 적법하게 재판매된 증권도 restricted securities로 **본다**고 의회가 직접 못박았다. 적법한 손바뀜이 제한을 세탁하지 못한다 — 매 재판매 후에도 다음 재판매를 통제할 기계가 그대로 필요하고, 그래서 B-02는 R2에 필수 부착이다. 둘째, **(d)(3)(F)** — 비보고 발행인의 재판매에서 매도인이 제공할 정보에 "이전을 담당하는 transfer agent … 의 성명과 주소"가 법정 항목으로 들어 있다. 의회 스스로 재판매 인프라의 핵심 접점을 이전 기계 운영자로 지목한 것이다 — 카드의 transferAgent 기재와 agent 권한 배선(§3.9)이 여기 접속된다. 셋째, (d)(2)의 매도인 측 일반청약 금지는 506(c) 발행의 일반청약 허용과 **독립**이다(재판매 비대칭 — 기존 정리 확인). 이는 F-04·시장 구조 쟁점의 소관이며 B-02는 관여하지 않는다. + +- **PASS/FAIL 반영**: 조건부 — R2 활성 거래에서 (e)(1)(C)의 제한 지속이 B-02의 계속 부착을 명령한다. (d)의 개별 요건 판정은 C-00·A-03 등 각 소관 부품. + +- **ERC-3643 변환**: (e)(1)(C) 제한 지속 = 재판매 후에도 동일 토큰·동일 조건부 transfer가 유지되는 구조; (d)(3)(F) = Manifest.facts.transferAgent 기재 + agent 역할 보유 주소의 일치 검사(상장 L3); 일반 canTransfer 경로와 forcedTransfer 경로의 분리는 §3.7·§3.20. + + +### 3.7 ICA §3(c)(7)(A) — 펀드 축: 이전 게이트가 곧 면제 유지 장치 [uscode.house.gov] + +- **조항**: Investment Company Act §3(c)(7)(A), 15 U.S.C. §80a-3(c)(7)(A) — uscode.house.gov + +- **핵심 원문**: Any issuer, the outstanding securities of which are owned exclusively by persons who, at the time of acquisition of such securities, are qualified purchasers, and which is not making and does not at that time propose to make a public offering of such securities. Securities that are owned by persons who received the securities from a qualified purchaser as a gift or bequest, or in a case in which the transfer was caused by legal separation, divorce, death, or other involuntary event, shall be deemed to be owned by a qualified purchaser, subject to such rules, regulations, and orders as the Commission may prescribe as necessary or appropriate in the public interest or for the protection of investors. + +- **한국어**: 그 발행 증권이, 해당 증권의 취득 시점에 qualified purchaser인 자들에 의하여 배타적으로(exclusively) 소유되고, 그 시점에 해당 증권의 public offering(공모)을 하고 있지 아니하며 또한 그때 이를 하려고 제안하지도 아니하는 모든 issuer. qualified purchaser로부터 증여(gift) 또는 유증(bequest)으로 증권을 받은 자, 또는 법적 별거·이혼·사망 그 밖의 비자발적 사건으로 이전이 발생한 경우의 그 증권은, Commission이 공익 또는 투자자 보호를 위하여 필요·적절하다고 정하는 규칙·규정·명령을 조건으로, qualified purchaser가 소유한 것으로 본다. + +- **쉬운 설명**: 펀드 자산(BUIDL-like)에 얹히는 추가 축이다(요건의 실체 — QP 정의·전원 QP 판정 — 는 A-13이, 보유자 수 상한은 D-01이 전담하며 여기서 재론하지 않는다). B-02의 관점은 이 조문의 **집행 구조**에 있다: "owned exclusively by … qualified purchasers"라는 상태 조건은 일회 심사가 아니라 매 이전마다 지켜져야 하는 불변식이고, 그 불변식의 상시 집행자가 바로 토큰의 이전 게이트다 — QP claim 없는 지갑으로의 transfer를 토큰이 거부함으로써 "전원 QP 보유"가 자동 유지된다(A-13 §3.20 표 1의 정리와 동일). 즉 펀드 자산에서 B-02가 확인하는 기계는 단순한 유통 통제 장치가 아니라 **투자회사법 면제의 유지 장치**다 — 기계가 껍데기면 §3(c)(7) 면제 조건이 거래마다 침식된다. 둘째 문장의 비자발적 이전 예외는 표준의 forcedTransfer·recovery 경로와 정합한다 — 상속·이혼 등은 일반 canTransfer 게이트가 아니라 agent의 강제 이전으로 처리되며, 표준 문언상 이 경로도 수신자의 신원 검증(isVerified)은 유지한다(§3.20). B-02는 R3에 부착되지 않지만 이 조문의 stakes는 그대로다 — 펀드 자산의 모든 이전 역시 R1 또는 R2를 경유하므로 B-02의 확인이 매 거래 도착한다(§8.4). + +- **PASS/FAIL 반영**: 조건부(펀드 자산) — B-02는 이 조문의 요건을 판정하지 않고, 이 조문을 상시 집행하는 기계의 실재·작동만 확인한다. 요건 판정은 A-13(QP)·A-09(look-through)·D-01(보유자 수). + +- **ERC-3643 변환**: Condition 1(전원 QP)의 상시 집행 = Identity Registry isVerified + Compliance 모듈의 조건부 transfer; 비자발적 이전 예외 = forcedTransfer/recovery 경로(compliance 모듈 우회·isVerified 유지); B-02 게이트 ⑤의 프로브가 이 집행 경로의 생존을 매 거래 확인. + +### 3.8 Exchange Act §3(a)(25) — transfer agent 정의: 이 기계의 법적 이름 [uscode.house.gov] + +- **조항**: Securities Exchange Act of 1934 §3(a)(25), 15 U.S.C. §78c(a)(25) — uscode.house.gov + +- **핵심 원문**: The term "transfer agent" means any person who engages on behalf of an issuer of securities or on behalf of itself as an issuer of securities in (A) countersigning such securities upon issuance; (B) monitoring the issuance of such securities with a view to preventing unauthorized issuance, a function commonly performed by a person called a registrar; (C) registering the transfer of such securities; (D) exchanging or converting such securities; or (E) transferring record ownership of securities by bookkeeping entry without physical issuance of securities certificates. The term "transfer agent" does not include any insurance company or separate account which performs such functions solely with respect to variable annuity contracts or variable life policies which it issues or any registered clearing agency which performs such functions solely with respect to options contracts which it issues. + +- **한국어**: "transfer agent"란 증권 발행인을 위하여 또는 발행인으로서 자기 자신을 위하여 다음에 종사하는 모든 자를 말한다 — (A) 발행 시 그 증권에 부서(countersign)하는 것; (B) 무권한 발행을 방지할 목적으로 그 증권의 발행을 감시하는 것(통상 registrar라 불리는 자가 수행하는 기능); (C) 그 증권의 이전을 등록하는 것; (D) 그 증권을 교환 또는 전환하는 것; 또는 (E) 증권 증서의 물리적 발행 없이 장부 기재(bookkeeping entry)로 증권의 기록상 소유권을 이전하는 것. "transfer agent"에는 자기가 발행한 변액연금계약·변액생명보험에 관하여만 그 기능을 수행하는 보험회사·분리계정, 또는 자기가 발행한 옵션계약에 관하여만 그 기능을 수행하는 등록 clearing agency는 포함되지 아니한다. + +- **쉬운 설명**: B-02가 확인하는 기계에 법이 붙여 둔 이름표다. (A)~(E)를 ERC-3643 표면에 겹쳐 보면 대응이 정확하다 — (B) 무권한 발행 감시(registrar 기능) = mint 권한을 agent 역할로 제한하고 발행 이벤트를 명부에 남기는 구조, (C) 이전의 등록 = 매 transfer가 Identity Registry 검증을 거쳐 온체인 원장에 기록되는 구조, (E) 증서 없는 장부 기재 이전 = 토큰 잔액 이동 그 자체(1975년 문언이 이미 book-entry를 포용하고 있어 온체인 이전이 낯선 형태가 아니다). 요컨대 ERC-3643 토큰의 agent 역할·Identity Registry는 취미 코드가 아니라 **법정 transfer agent 기능의 수행 장치**다. 이 식별이 B-02에 주는 실무 귀결: 그 기능을 수행하는 권한(agent 키)이 누구 손에 있는지가 규제 관심사이므로, 상장 심사는 agent 역할 보유 주소가 카드 기재 주체(BUIDL-like 맥락의 Securitize 통제 키·발행자 거버넌스)와 일치하는지, 미상의 제3 주소가 agent로 끼어 있지 않은지를 확인한다(L3). 등록 의무의 **범위**는 다음 §3.9가 정한다 — 정의 충족이 곧 등록 의무는 아니다. + +- **PASS/FAIL 반영**: 직접 ○(기능 식별) — 상장 심사 L3(권한 배선)의 검사 목적어를 정의. 게이트에서는 agent 집합의 변동이 배선 드리프트(②)로 표면화된다. + +- **ERC-3643 변환**: (B) registrar = mint의 agent 한정 + 발행 이벤트 로그; (C) 이전 등록 = transfer 시 Identity Registry 경유 + Transfer 이벤트; (E) book-entry = 토큰 잔액 기재 그 자체; agent 역할 집합 = 카드 기재 transferAgent 통제 키와 대조(상장 L3·변동 감시). + +### 3.9 Exchange Act §17A(a)(1)(A)·(c)(1) — 정확한 이전의 투자자 보호 지위와 TA 등록 의무의 범위 [uscode.house.gov] + +- **조항**: Securities Exchange Act §17A(a)(1)(A)·(c)(1), 15 U.S.C. §78q-1(a)(1)(A)·(c)(1) — uscode.house.gov + +- **핵심 원문**: (a)(1) The Congress finds that— (A) The prompt and accurate clearance and settlement of securities transactions, including the transfer of record ownership and the safeguarding of securities and funds related thereto, are necessary for the protection of investors and persons facilitating transactions by and acting on behalf of investors. … (c) Registration of transfer agents. (1) Except as otherwise provided in this section, it shall be unlawful for any transfer agent, unless registered in accordance with this section, directly or indirectly, to make use of the mails or any means or instrumentality of interstate commerce to perform the function of a transfer agent with respect to any security registered under section 78l of this title or which would be required to be registered except for the exemption from registration provided by subsection (g)(2)(B) or (g)(2)(G) of that section. + +- **한국어**: (a)(1) 의회는 다음과 같이 인정한다 — (A) 기록상 소유권의 이전과 그에 관련된 증권·자금의 보호를 포함한, 증권 거래의 신속하고 정확한 청산·결제는 투자자와 투자자를 위하여 거래를 촉진·대행하는 자들의 보호를 위하여 필요하다. … (c) transfer agent의 등록. (1) 본 조에 달리 규정된 경우를 제외하고, 어느 transfer agent든 본 조에 따라 등록되지 아니한 채, 직접 또는 간접으로, 우편 또는 주간통상의 수단·매체를 이용하여, **§78l(§12)에 따라 등록된 증권 또는 같은 조 (g)(2)(B) 또는 (g)(2)(G)의 등록 면제가 없었더라면 등록이 요구되었을 증권에 관하여** transfer agent의 기능을 수행하는 것은 위법이다. + +- **쉬운 설명**: 두 층을 정확히 분리해야 한다. **원리 층**((a)(1)(A)): 기록상 소유권 이전의 정확성은 의회가 명시한 투자자 보호 사안이다 — B-02가 지키는 것이 바로 이 "이전 기계의 정확성"이며, 이 부품이 기술 편의가 아니라 규제 원리의 구현임을 뿌리에서 확인해 준다. **의무 층**((c)(1)): TA 등록 의무의 문언상 범위는 **§12 등록 증권**(또는 §12(g)(2)(B)·(G) — 등록 투자회사·보험 관련 면제 — 가 없었다면 등록 대상이었을 증권)이다. BUIDL-like 자산은 §3(c)(7) 사모펀드 지분으로서 §12(g) 등록을 하지 않는 것이 구조의 전제이고(그 전제를 지키는 카운터가 D-01), 미등록 §3(c)(7) 펀드는 §12(g)(2)(B)의 등록 투자회사 면제도 쓸 수 없다(D-01 기존 정리) — 따라서 **이 토큰에 관한 한 TA 등록이 문언상 강제되는 상태는 아니다**. Securitize가 등록 TA라는 사실은 이 토큰에 대한 법정 의무의 이행이 아니라 신뢰 구조의 선택(다른 증권들에 대한 등록 + 본 구조에서의 자발적 채용)으로 읽는 것이 정확하다. 다만 조건이 뒤집히는 순간이 있다 — D-01이 실패해 record holder가 임계를 넘고 §12(g) 등록이 강제되면, 그 순간부터 이 토큰의 transfer agent 기능 수행에 (c)(1)의 등록 의무가 문언 그대로 걸린다. **D-01(보유자 수)과 B-02(기계·권한)는 이 hook로 연결된다**(§9). 이 정밀 구분을 뭉개고 "온체인 이전 기능 = 무조건 TA 등록 필요"로 쓰면 과대 서술이고, "사모라서 TA 규제 무관"으로 쓰면 D-01 실패 시나리오를 놓치는 과소 서술이다. + +- **PASS/FAIL 반영**: 조건부 — 게이트 분기 조건이 아니라 (i) 상장 L3(권한 배선 — 기능 수행 주체의 확인)의 규제 축, (ii) D-01 연동 hook(§12(g) 진입 시 등록 의무 활성)의 근거. 등록 여부 자체의 확인은 Operator 실사 항목(§11). + +- **ERC-3643 변환**: 직접 매핑 없음. agent 역할 키의 통제 주체 실사(상장 L3) + Manifest.facts.transferAgent(명칭·등록번호·통제 키 참조) 기재 + D-01 임계 경보와의 연동 플래그(§9)가 이행 통로다. + +### 3.10 Peirce, "Enchanting, but Not Magical" (2025-07-09) — 토큰화는 성질을 바꾸지 않는다 [sec.gov] + +- **조항**: Commissioner Hester M. Peirce, Enchanting, but Not Magical: A Statement on the Tokenization of Securities (July 9, 2025) — sec.gov + +- **핵심 원문**: As powerful as blockchain technology is, it does not have magical abilities to transform the nature of the underlying asset. Tokenized securities are still securities. Accordingly, market participants must consider—and adhere to—the federal securities laws when transacting in these instruments. … Sometimes an issuer tokenizes its own security. … Alternatively, an unaffiliated third party with custody of securities issued by another entity might, for instance, issue a new tokenized security tied to the securities it holds or may tokenize the "security entitlements" that investors hold against the custodian. … For example, depending on the particular facts and circumstances, a token could be a "receipt for a security," which is itself a security but is distinct from the underlying security held by the distributor of the token. Alternatively, a token that does not provide the holder with legal and beneficial ownership of the underlying security could be a "security-based swap" that cannot be traded off exchange by retail persons. … The same legal requirements apply to on- and off-chain versions of these instruments. + +- **한국어**: 블록체인 기술이 아무리 강력하더라도, 그것은 기초자산의 성질을 변형시키는 마법의 능력을 갖고 있지 않다. 토큰화된 증권은 여전히 증권이다. 따라서 시장 참가자들은 이 수단들을 거래할 때 연방 증권법을 고려하고 준수하여야 한다. … 때로는 발행인이 자기 자신의 증권을 토큰화한다. … 그 대안으로, 타 주체가 발행한 증권을 보관하는 비계열 제3자가, 예컨대 자기가 보유한 그 증권에 연동된 새로운 토큰화 증권을 발행하거나, 투자자가 그 수탁자에 대하여 갖는 "security entitlements"를 토큰화할 수도 있다. … 예컨대 구체적 사실관계에 따라, 토큰은 "receipt for a security"일 수 있는데, 이는 그 자체가 증권이지만 토큰 배포자가 보유한 기초 증권과는 **구별되는** 증권이다. 또는, 기초 증권의 법적·수익적 소유권을 보유자에게 부여하지 않는 토큰은 retail이 장외에서 거래할 수 없는 "security-based swap"일 수 있다. … 온체인·오프체인 버전에 동일한 법적 요건이 적용된다. + +- **쉬운 설명**: B-02의 존재 이유를 규제기관의 언어로 확인해 주는 성명이다 — 표준 토큰을 썼다고 규제가 사라지는 것이 아니라, 표준 토큰이란 규제가 요구하는 통제를 담는 그릇일 뿐이다. 실무적으로 더 중요한 것은 **모델 분기**다: 발행인이 자기 증권을 직접 토큰화한 경우(native)와, 제3자가 보관 증권을 wrapping한 경우는 법률 분석이 다르다 — wrapper 토큰은 원 증권과 별개의 증권("receipt for a security")이거나, 소유권을 주지 않으면 security-based swap일 수 있어 **원 증권의 면제를 그대로 물려받지 못한다**. Decipher의 1차 적용은 native 발행(Giwa에서 발행인 명의 신규 발행 가정)이고, 본 문서의 모든 Recipe 논증은 그 전제 위에 서 있다. 그래서 상장 심사는 tokenizationModel = NATIVE_ISSUER를 확인 항목으로 두고, wrapper형은 본 Recipe 구성으로는 거절한다(별도 법률 분석·별도 Recipe의 영역). 형식상 유의: 이 성명은 Commissioner 개인 성명으로 Commission의 규칙·명령이 아니다 — Layer 3 자료의 일반 한계대로 판정 규칙이 아니라 설계 근거로만 쓴다. + +- **PASS/FAIL 반영**: 조건부(상장 게이트) — tokenizationModel ≠ NATIVE_ISSUER이면 상장 거절(L1). 거래 게이트의 분기 조건은 아니다(상장에서 걸러진 전제의 유지는 카드 불변식 — B-01 소관). + +- **ERC-3643 변환**: Manifest.facts.tokenizationModel = NATIVE_ISSUER(카드 기재, B-01 불변식 후보) + 상장 L1의 발행 구조 실사(발행인·토큰의 법적 동일성 — 청약 문서와 온체인 발행의 연결 확인). + +### 3.11 Corp Fin·IM·Trading and Markets 공동 staff statement (2026-01-28) — tokenized security의 정의와 분류 [sec.gov] + +- **조항**: Statement on Tokenized Securities, Division of Corporation Finance·Division of Investment Management·Division of Trading and Markets (Jan. 28, 2026) — sec.gov + +- **핵심 원문**: A tokenized security is a financial instrument enumerated in the definition of "security" under the federal securities laws that is formatted as or represented by a crypto asset, where the record of ownership is maintained in whole or in part on or through one or more crypto networks. There are a variety of models used to tokenize securities and they vary in terms of structure and the rights afforded to holders. + +- **한국어**: tokenized security란, 연방 증권법상 "security"의 정의에 열거된 금융상품으로서, crypto asset으로 형식화되거나 crypto asset에 의하여 표창되며, 그 소유권 기록이 전부 또는 일부 하나 이상의 crypto network 위에서 또는 이를 통하여 유지되는 것을 말한다. 증권을 토큰화하는 데에는 다양한 모델이 사용되며, 이들은 구조와 보유자에게 부여되는 권리의 측면에서 서로 다르다. + +- **쉬운 설명**: §3.10의 원리를 3개 Division staff가 2026년 초 공동으로 체계화한 최신 정리다 — 실질 우선(형식이 아니라 경제적 실질, Tcherepnin v. Knight 인용), 발행인 직접 토큰화와 제3자 토큰화(보관형·합성형)의 분류, 그리고 "소유권 기록이 전부 또는 일부 crypto network 위에서 유지"라는 정의. 이 정의의 "record of ownership" 문구가 B-02·A-04의 명부 정리와 접속한다 — 본 구조에서 온체인 Identity Registry·잔액은 기록의 기술적 mirror이고 법정 명부 지위는 TA 실무·계약이 정한다는 기존 정리(A-04 §3, OD-A04-6)와 모순 없이, "일부(in part)" 온체인 유지 모델로 수용된다. 형식상 유의(문서 자체가 명시): 이 statement는 staff의 견해로서 Commission의 규칙·규정·지침이 아니고 법적 효력이 없다 — 인용은 설계 방향의 확인 용도에 국한하며, 판정 규칙의 근거로 쓰지 않는다. + +- **PASS/FAIL 반영**: 간접 ✕ — 판정 조건 아님. 상장 심사의 분류 프레임(native/보관형/합성형)과 명부 정리의 최신 참조. + +- **ERC-3643 변환**: 직접 매핑 없음. 상장 심사 체크리스트의 분류 항목(tokenizationModel)과 §11 Operator 실사 절차에 반영. + +### 3.19 Sub-요건 분해 매트릭스 + +위 §3.1~§3.11의 원리를, B-02가 실제로 판정하는 원자적 검증 단위로 분해한다. 각 행은 §5.2의 판정 분기와 1:1 대응한다(채널 표기: L = 상장 게이트(온보딩 1회 + 재승인 시), G = per-tx 게이트, GOV = 거버넌스 평면 전제). deemed-PASS 같은 우회 경로는 존재하지 않는다. + +| Sub-ID | 원자 검증 단위 | 근거 원리 | 채널 | PASS 조건 | FAIL 코드 | +| --- | --- | --- | --- | --- | --- | +| B02-L1 | 모델·표준 선언 실사 — native 발행 + ERC-3643 표준 대상 | Peirce 성명·2026 staff statement(§3.10~§3.11)·502(d) | L | tokenizationModel = NATIVE_ISSUER ∧ tokenStandard = ERC3643 | REJECT_LISTING_NONCONFORMANT | +| B02-L2 | 인터페이스·구성요소 실재 — 표준 함수 표면 + IR·Compliance·TIR·CTR·Storage 배선 | 502(d) legend 기계(§3.4)·EIP-3643 | L | 표준 함수 전부 응답 ∧ 구성요소 주소 전부 non-zero ∧ 상호 바인딩 성립 | REJECT_LISTING_NONCONFORMANT | +| B02-L3 | 권한 배선 실사 — owner·agent 역할 보유 주소 = 카드 기재 주체(TA 통제 키·발행자 거버넌스), 미상 주소 부재 | §3(a)(25)·§17A(a)(1)(A)(§3.8~§3.9)·§4(d)(3)(F) | L | agentSet ⊆ 카드 기재 통제 키 집합 ∧ owner = 발행자 거버넌스 | REJECT_LISTING_NONCONFORMANT | +| B02-L4 | 행위 검증 — 구현체 codehash ∈ 감사된 참조 구현 목록 + 테스트 벡터(검증 수신자 통과·미검증 거부·pause·freeze·mint 경로 모듈 강제 여부 확인) | Ralston 입증책임(§3.3)·EIP-3643(mint·forcedTransfer의 모듈 우회 문언) | L | implCodehash ∈ approvedImplSet ∧ 테스트 벡터 전부 기대 결과 | REJECT_LISTING_NONCONFORMANT | +| B02-L5 | 등록값 봉인 — 검증 시점의 구성요소 주소·codehash·agent 집합·요구 모듈 집합을 카드에 기재(버전 승인 경로) | 17a-4류 기록 규율의 정신(B-01 §3 참조)·Ralston | L→GOV | 카드 기재 완료 + B-01 승인 사슬 편입 | (미완이면 상장 미완) | +| B02-G1 | 선언 대조 — 카드 tokenStandard = ERC3643 ∧ tokenAddress에 코드 존재 | §3.4·§3.5 (restricted 자산 = 기계 필수) | G① | 카드 값 일치 ∧ extcodesize(token) > 0 | FAIL_TOKEN_STANDARD_MISMATCH | +| B02-G2 | 배선 불변 — token.identityRegistry() = 등록 IR ∧ token.compliance() = 등록 MC ∧ implCodehash = 등록값 | §3.3(오염 기록 방지)·§3.4(legend 기계의 계속) | G② | 세 값 전부 등록값과 정확 일치 | FAIL_TOKEN_WIRING_DRIFT | +| B02-G3 | 표준 상태 — 토큰 미정지 | EIP-3643 pause 의미론(발행 측 정지 존중) | G③ | paused() = false | FAIL_TOKEN_PAUSED | +| B02-G4a | 당사자 동결 — from·to 지갑 미동결 | EIP-3643 freeze(발행 측 agent 조치 존중) | G④ | isFrozen(from) = false ∧ isFrozen(to) = false | FAIL_TOKEN_FROZEN_PARTY | +| B02-G4b | 자유 잔액 — 매도인의 비동결 잔액이 수량 이상 | EIP-3643 부분 동결 의미론 | G④ | balanceOf(from) − getFrozenTokens(from) ≥ amount (이상 — 경계 통과) | FAIL_TOKEN_INSUFFICIENT_UNFROZEN | +| B02-G5 | 위임 프로브 — 발행 측 게이트의 사전 실행 | 502(d) legend의 자기집행(§3.4)·§3(c)(7)(A) 유지 장치(§3.7)·G2 원칙 | G⑤ | IR.isVerified(to) = true ∧ compliance.canTransfer(from, to, amount) = true | FAIL_TOKEN_TRANSFER_INELIGIBLE (하위 사유 전파) | +| B02-GOV | 재승인 트랙 — 업그레이드·배선 변경은 심사 + 등록값 갱신(카드 정정 버전)으로만 | §3.3·B-01 §3.9의 변경 규율 원형 | GOV | 게이트가 아닌 전제 — 미이행이면 G2가 drift로 차단 | (G2로 표면화) | + +**두 가지 판독 규칙.** ① G2의 배선 검사는 **집합·값의 정확 일치**다 — "더 새로운 구현", "비슷한 주소" 같은 근사는 승인의 증거가 아니다(B-01 T3와 같은 규율). ② G4b의 부등호는 **이상(≥)**이다 — 자유 잔액이 수량과 정확히 같으면 통과, 1 단위라도 모자라면(<) 탈락. G4a·G3·G5는 boolean이라 경계 개념이 없다. + +### 3.20 ERC-3643 변환 총정리 — 토큰 표면·Router 매핑 (claim.basis 해당 없음) + +B-02는 사람 자격 부품이 아니므로 ONCHAINID claim topic·claim.basis enum을 쓰지 않는다. 매핑 대상은 토큰 컨트랙트의 표준 표면과 그것을 읽는 게이트다. 기술 표면의 기준은 EIP-3643(Final, eips.ethereum.org — ERC-20·ERC-173 기반, Token·Identity Registry·Identity Registry Storage·Compliance·Trusted Issuers Registry·Claim Topics Registry의 6개 인터페이스 정의)이다. + +| 법적 원리 (§3.X) | 시스템 대응물 | 구체 필드·동작 | +| --- | --- | --- | +| §5·§2(a)(11) 사슬 차단 (§3.1~§3.2) | permissioned transfer 구조 그 자체 | Identity Registry 밖 이전 불성립 — Router cumulative AND + 토큰 자체 revert의 이중벽 | +| Ralston 입증책임 (§3.3) | 상장 심사 패키지 + 게이트 이벤트 | emit B02Check(asset, token, reasonCode, wiringSnapshotRef, ts); L1~L5 심사 기록 export(§11) | +| 502(d) legend·stop-transfer (§3.4) | Token의 조건부 transfer = 자기집행형 legend | 표준 transfer 조건: 자유 잔액 충분 ∧ isVerified(to) ∧ compliance.canTransfer — 게이트 ④·⑤가 동일 조건을 사전 실행 | +| 144(a)(3) 제한 승계 (§3.5) | 이전 후 동일 컨트랙트·동일 조건 유지 | 토큰은 손바뀜으로 제한을 잃지 않음 — R2에도 B-02 필수 부착 | +| §4(e)(1)(C)·(d)(3)(F) (§3.6) | 재판매 후 제한 지속 + transferAgent 기재 | Manifest.facts.transferAgent ↔ agent 역할 키 일치(L3) | +| §3(c)(7)(A) 유지 장치 (§3.7) | isVerified + 모듈 게이트 = 전원 QP 상시 강제 | forcedTransfer·recovery는 별도 경로(모듈 우회·isVerified 유지) — 수신·기록만(OD-B02-6) | +| §3(a)(25) TA 기능 (§3.8) | agent 역할·Identity Registry·mint 감시 | (B) registrar = mint의 agent 한정, (C) 이전 등록 = IR 경유 transfer, (E) book-entry = 잔액 기재 | +| §17A (§3.9) | agent 키 통제 실사 + D-01 hook | agentSet ⊆ 등록 통제 키; D-01 임계 경보 시 TA 등록 의무 활성 플래그(§9) | +| 토큰화 불변·모델 분기 (§3.10~§3.11) | tokenizationModel 상장 게이트 | facts.tokenizationModel = NATIVE_ISSUER — wrapper형 거절(L1) | +| 배선 가변성의 통제 (표준의 owner 권한) | 게이트 ② 매 거래 대조 + 재승인 트랙 | setIdentityRegistry·setCompliance·프록시 업그레이드 → 등록값 상이 → FAIL_TOKEN_WIRING_DRIFT(보안 사건 등급) | + +**표준 문언의 세 가지 경로 비대칭 (구현 확인 필수).** EIP-3643 문언 기준 — ① 일반 transfer·transferFrom: 자유 잔액 ∧ isVerified(to) ∧ canTransfer 전부 요구. ② mint·forcedTransfer: isVerified(to)만 요구, **compliance 모듈 우회**. ③ burn: 자격 검사 **전부 우회**. 귀결 둘 — (a) 상시 발행 자산에서 보유자 수 상한 모듈이 발행(mint) 경로를 덮는지는 구현 의존이므로 상장 L4의 테스트 벡터에 mint 경로를 포함한다(D-01의 온체인 팔 범위 확정, §9·OD-B02-4). (b) forcedTransfer도 isVerified는 유지하므로 강제 이전이 명부 밖으로 나가는 일은 표준상 없다 — §3(c)(7)(A) 둘째 문장의 비자발적 이전 예외와 정합. + +**자기참조 차단 (B-01 규율의 상속).** B-02의 등록값(IR·MC 주소·codehash·agent 집합·approvedImplSet)은 판정 대상인 토큰 컨트랙트 안이 아니라 카드(B-01이 무결성을 보증)와 거버넌스 상수에 둔다 — 검사 대상이 자기 검사의 기준을 스스로 정하는 순환을 끊는다. approvedImplSet(감사된 참조 구현 목록)은 자산별 값이 아니므로 카드 밖 거버넌스 상수가 자연스러운 자리다(OD-B02-1). + + +## §4. 입력 사실 (Input Facts) + +### 4.1 판정에 필요한 데이터 + +거래 게이트가 읽는 것은 두 묶음이다 — **등록값**(카드에서, B-01이 무결성을 보증)과 **실물값**(대상 토큰·구성요소에서 staticcall로 읽는 현재 상태). 게이트는 이 둘을 대조하고, 실물의 작동 상태를 확인할 뿐이다. off-chain 호출은 없다. + +| # | 데이터 | 형식 | 어디서 | 판정 내 용도 | +| --- | --- | --- | --- | --- | +| 1 | tokenStandard·tokenAddress | enum·address | Manifest (등록값) | ① 선언 대조의 기준 | +| 2 | 등록 IR·MC 주소 | address × 2 | Manifest (등록값) | ② 배선 대조의 기준 | +| 3 | 등록 implCodehash | bytes32 | Manifest (등록값) | ② 구현체 대조의 기준 | +| 4 | token.identityRegistry()·token.compliance() | address × 2 | 토큰 staticcall (실물) | ② 현재 배선 | +| 5 | 현재 implCodehash | bytes32 | extcodehash(구현체) (실물) | ② 현재 구현체 | +| 6 | token.paused() | bool | 토큰 staticcall (실물) | ③ 정지 상태 | +| 7 | isFrozen(from)·isFrozen(to) | bool × 2 | 토큰 staticcall (실물) | ④ 당사자 동결 | +| 8 | balanceOf(from)·getFrozenTokens(from) | uint × 2 | 토큰 staticcall (실물) | ④ 자유 잔액 산술 | +| 9 | IR.isVerified(to) | bool | Identity Registry staticcall (실물) | ⑤ 프로브 1항 | +| 10 | compliance.canTransfer(from, to, amount) | bool | Compliance staticcall (실물) | ⑤ 프로브 2항 | +| 11 | from·to·amount | address·address·uint | 거래 요청 | 프로브·산술의 인자 (엔진별 위상은 §9·OD-B02-2) | + +여기 없는 것이 중요하다 — 매수인의 자격 claim 내용, 지갑↔신원 바인딩의 사실, 카드의 다른 기재값은 게이트의 입력이 **아니다**. 그것들은 각 소관 부품(A-03·A-13·A-04·B-01·B-03)의 영역이고, B-02에는 그 사실들을 만드는 기계의 상태만 도달한다. + +### 4.2 데이터 출처와 책임경계 + +| 데이터 | 만드는 자 | 법적 책임의 소재 | 유의 | +| --- | --- | --- | --- | +| 등록값 일체 (표준·주소·codehash·agent 집합·요구 모듈) | 상장 심사(Operator L1~L5) → 카드 버전 승인(B-01 경로) | 심사의 충실성 = Operator·Decipher 법무; 기재의 무결성 = B-01 | 등록값 갱신은 카드 정정 버전으로만 — 런타임 수정 경로 없음 | +| 토큰·구성요소의 실물 상태 | 발행자·agent(Securitize 유형)의 운영 행위 | 규칙 내용·운영의 적법성 = 발행 측(G5) | B-02는 상태를 읽기만 — pause·freeze·모듈 규칙의 당부는 판단하지 않음 | +| approvedImplSet (감사된 참조 구현 목록) | 거버넌스(다중서명) — 외부 감사 보고서 기반 | 목록 관리 기준 = OD-B02-1 | 자산별 값이 아닌 시스템 상수 — 카드 밖 배치(자기참조 차단) | +| isVerified가 소비하는 claim·명부 | Trusted Issuer(Sumsub·Securitize 유형)·등록 파이프라인 | 발급 기준서·명부 정확성(A-04 §4 정리) | B-02는 결과 bool만 소비 — claim의 실체는 A계열 소관 | +| 프로브 인자(from·to·amount) | Router(거래 요청·엔진 결정) | 위상 정확성 = 설계(B-04 협응) | pool 경유 체결이면 실제 결제 홉과 프로브 홉의 일치가 요건(OD-B02-2) | + +### 4.3 수집 경로 — 상장 검증 파이프라인 (L1~L5) + +기계에 대한 신뢰가 만들어지는 곳이다. 거래 게이트의 상류이며, 모든 자산의 토큰 측 등록값은 이 관문 하나로만 카드에 들어간다(A-04의 등록 파이프라인 P1~P5와 같은 위상 — 대상이 사람이 아니라 기계일 뿐이다). + +- **L1 — 모델·표준 실사.** 발행 구조 문서(청약 서류·발행인 확인)와 온체인 발행 사실을 대조해 tokenizationModel = NATIVE_ISSUER(발행인 명의 native 발행)임을 확인한다. 제3자 wrapper형(보관형·합성형)은 원 증권과 별개의 증권일 수 있으므로(§3.10~§3.11) 본 Recipe 구성으로는 거절 — 별도 법률 분석의 영역. 선언 표준이 ERC-3643인지도 여기서 고정한다. + +- **L2 — 인터페이스·구성요소 검증.** 대상 주소가 표준 함수 표면(ERC-20 표면 + identityRegistry()·compliance()·paused()·isFrozen()·getFrozenTokens()·forcedTransfer()·recoveryAddress()·agent 관리 등)에 전부 응답하는지, 구성요소 6종(Token·IR·IR Storage·Compliance·TIR·CTR)이 상호 배선(IR가 Storage·TIR·CTR를 참조, MC가 토큰에 바인딩)되어 있는지 확인한다. 함수 시그니처만이 아니라 반환 형식·revert 의미론까지 본다 — "이름만 같은 함수"를 걸러내는 단계. + +- **L3 — 권한 배선 실사.** owner(ERC-173)와 agent 역할 보유 주소 전수를 조회해 카드 기재 주체(transfer agent 통제 키·발행자 거버넌스 다중서명)와 일치하는지, 미상의 제3 주소가 owner·agent에 끼어 있지 않은지 확인한다(§3.8~§3.9의 축). mint·forcedTransfer·freeze·recovery가 전부 이 권한 아래에 있으므로, 여기가 뚫리면 나머지 검증이 무의미하다. 키 보관 실사(누가 어떤 절차로 서명하는가)는 Operator 오프체인 항목(§11). + +- **L4 — 행위 검증.** 두 갈래다. ① **구현체 대조**: 구현체(프록시라면 현재 implementation)의 codehash가 approvedImplSet(외부 감사를 통과한 참조 구현 릴리스 목록)에 속하는지 — 소스 검증·감사 보고서 대조 포함. ② **테스트 벡터 실행**(포크·테스트넷): 검증 수신자로의 이전 성공 / 미검증 수신자로의 이전 revert / pause 중 이전 revert / 동결 지갑 이전 revert / 부분 동결 시 자유 잔액 경계 동작 / **mint 경로에서 compliance 모듈(특히 보유자 수 상한)이 강제되는지 여부의 확정**(표준 문언상 우회 — §3.20) / forcedTransfer의 isVerified 유지. 마지막 두 항목의 결과는 D-01·OD-B02-6에 전달한다. + +- **L5 — 등록값 봉인.** 검증 시점의 구성요소 주소·implCodehash·agent 집합·요구 모듈 집합·tokenizationModel을 카드에 기재하고, B-01의 버전 승인 경로(다중서명 + time-lock)로 발효시킨다. 이 봉인이 게이트 ②의 대조 기준이 된다. 이후의 모든 변경(업그레이드·배선 교체)은 재승인 트랙(§11) — 재심사 + 카드 정정 버전 — 으로만 등록값에 반영된다. + +**거래 시 read 경로.** 이후 모든 거래에서 게이트는 §4.1의 값들을 읽어 대조·확인만 한다 — 파이프라인은 재실행되지 않는다. + +### 4.4 층별 필수 확인 항목 (전체 표) + +아래 표는 예시가 아니라 **필수 확인 항목 전체**다 — 상장 파이프라인(온보딩 시점)과 게이트(거래 시점)가 각각 무엇을 확인해야 하는지를 층별로 나눈다. + +| 층 | 대상 | 필수 확인 항목 | 근거 | +| --- | --- | --- | --- | +| 상장 — 모델 | 발행 구조 | tokenizationModel = NATIVE_ISSUER; 청약 문서와 온체인 발행의 법적 동일성; 선언 표준 = ERC-3643 | §3.10~§3.11; L1 | +| 상장 — 구성 | 컨트랙트 6종 | 표준 함수 표면 전부 응답(형식·의미론 포함); IR·Storage·TIR·CTR·MC 상호 배선; MC의 토큰 바인딩 | §3.4; EIP-3643; L2 | +| 상장 — 권한 | owner·agent | owner = 발행자 거버넌스; agentSet ⊆ 카드 기재 통제 키(TA·발행자); 미상 주소 0건; 키 보관 실사(오프체인) | §3.8~§3.9; §4(d)(3)(F); L3 | +| 상장 — 행위 | 구현체·동작 | implCodehash ∈ approvedImplSet(감사 대조); 테스트 벡터 7종(검증 통과·미검증 거부·pause·freeze·자유 잔액 경계·mint 모듈 강제 여부·forcedTransfer의 isVerified 유지) | §3.3; §3.20; L4 | +| 상장 — 봉인 | 카드 | 등록값 전부 기재 + B-01 승인 경로 발효; 요구 모듈 집합 ⊆ 실제 바인딩 모듈 집합 | §3.3; L5 | +| 게이트 — 선언 | 카드↔체인 | tokenStandard = ERC3643; extcodesize(tokenAddress) > 0 | G① | +| 게이트 — 배선 | 토큰 | identityRegistry()·compliance()·implCodehash 세 값 = 등록값 (정확 일치) | G② | +| 게이트 — 상태 | 토큰·당사자 | paused = false; isFrozen(from·to) = false; balanceOf(from) − getFrozenTokens(from) ≥ amount | G③~④ | +| 게이트 — 프로브 | IR·MC | isVerified(to) = true ∧ canTransfer(from, to, amount) = true — 엔진별 위상 준수 | G⑤; §9 | +| 게이트 — 비검사 | — | 자격 claim 내용(A-03·A-13)·신원 유일성(A-04)·claim 신선도(A-11)·카드 정합(B-01)·제한 태그(B-03)·경로(C-00)·기간(C-01) — 같은 거래에서 각 소관 부품이 별도 검사 | 경계(§3.0.2) | + +## §5. 판정 로직 (Decision Logic) + +### 5.1 개념 — 기계 판정형 2단: 정적 대조 + 위임 프로브 + +B-02의 per-tx 판정은 성격이 다른 두 단으로 구성된다. **정적 대조 단**(①~④)은 등록값과 실물값의 일치, 그리고 상태 플래그·산술을 확인한다 — 순수 읽기와 비교다. **위임 프로브 단**(⑤)은 발행 측 기계의 판정 함수 두 개(isVerified·canTransfer)를 staticcall로 호출해, 체결 시점에 토큰이 내릴 답을 미리 받아본다 — Decipher가 판정을 만드는 것이 아니라 **판정자를 호출**한다. 두 단 모두 결정론이다: 같은 블록 상태에서 같은 입력이면 같은 답이 나온다(§5.5). + +프로브가 존재하는 이유는 이중이다. 법적으로는, 발행 측 게이트가 이 이전을 허용하는가가 곧 legend 조건의 충족 여부이고(§3.4), 펀드 자산이라면 면제 유지 장치의 생존 확인이다(§3.7). 운영적으로는 fail-fast다 — 프로브 없이 다른 26개 부품을 전부 통과시킨 뒤 체결 단계에서 토큰이 revert하면, 가스 낭비를 넘어 "Decipher는 통과시켰는데 토큰이 막았다"는 판정 불일치 기록이 남는다. 프로브는 그 불일치를 검사 시점으로 앞당겨, 시스템의 답과 토큰의 답이 항상 같게 만든다. + +### 5.2 판정 순서 (싸고 탈락 잘 되는 검사·선행조건 먼저) + +전제: Router의 union에서 B-01(카드 정합)이 먼저 PASS했다 — B-02가 읽는 등록값의 무결성은 그 보증 위에 선다. B-02 내부 순서는 ① 선언(SLOAD 두어 번 + extcodesize — 가장 쌈) → ② 배선(staticcall 2회 + extcodehash — 드리프트라는 최악 실패를 조기 차단) → ③ paused(전 거래 공통 상태 — 하나 읽고 자산 전체 판정) → ④ 동결·자유 잔액(당사자별 상태·산술) → ⑤ 프로브(모듈 순회가 있어 가장 비쌈 — 마지막). 각 단계 FAIL은 즉시 반환하며 후속 단계는 실행하지 않는다. + +Router 스케줄링 노트: 법적으로는 27개 부품이 cumulative AND라 순서가 결론을 바꾸지 않으므로, ①~④(자산 메타 초반)와 ⑤(체결 직전 최종 pre-flight)를 **분리 배치**하는 최적화가 가능하다 — 사람 자격 부품에서 탈락할 거래에 프로브 비용을 쓰지 않는 이점. 채택 여부는 가스·UX 설계 결정이며(OD-B02-3과 함께 확정), 본 문서는 단일 부품 내 ①~⑤ 순차를 기준형으로 서술한다. + +### 5.3 경계 매트릭스 (부등호·일치 규율) + +| 검사 | 근거 | 판정식 | 경계 처리 | +| --- | --- | --- | --- | +| 자유 잔액 | EIP-3643 부분 동결 의미론 | balanceOf(from) − getFrozenTokens(from) ≥ amount | **이상(≥)** — 정확히 같으면 통과. 1 단위 부족(<)이면 FAIL_TOKEN_INSUFFICIENT_UNFROZEN | +| 배선 대조 | §3.3·§3.4 | 실물 IR·MC·implCodehash = 등록값 | **정확 일치** — 근사·prefix·"더 새 버전" 개념 없음(집합 소속·값 동일만) | +| 코드 존재 | G① | extcodesize(token) > 0 | **초과(>)** — 0이면 FAIL(EOA·미배포 주소 차단) | +| paused·frozen | G③~④ | 값 = false | boolean — 경계 없음 | +| 프로브 | G⑤ | isVerified ∧ canTransfer = true | boolean — 부분 통과 없음(모듈 하나라도 거부면 false) | +| 상장 codehash | L4 | implCodehash ∈ approvedImplSet | 집합 소속 — 소속 아니면 상장 거절, 게이트에선 등록값 동일성만 | + +부등호 방향이 유일하게 걸리는 곳은 자유 잔액 하나이며 방향은 **이상(≥)** — "shall not exceed" 유형(초과 탈락)과 혼동하지 않는다. §7 T6이 이 경계를 쌍으로 고정한다. + +### 5.4 Pseudocode + 단계별 해설 + +``` +function check_B02(asset, from, to, amount) -> (PASS | FAIL(code)): + reg = Manifest[asset].tokenFacts # 등록값 — B-01이 무결성 보증 + T = reg.tokenAddress + + # ① 선언 대조 + if reg.tokenStandard != ERC3643 or extcodesize(T) == 0: + return FAIL(TOKEN_STANDARD_MISMATCH) + # ② 배선 불변 (매 거래 — 상장 후 바꿔치기 차단) + if T.identityRegistry() != reg.identityRegistry + or T.compliance() != reg.compliance + or extcodehash(impl_of(T)) != reg.implCodehash: + return FAIL(TOKEN_WIRING_DRIFT) # ⚠ 보안 사건 등급 + # ③ 표준 상태 + if T.paused(): return FAIL(TOKEN_PAUSED) + # ④ 당사자 동결·자유 잔액 + if T.isFrozen(from) or T.isFrozen(to): + return FAIL(TOKEN_FROZEN_PARTY) + if T.balanceOf(from) - T.getFrozenTokens(from) < amount: # ≥ 통과, < 탈락 + return FAIL(TOKEN_INSUFFICIENT_UNFROZEN) + # ⑤ 위임 프로브 — 발행 측 판정의 사전 실행 (staticcall) + if not reg.identityRegistry.isVerified(to): + return FAIL(TOKEN_TRANSFER_INELIGIBLE, sub=RECIPIENT_UNVERIFIED) + if not reg.compliance.canTransfer(from, to, amount): + return FAIL(TOKEN_TRANSFER_INELIGIBLE, sub=COMPLIANCE_MODULE) + emit B02Check(asset, T, PASS, wiringSnapshotRef, now) # Ralston 증명 자산 + return PASS +``` + +해설: 전 단계가 온체인 읽기(SLOAD·staticcall)와 비교로 닫힌다 — 외부 오라클·off-chain 호출·사람 개입이 없다. ②에서 프로브의 대상 주소를 실물(T.identityRegistry())이 아니라 **등록값**(reg.identityRegistry)으로 호출하는 것에 주의 — ②가 일치를 이미 보증했으므로 동일하지만, 코드 관습으로 등록값을 쓰면 "검증된 주소만 호출한다"는 불변식이 문면에 남는다. ⑤의 하위 사유(sub)는 매수인 노출용이 아니라 내부 기록·운영 라우팅용이다(§6.1). PASS 이벤트의 wiringSnapshotRef는 그 시점 등록값 튜플의 해시 — "어느 배선에 대한 통과였는가"를 기록에 남겨 사후 조사에서 기계 상태와 판정을 결부시킨다(§3.3). + +### 5.5 비결정성을 결정성으로 — 위임 프로브의 성격 + +B-01이 "판정 대상 자체에 판단 요소가 없다"로 결정성을 얻었다면, B-02의 ⑤는 한 겹이 더 있다 — 다른 컨트랙트의 함수를 호출한다는 점에서 언뜻 외부 의존처럼 보인다. 그러나 결정성은 유지된다: isVerified·canTransfer는 view 함수이고, 같은 블록 상태에서 그 답은 유일하게 정해진다. 그 함수들 내부의 "판단"(자격 인정·규칙 설정)은 이미 과거에 off-chain에서 이루어져 **데이터로 고정된 것**(claim 발급·모듈 파라미터 등록)이고, 프로브는 그 고정된 데이터에 대한 계산을 실행할 뿐이다 — 증명서형 부품(A-03·A-13)이 서명된 claim을 읽는 것과 같은 문법의, 함수 호출 판이다. + +남는 유일한 시차 문제는 프로브 시점과 체결 시점 사이의 상태 변화(동결·claim 철회·모듈 갱신이 그 사이에 발생)다. 같은 트랜잭션 안에서 검사와 체결이 원자 실행되면 시차 자체가 없고(권장 기준형), 검사와 체결이 트랜잭션을 달리하는 설계(잔존 주문·오더북)라면 체결 시 토큰 자신의 게이트가 최종 방벽이 된다 — 그 경우 프로브는 보증이 아니라 조기 경보이며, 재검사 주기는 OD-B02-3이다. 어느 설계든 "시스템이 통과시켰는데 토큰이 막는" 순간 판정 불일치 이벤트를 남겨 운영 큐로 보낸다(§11). + + +## §6. 거절·예외 처리 (Rejection & Exception) + +### 6.1 거절 코드 + +| 코드 | 발생 단계 | 의미 | 매수인 노출 메시지(예) | 내부 기록 | +| --- | --- | --- | --- | --- | +| FAIL_TOKEN_STANDARD_MISMATCH | ① | 카드 선언 ≠ ERC-3643 또는 대상 주소에 코드 없음 | "이 자산은 현재 거래 준비가 완료되지 않았습니다" | asset·주소·extcodesize — 온보딩 결손 조사 | +| FAIL_TOKEN_WIRING_DRIFT | ② | IR·MC 바인딩 또는 구현체가 등록값과 상이 — 상장 후 변경 의심 | 상동(중립 문구) | ⚠ 보안 사건 등급(최우선) — 실물·등록 스냅샷 쌍 기록, 즉시 Operator 경보 + 자산 정지 검토 | +| FAIL_TOKEN_PAUSED | ③ | 발행 측이 토큰 전체를 정지 | "이 자산의 거래가 일시 정지되어 있습니다" | pause 이벤트 참조 — 발행 측 사유 조회 큐 | +| FAIL_TOKEN_FROZEN_PARTY | ④ | 매도·매수 지갑이 발행 측 agent에 의해 동결 | "거래 당사자 계정 상태를 확인해 주세요" | 어느 쪽 동결인지 + freeze 이벤트 참조 | +| FAIL_TOKEN_INSUFFICIENT_UNFROZEN | ④ | 매도인의 자유 잔액(총잔액 − 동결분) < 수량 | "판매 가능 수량을 확인해 주세요" | 총잔액·동결분·요청 수량 스냅샷 | +| FAIL_TOKEN_TRANSFER_INELIGIBLE | ⑤ | 발행 측 게이트가 이 이전을 거부(수신자 미검증 또는 모듈 거부) | "이 거래는 발행 조건상 진행할 수 없습니다" | sub 코드(RECIPIENT_UNVERIFIED / COMPLIANCE_MODULE) + 가능하면 모듈 식별자 | +| REJECT_LISTING_NONCONFORMANT | L1~L4 | 상장 심사 탈락(모델·인터페이스·권한·행위 중 결손) | (거래 코드 아님 — 상장 절차 응답) | 탈락 항목·증적 — 발행자 통지·보완 안내 | + +매수인 노출 메시지와 내부 기록을 분리한다(A-13 §6.4·B-01 §6.1과 동일 원칙) — 외부에는 중립적 상태만, 내부에는 원인 규명에 필요한 전체 스냅샷을 남긴다. 특히 WIRING_DRIFT는 설정 실수일 수도 있으나 통제 우회·키 탈취의 신호일 수도 있으므로, 단순 오류 트랙이 아니라 보안 사건 트랙으로 승격하고, 원인 확정 전까지 해당 자산의 Manifest status를 SUSPENDED로 전환하는 입력을 검토한다(B-01 채널과의 연동, §9). + +### 6.2 예외·해소 경로 — 세 갈래 + +B-02의 FAIL은 결손의 소재에 따라 해소 주체가 갈린다 — B-01처럼 전부 구조 결손인 것도, A계열처럼 전부 사람 측 cure인 것도 아니다. + +- **구조 결손 (①·②·상장 탈락)** — 매수인 측 cure 없음. MISMATCH·상장 탈락은 온보딩·보완 심사의 문제, WIRING_DRIFT는 원인 조사(정당 업그레이드의 미등록 vs 무단 변경) 후 **재승인 트랙**(재심사 L2~L4 + 카드 정정 버전으로 등록값 갱신)으로만 해소된다. 게이트를 등록값 쪽으로 "맞춰주는" 런타임 재량은 존재하지 않는다 — 실물이 바뀌었으면 심사가 다시 도는 것이지, 기준이 실물을 따라가는 것이 아니다. + +- **발행 측 운영 상태 (③·④)** — 해소 권한이 Decipher 밖에 있다. pause 해제·지갑 동결 해제·부분 동결 조정은 발행 측 agent(TA)의 조치이고, Decipher는 상태를 존중하며 차단할 뿐 해제를 대행하지 않는다(G5 — 각자의 의무는 각자에게). Operator는 발행 측 접점으로 사유·전망을 조회해 표시할 수 있다(§11). + +- **자격 경로 (⑤ 중 RECIPIENT_UNVERIFIED)** — 수신자가 등록 파이프라인(A-04 P1~P5)을 완료하고 필요한 claim(A-03·A-13 소관)을 발급받으면 자연 해소된다. B-02는 그 경로를 안내만 하고 판정에 관여하지 않는다. ⑤ 중 COMPLIANCE_MODULE 거부는 발행 측 규칙의 정상 작동이므로 "해소"의 대상이 아니라 그 자체가 결론이다 — 규칙값 변경은 발행자 거버넌스의 영역. + +### 6.3 정책 vs 법정 구분 (중요) + +| 항목 | 성격 | 근거 | +| --- | --- | --- | +| 제한 기계의 실재·작동 확인 자체 | 법정 원리의 직접 구현 — 조정 불가 | §3.1~§3.5 | +| 배선 대조를 **매 거래** 수행 | 설계 결정(강한 보수형) — 법정 최소는 아님. 다만 완화(주기 검사화)는 §3.3 증명 구조를 약화시키므로 변경 시 법무 검토 필수 | §3.3·§5.2 | +| approvedImplSet의 구성·갱신 기준 | **정책** — 어느 감사·어느 릴리스를 인정하나 | OD-B02-1 | +| 프로브의 엔진별 위상·재검사 주기 | **정책·설계** | OD-B02-2·3 | +| NATIVE_ISSUER 한정 상장 | 현 Recipe 구성의 **범위 결정** — wrapper형 수용은 별도 법률 분석 후 별도 Recipe로 | §3.10~§3.11 | +| 비표준 확장(rebase 등) 허용 기준 | **정책** — 상장 기준서로 명문화 | OD-B02-4 | + +## §7. 테스트 케이스 (통과·거절·경계) + +각 케이스는 §3.19의 Sub-ID와 §5.2 분기에 대응한다. T3·T4·T6이 회귀 테스트 핵심(가장 흔한 오구현·최악 실패 차단)이다. + +**T1 — Pass (정상).** BUIDL-like 자산, 등록값과 실물 배선 일치, 미정지·미동결, 자유 잔액 충분, 프로브 true. 기대: PASS + B02Check 이벤트(wiringSnapshotRef 포함). 이후 A계열·C계열 검사로 진행. + +**T2 — Fail (선언 불일치).** 카드 tokenStandard = ERC3643이나 tokenAddress가 EOA(코드 없음), 또는 온보딩 중 자산이 상장 목록에 노출. 기대: ① FAIL_TOKEN_STANDARD_MISMATCH. 정상 온보딩이면 도달 불가한 방어선 — 도달 자체가 온보딩 파이프라인 버그 신호. + +**T3 — Fail (compliance 바꿔치기) ⚠ 회귀 핵심.** 상장 후 토큰 owner가 setCompliance로 무제한 통과 모듈로 교체. 기대: 다음 거래에서 ② FAIL_TOKEN_WIRING_DRIFT + 보안 경보. 검증 포인트: "새 compliance도 어차피 표준 인터페이스인데"라는 근사 통과가 절대 없어야 한다 — 대조는 표준성 여부가 아니라 **등록값 동일성**이다. + +**T4 — Fail (구현체 업그레이드 미승인) ⚠ 회귀 핵심.** 프록시의 implementation이 신규 버전으로 교체(정당한 업그레이드 포함), 재승인 트랙 미완료. 기대: ② FAIL_TOKEN_WIRING_DRIFT — 재심사(L4 재실행) + 카드 정정 버전 발효 전까지 지속. 정당한 업그레이드라도 등록값 갱신 전에는 차단된다는 것이 설계 의도다(fail-closed) — "업그레이드 공지가 있었으니 통과"는 없다. + +**T5 — Fail (정지·동결).** (a) 발행 측이 pause() 실행 → ③ FAIL_TOKEN_PAUSED. (b) agent가 매도인 지갑 freeze → ④ FAIL_TOKEN_FROZEN_PARTY. 해제는 발행 측 조치로만(§6.2) — Decipher 측 override 경로가 없음을 함께 검증. + +**T6 — 경계 (자유 잔액) ⚠ 회귀 핵심.** 총잔액 1,000, 동결 400, 요청 600 → 자유 잔액 600 = 요청 600 → **PASS(이상)**. 요청 601 → FAIL_TOKEN_INSUFFICIENT_UNFROZEN. 부등호 방향(≥)을 경계값 쌍으로 고정한다. + +**T7 — Fail (프로브: 수신자 미검증) — 배선 분열 감지 겸용.** 수신자 지갑이 Identity Registry 미등록 → ⑤ FAIL(sub = RECIPIENT_UNVERIFIED). 변형 케이스: 같은 거래에서 A-04가 PASS였는데 B-02 프로브가 미검증 반환 — 정상 구조(단일 IR 공유)에서는 불가능한 조합이므로, 발생 시 Decipher가 읽는 명부와 토큰이 바인딩한 명부의 **분열** 신호로 운영 경보를 승격한다(drift 계열 조사). + +**T8 — Fail (프로브: 모듈 거부).** 수신자는 검증됐으나 발행 측 모듈(예: 국가 제한·보유 한도)이 거부 → ⑤ FAIL(sub = COMPLIANCE_MODULE, 모듈 식별자 기록). 검증 포인트: Decipher가 그 모듈 규칙을 재구현·재판정하지 않고 결과만 소비하는지(G2) — 거절 사유에 규칙값 해석을 얹지 않는다. + +**T9 — 경로 비대칭 (mint·forcedTransfer·burn).** (a) L4 테스트 벡터: mint가 미검증 수신자에게 revert하는지(표준 요구), mint가 compliance 모듈(보유자 수 상한)을 강제하는지 **여부 확정**(표준 문언상 우회 — 결과를 D-01에 전달). (b) forcedTransfer 수신 이벤트: 게이트를 경유하지 않는 정당 경로임을 확인하고 수신·기록만 수행(차단·재판정 없음 — OD-B02-6), 단 수신자 isVerified 유지가 깨진 강제 이전이 관측되면 drift 계열 경보. (c) burn: 자격 검사 전무 — 환매 소각 경로(redemption rail)와의 연동만 기록. + +**T10 — 재승인 트랙 (정상 업그레이드).** 발행 측이 업그레이드 사전 공지 → Operator 재심사(L4) → approvedImplSet 갱신 + 카드 정정 버전 발효 → 게이트 ② 신규 등록값으로 PASS 재개. T4와 쌍을 이뤄 "차단 → 심사 → 해제"의 전체 수명주기를 고정한다. + +## §8. 검증 패턴 — 기계 판정형 (Pattern A)의 위임 프로브 변형 + +### 8.1 세 패턴 속의 자리 + +Decipher 부품의 검증 방식은 세 패턴이다 — 기계 판정형(A: 결정론 계산·대조), 증명서형(B: off-chain 판단의 서명 결과를 reasonable belief로 소비), 감시형(C: 차단 없이 flag + 운영 판단). B-02는 A다 — 모든 분기가 읽기·비교·boolean으로 닫히고, reasonable belief도 manual review도 판정 경로에 없다. 같은 A라도 B-01(다섯 성질의 직렬 검사 + 대사 채널)·A-01(명단 대조)·C-01(기간 산술)과 구분되는 B-02의 고유 형질은, 마지막 검사가 자기 계산이 아니라 **타 기계의 판정 함수 호출**이라는 점이다 — 이를 본 문서는 "위임 프로브 변형"으로 부른다. + +### 8.2 왜 기계 판정형인가 — 그리고 프로브는 왜 재검증이 아닌가 + +법 쪽에서, B-02가 지키는 원리(§5 무과실·502(d) 제한·144(a)(3) 승계)는 전부 상태 명제다 — "기계가 표준이다·그대로다·켜져 있다"는 성실 점검의 대상이 아니라 발생 자체를 강제할 성질이고, 그 확인에 판단이 낄 자리가 없다. 기술 쪽에서, 판정 대상(주소·해시·플래그·산술·view 함수의 답)이 전부 결정론이므로 패턴 B를 쓰면 불필요한 신뢰 지점만 생기고, 패턴 C는 차단이 사후적이라 §5의 사전 차단 요구와 맞지 않는다. + +프로브와 G2 원칙(같은 사실을 두 번 검사하지 않는다)의 관계를 정확히 하자. 프로브는 발행 측이 이미 판정한 사실(수신자 자격·규칙 충족)을 Decipher가 **다시 판정하는 것이 아니다** — 판정 로직도, 판정 데이터도 전부 발행 측 것이고, Decipher는 그 판정 함수를 체결보다 한 발 먼저 호출할 뿐이다. 은행 비유로: 주민센터 증명서의 내용을 재조사하는 것(금지된 재검증)이 아니라, 주민센터 창구가 지금 열려 있고 이 증명서를 유효하다고 답하는지 **창구에 물어보는 것**이다. 재검증 금지는 사실의 중복 생산 금지이지, 위임 대상의 응답 확인 금지가 아니다 — 오히려 응답 확인 없는 위임이 맹신이다(§1.3). + +### 8.3 정적 대조와 동적 프로브의 분업 + +①~④(정적)와 ⑤(동적)는 지키는 것이 다르다. 정적 대조는 **동일성**을 지킨다 — 상장 심사가 검증한 그 기계인가. 여기서의 적은 시간(상장 이후의 변경)이고, 방어는 등록값 봉인 + 매 거래 대조다. 동적 프로브는 **생존과 허용**을 지킨다 — 그 기계가 지금 이 이전에 대해 무엇이라 답하는가. 여기서의 적은 판정 불일치(시스템 PASS·토큰 revert)이고, 방어는 체결 경로의 사전 실행이다. 정적이 무너지면 동적은 무의미하고(가짜 기계의 답), 동적이 없으면 정적은 공허하다(진짜 기계의 침묵) — 둘이 합쳐져야 "진짜 기계의 살아 있는 답"이 된다. B-01의 2채널(게이트/대사)이 카드에 대해 하는 일을, B-02의 2단(대조/프로브)이 기계에 대해 한다. + +### 8.4 부착 좌표 — R1·R2 필수, R3 미부착의 이유, 실행 위치 + +부착 매트릭스상 B-02는 R1·R2 필수(●), R3·R4 무관(—)이다. R3 미부착이 커버리지 공백이 아닌 이유: DEX 위의 모든 토큰 이동은 발행 취득(R1) 아니면 재판매(R2)로 분류되고, 펀드 자산의 거래는 R3가 R1·R2와 **누적으로** 활성화되는 구조이므로(부착 매트릭스·BUIDL 시나리오의 4-Recipe cumulative), B-02는 R1·R2 경유로 이미 매 거래에 도착한다. R3에 중복 부착하면 같은 검사가 한 거래에서 두 번 돌 뿐 법적 이득이 없다 — R3에는 펀드 상태에 고유한 요건(A-13·D-01)만 둔다는 부착 원칙의 적용례다. R4(행위감시)는 자산 기계가 아니라 행위 패턴을 보므로 무관. 게이트를 아예 경유하지 않는 이동(forcedTransfer·recovery·mint·burn)은 Recipe 세계 밖의 발행 측 경로이며 수신·기록으로 처리한다(T9·OD-B02-6). + +실행 위치는 글로벌 게이트(A-01·A-02 — Recipe 해석 전)가 아니라 Recipe 부착 부품이되, union 안에서는 B-01 직후다 — B-02의 입력(등록값)이 B-01의 산출(무결한 카드)이기 때문이다. ⑤ 프로브의 후행 분리 배치 옵션은 §5.2 노트대로 설계 결정 사항. + + +## §9. Coordination — 다른 부품과의 협응 + +B-02의 협응은 대부분 **전제 관계**다 — B-02가 기계의 무결·작동을 보증하면, 그 기계 위의 사실을 다른 부품들이 안심하고 소비한다. + +| 상대 부품 | 관계 | 협응 내용 | +| --- | --- | --- | +| B-01 신상카드 정합 | 공급 (직접 선행) | 등록값(tokenAddress·IR·MC·codehash·agent 집합·tokenizationModel)의 무결성을 B-01이 보증 — B-02는 그 값을 실물과 대조. B-02의 WIRING_DRIFT 확정 시 카드 status를 SUSPENDED로 전환하는 서명 입력 검토(B-01 채널 2와 합류). 카드의 tokenStandard 기재와 B-02 판정 결과의 불일치는 B-01 문서 §9의 정리대로 카드 정합 문제로서 B-01의 REVIEW 큐 | +| B-03 이전제한 메타데이터 | 병행 (선언 ↔ 기계) | B-03 = 제한의 선언(restrictedFlag·태그), B-02 = 제한의 집행 기계. restricted 선언 자산에 제한 기계가 없는 조합은 상장 거절(§3.5) — 상장 심사에서 두 부품의 전제가 교차 확인됨 | +| B-04 엔진 선택 | 설계 협응 | 프로브 인자(from·to)의 위상이 엔진에 의존 — RFQ 직접 결제는 (매도인→매수인) 1-hop, AMM pool 경유는 (매도인→pool)·(pool→매수인) 2-hop이고 pool 자체가 Identity Registry에 등재된 검증 신원이어야 함(Corner Store Factory의 pool 사전 등록 조율). 프로브는 실제 결제 홉과 동일 위상으로 호출(OD-B02-2) | +| A-04 신원 중복 | 동일 기반 공유 | A-04와 B-02 프로브가 같은 Identity Registry를 소비 — A-04 PASS 후 프로브의 미검증 반환은 명부 분열 신호(T7 변형)로 drift 계열 경보. 명부의 법적 지위·TA 대사는 A-04 §3·§11 정리를 따름 | +| A-03·A-13·A-11 | 전제 공급 | 세 부품이 판정하는 claim이 사는 곳(ONCHAINID·IR·TIR·CTR)의 실재·배선을 B-02가 보증 — 기계가 가짜면 claim 검사 전체가 허공. 자격의 실체·신선도 판정에는 불관여 | +| D-01 보유자 수 카운터 | 이중 연동 | ① 발행 측 보유자 수 상한 모듈은 D-01의 온체인 팔 — 그 모듈의 바인딩 존재(L5 요구 모듈 검사)와 mint 경로 강제 여부(T9 확정)를 B-02 상장 심사가 공급. ② §17A(c)(1) hook — D-01 임계 경보(§12(g) 등록 강제 국면)가 서면 이 토큰의 TA 기능 수행에 등록 의무가 활성화됨을 Operator에 플래그(§3.9) | +| C-00·C-01·C-08 | 간접 (표면화) | 프로브의 모듈 거부(T8)가 발행 측 lockup·물량 규칙을 표면화할 수 있으나, 거래 측의 법적 판정(경로·기간·물량)은 각 소관 부품이 독립 수행 — 발행 측 모듈과 거래 측 부품은 분담이지 대체가 아님(Coverage Delta) | +| F-04 판매중 매수금지 | 무관 (경계 확인) | restrictedParties 명단·판정은 카드·F-04 소관 — B-02는 관여하지 않음 | +| A-12 반대정보 | 보완 | 기계에 대한 반대정보(감사 취약점 공시·표준 구현 결함 보고)가 뜨면 A-12 규율로 flag → Operator가 approvedImplSet 재검토·재심사 트리거 | +| Router / Manifest layer | 숙주 | union 내 B-01 직후 실행·프로브 분리 배치 옵션(§5.2)·판정 불일치 이벤트의 운영 큐 적재 | + +**책임경계 요약**: B-02 = 기계의 표준성·배선 불변·작동 상태·이전 허용 응답 전담. 사람 자격·신원 = A계열. 카드 정합 = B-01. 제한 선언·경로·기간 = B-03·C계열. 발행 측 규칙 내용의 적법성 = 발행자(G5). B-02는 사실을 만들지도 해석하지도 않고, 사실을 만드는 **기계**가 온전한지만 본다. + +## §10. 3-Layer Solution — Element / Recipe / Manifest / Operator 매핑 + +- **법 계층(Layer 1→2→3)**: Layer 1 = §5·§2(a)(11)·§4(a)(7)/(d)/(e)·ICA §3(c)(7)(A)·Exchange Act §3(a)(25)·§17A(a)(1)(A)·(c)(1); Layer 2 = Rule 502(d)·Rule 144(a)(3); Layer 3 = Ralston Purina(입증책임)·Peirce 성명(2025)·3-Division 공동 staff statement(2026)(토큰화 불변·모델 분기). + +- **Element (B-02)**: 상장 게이트(L1~L5 — 모델·인터페이스·권한·행위·봉인) + 거래 게이트(①선언 ②배선 ③상태 ④동결·잔액 ⑤위임 프로브) — "카드가 가리키는 기계가 진짜·그대로·살아 있고 이 이전을 허용하는가"만 판정. + +- **Recipe**: R1·R2 필수 부착 — 모든 이동이 두 Recipe 중 하나를 경유하므로 커버리지 전수. R3 미부착(펀드 고유 요건 아님 — §8.4), R4 무관. + +- **Manifest**: 등록값의 거처 — tokenFacts(tokenAddress·tokenStandard·IR·MC·implCodehash·agent 집합·requiredModules·tokenizationModel·transferAgent). B-01의 버전 규율(다중서명 + time-lock + 정정 버전)이 등록값 변경의 유일한 경로. approvedImplSet만 자산 무관 거버넌스 상수로 카드 밖에(자기참조 차단, §3.20). + +- **Operator**: 상장 심사 수행(L1~L4)·등록값 봉인 승인(L5)·재승인 트랙 운영·업그레이드·drift 감시·발행 측(TA) 접점·심사 기록 보존 — 판정 경로 밖의 전제 관리자. + +![그림 5.0](fig50_b02_runtime_flow.png) + +*그림 5.0 — 런타임 검증 흐름: 상장 파이프라인(L1~L5·봉인) + 거래 게이트(①~⑤·위임 프로브) + 재승인·감시의 거버넌스 평면 (개발자용)* + +## §11. Operator Layer — Frontend·Off-chain 운영 + +기계 판정형이라도 그 전제(등록값의 정확성·감사 목록·발행 측 접점)는 운영이 만든다. B-02의 Operator 층: + +- **상장 심사 워크플로**: L1~L4의 체크리스트 실행 — 발행 구조 문서 실사(L1), 인터페이스·배선 자동 스캐너(L2), owner·agent 전수 조회 + 키 보관 실사 질의서(L3), 소스 검증·감사 보고서 대조·포크 테스트 벡터 실행(L4, T9 항목 포함). 산출은 심사 패키지(증적 일체)로 보존하고, 결과 요약을 카드 정정 버전 신청에 첨부(L5). + +- **approvedImplSet 거버넌스**: 외부 감사를 통과한 참조 구현 릴리스의 codehash 목록을 다중서명으로 관리 — 신규 등재 기준(감사 기관·범위·중대 취약점 부재), 제외 기준(사후 취약점 공시 시 즉시 제외 + 해당 impl 사용 자산 전수 재심사), 기록. 기준의 확정은 OD-B02-1. + +- **업그레이드 재승인 트랙**: 발행 측 업그레이드 공지·프록시 이벤트 감시 → 사전 공지 경로면 신규 impl을 선행 심사(L4)해 발효와 동시에 카드 정정 버전 전환(무중단), 무공지 변경이면 게이트가 T4대로 차단하는 상태에서 사후 심사 — 어느 경로든 심사 없는 등록값 갱신은 없다. + +- **drift·판정 불일치 대응**: WIRING_DRIFT 발생 시 보안 사건 절차(원인 3분류 — 정당 업그레이드 미등록 / 설정 실수 / 무단 변경·키 탈취) + 필요 시 B-01 status SUSPENDED 서명 입력. 프로브-체결 판정 불일치 이벤트(§5.5)는 운영 큐로 — 명부 분열(T7 변형)·모듈 갱신 시차 등 원인별 후속. + +- **발행 측(TA) 접점**: pause·freeze 사유 조회 및 사용자 안내 문구 연동(§6.1), agent 키 로테이션 통지 수신 → L3 재확인 + 등록값 갱신, forcedTransfer·recovery 수신 이벤트의 기록·대사(A-04 §11.4의 TA 대사 큐와 합류, OD-B02-6). D-01 임계 경보 수신 시 §17A(c) 등록 의무 활성 플래그 처리(§3.9·§9). + +- **보존·export**: 상장 심사 패키지·approvedImplSet 변경 이력·게이트 이벤트(B02Check + wiringSnapshotRef)·재승인 기록을 규제 보존 양식으로 export — 감독 검사 시 "그 시점에 어느 기계였고 무엇을 확인했는가"를 즉시 재구성 가능해야 한다(§3.3). 보존 기간은 venue 기록 규율(B-01 §3.10 정리 — 로그 3년 이상·핵심 사슬 존속기간)과 정렬. + +## §12. Open Issues + +| # | 질문(무엇을 결정해야 하나) | 왜 필요한가 | Priority | 해소 경로(권고) | +| --- | --- | --- | --- | --- | +| OD-B02-1 | **approvedImplSet 운영 기준** — 어느 감사 기관·범위를 인정하고, 신규 릴리스 등재·취약점 공시 시 제외·재심사를 누가 어떤 절차로 결정하나 | L4·G②의 판정 파라미터 — 기준 없이는 "감사된 구현"이 자의적 | ⚠ 즉시 | 거버넌스 기준서 제정(다중서명 절차 포함) + 법무 검토 | +| OD-B02-2 | **프로브의 엔진별 위상** — AMM pool 경유 2-hop 프로브의 확정(pool의 IR 등재 전제 명문화·hop별 인자), RFQ 1-hop과의 분기 | 프로브가 실제 결제 홉과 다르면 fail-fast가 거짓 보증이 됨 | ⚠ 즉시 | B-04·Factory 설계와 병합 결정(개발팀) | +| OD-B02-3 | **프로브-체결 원자성·재검사 주기** — 검사와 체결의 동일 tx 원자 실행 확정 여부, 잔존 주문(오더북)형에서의 재프로브 시점, ⑤의 후행 분리 배치 채택 여부 | 시차가 있으면 프로브는 보증이 아니라 경보(§5.5) — 어느 쪽인지 확정해야 기록·문구가 정확 | 높음 | 설계 결정(Router 스케줄링과 병행) | +| OD-B02-4 | **비표준 확장의 상장 기준** — rebase·fee-on-transfer 등 잔액 가정 파괴형 확장의 허용 범위; BUIDL-like 월 분배가 신규 발행인지 rebase인지(07 자료 V-1)의 확정과 mint 경로 모듈 강제 여부(T9)의 반영 | 확장이 게이트 산술(④)·D-01 카운트의 전제를 깨뜨릴 수 있음 | 높음 | 사실 확인(발행 측 문서) + 상장 기준서 명문화 | +| OD-B02-5 | **이전제한의 주법(사법) 대항력** — 온체인 제한이 양수인에게 사법상 대항 가능한가: UCC Article 8의 증권 지위·제한 통지 요건 상당, 2022년 UCC 개정(controllable electronic records)의 채택 주 현황, Giwa 토큰의 준거법·법적 성격 | 연방 증권법 축(§3)과 별개로, 제한의 사법상 유효성은 주법 문제 — 미확정 상태로 두면 강제 이전·선의취득 분쟁에서 공백 | 높음 | 변호사 위임(주법·Blue Sky G-02 계열과 병합) | +| OD-B02-6 | **forcedTransfer·recovery 수신 시 B-02의 확인 항목** — 게이트 비경유 이동에서 무엇을 수신·기록·대사하나(isVerified 유지 확인·카드 기재 권한과의 일치 등) | "수신·기록만"의 항목이 미구체화 — B-01 OD-B01-7·07 자료 Q-B2와 동일 사안의 기계 측 절반 | 중간 | 변호사 위임(Q-B2 병합) + 설계 | +| OD-B02-7 | **502(d) 서면 고지 축의 재판매 venue 실무** — 코드 제한과 별개로 남는 (d)(2) 서면 고지·legend 문언의 표시 위치(거래 UI·확인 문서)와 기록 방식 | 기계가 막는다고 고지 실무가 소멸하는 것은 아님 — venue 층의 이행·기록 설계 필요(§3.4) | 중간 | Operator·법무 설계(UI 문구·기록 양식) | + +## §13. 파일명 규칙 (Naming Convention) + +Decipher Element / Recipe 산출물 명명 규칙: + +- **Element:** B-XX_부품이름.md (예: B-02_token-standard.md) + +- **Recipe:** R-XX_Recipe이름.md (예: R1_RegD-506c-issuance.md) + +Element 부품 ID 체계(앞글자 = 카테고리): + +| 앞글자 | 카테고리 | +| --- | --- | +| A | 신원·자격 (매수인 측) | +| B | 자산·기술 메타 ← 본 부품(B-02)이 여기 | +| C | 거래 경로·시점 | +| D | 집계·누적 | +| E | 발행자 측 | +| F | 행위·운영 | + +본 부품: **B-02 = "자산·기술 메타 카테고리의 2번 부품"** — 자산 메타 계층에서 카드(B-01) 다음, 기계의 무결성 담당. + +물리적 위치: 산출물/elements/ (모든 Element walkthrough) + +## 부록 A — 관련 조문·URL 빠른참조 + +| 조문 | 인용 | 1차 출처 | +| --- | --- | --- | +| Securities Act §5 | 15 U.S.C. §77e(a)·(c) | uscode.house.gov | +| Securities Act §2(a)(11) | 15 U.S.C. §77b(a)(11) | uscode.house.gov | +| Securities Act §4(a)(7)·§4(d)·§4(e) | 15 U.S.C. §77d(a)(7)·(d)·(e) | uscode.house.gov | +| ICA §3(c)(7)(A) | 15 U.S.C. §80a-3(c)(7)(A) | uscode.house.gov | +| Exchange Act §3(a)(25) | 15 U.S.C. §78c(a)(25) | uscode.house.gov | +| Exchange Act §17A(a)(1)·(c)(1) | 15 U.S.C. §78q-1(a)(1)·(c)(1) | uscode.house.gov | +| Reg D 재판매 제한·legend | 17 C.F.R. §230.502(d) | ecfr.gov | +| restricted securities 정의 | 17 C.F.R. §230.144(a)(3)(i)·(ii) | ecfr.gov | +| 입증책임 판례 | SEC v. Ralston Purina Co., 346 U.S. 119, 126 (1953) | govinfo.gov | +| 토큰화 성명 (Commissioner) | Peirce, Enchanting, but Not Magical (2025-07-09) | sec.gov | +| 토큰화 공동 staff statement | Corp Fin·IM·Trading and Markets, Statement on Tokenized Securities (2026-01-28) | sec.gov | +| 기술 표준 | EIP-3643 (Final) — Token·IR·IR Storage·Compliance·TIR·CTR | eips.ethereum.org | + +## 부록 B — BUIDL 적용 노트 + +BUIDL-like 테스트 토큰(ERC-3643 모델링 전제)에서 B-02가 실제로 지키는 것: ① **가정의 확인 전환** — "ERC-3643으로 재구성됐다"는 시나리오 가정을 상장 심사 L1~L4가 검증 사실로 바꾼다(현실 BUIDL의 표준·조건 단정 금지는 유지). ② **native 발행 전제** — Giwa 신규 발행 가정(V-4)이 tokenizationModel = NATIVE_ISSUER로 카드에 봉인되며, 이 값이 깨지는 구조(브리지·미러 토큰)로의 변경은 상장 재분석 사안. ③ **agent 배선** — mint(월 분배)·forcedTransfer·freeze·recovery 권한이 Securitize 통제 키·발행자 거버넌스에만 있음(L3) — 상시 발행 자산이라 mint 권한이 상시 살아 있는 만큼 배선 검사의 비중이 크다. ④ **모듈·카운트 전제** — 보유자 수 상한 모듈의 바인딩과 mint 경로 강제 여부(T9)를 확정해 D-01에 공급; 월 분배의 신규 발행/rebase 확정(V-1)은 OD-B02-4로. ⑤ **드리프트 상시 차단** — Securitize 명세 갱신·구현 업그레이드가 재승인 트랙 없이 반영되는 일이 없도록 게이트 ②가 매 거래 지킨다. §17A(c) 등록 의무는 현 구조(비-§12 사모펀드 지분)에서 이 토큰에 강제되지 않으나, D-01 임계 국면에서 활성화되는 hook로 관리한다(§3.9). + +## 부록 C — 용어·경계 정정 노트 + +- **기계 ≠ 사람.** B-02는 토큰 기계의 무결·작동을 보고, 사람의 자격·신원은 A계열이 본다. 프로브의 isVerified 경유는 자격 재판정이 아니라 위임 대상의 응답 확인이다(§8.2). + +- **표준 준수 ≠ 규칙 적법성.** 인터페이스·배선·작동의 확인이 발행 측 규칙값의 법률 감수를 뜻하지 않는다 — 규칙 내용은 발행자 책임(G5), Decipher는 카드 선언 대비 요구 모듈의 존재까지만(§3.0.2 경계). + +- **선언 ≠ 기계.** 제한의 선언(restrictedFlag·태그)은 B-03, 집행 기계는 B-02 — restricted 선언에 기계가 없으면 상장 거절이라는 교차 전제만 공유한다(§9). + +- **배선 대조는 동일성이지 표준성 재확인이 아니다.** "새 compliance도 표준 인터페이스"는 통과 사유가 못 된다 — 게이트 ②는 등록값과의 정확 일치만 본다(T3). + +- **정당한 업그레이드도 재승인 전에는 차단된다.** fail-closed — 공지·선의는 등록값 갱신을 대체하지 않는다(T4·T10). + +- **자유 잔액 부등호는 이상(≥)이다.** 경계 도달은 통과 — "초과 탈락"형 규율과 방향이 다르다(§5.3·T6). + +- **mint·forcedTransfer는 표준 문언상 compliance 모듈을 우회한다.** 발행 경로의 모듈 강제 여부는 구현 확인 사항이며, 확인 없이 D-01의 온체인 팔이 발행까지 덮는다고 서술하지 않는다(§3.20·T9). + +- **§17A(c) 등록 의무를 과대·과소 서술하지 않는다.** 문언 범위는 §12 등록 증권(및 12(g)(2)(B)·(G) 면제분) — 현 구조에서 이 토큰에 강제되지 않되, D-01 실패 국면에서 활성화된다(§3.9). + +- **wrapper 토큰은 별개 증권일 수 있다.** native 발행 전제 밖의 토큰화 모델은 본 Recipe 논증이 승계되지 않는다 — tokenizationModel 게이트의 이유(§3.10~§3.11). + +- **staff statement는 법이 아니다.** 2026-01-28 공동 statement는 문서 스스로 "no legal force or effect"를 명시 — 설계 참조로만 쓰고 판정 근거로 쓰지 않는다(§3.11). + +## 부록 D — 결론 + +B-02는 "이 거래의 대상 토큰이 진짜 ERC-3643 기계이고, 등록된 배선 그대로이고, 지금 이 이전을 허용하는가"를 기계로 판정하는 부품이다. 법리 골격은 이렇다 — 제한증권은 등록 또는 면제 없이 재판매될 수 없고(502(d)·§3.4), 그 제한 지위는 손바뀜을 따라 승계되며(144(a)(3)·§4(e)(1)(C)), 통제 없는 유통은 매도인을 underwriter로, 거래를 §5 위반으로 만든다(§3.1~§3.2). 미국법이 그 통제의 표준형으로 인정해 온 legend·stop-transfer·transfer agent의 3중 구조(§3.4·§3.8)를 ERC-3643이 자기집행형 코드로 옮겼고, 토큰화가 그 법적 요구를 조금도 줄이지 않는다는 점을 규제기관이 거듭 확인했다(§3.10~§3.11). Decipher는 그 기계의 검증을 발행 측에 위임하는 대신(G2), 위임의 세 전제 — 표준성·배선 불변·작동 — 를 상장 심사(L1~L5)와 거래 게이트(①~⑤)로 매번 확인하며, 마지막 단계의 위임 프로브는 발행 측 판정 함수의 사전 실행으로 시스템의 답과 토큰의 답을 항상 일치시킨다. 정확 일치의 배선 대조, 이상(≥)의 자유 잔액 경계, mint 경로의 모듈 우회 확인, native 발행 한정, §17A(c) hook의 정밀 관리가 설계의 급소이며, approvedImplSet 기준·프로브 위상·원자성·주법 대항력은 거버넌스·개발·변호사 확정으로 남긴다. B-02가 서 있는 한, "발행 측을 믿는다"는 말은 맹신이 아니라 매 거래 검증되는 신뢰다. + +**변경 로그** + +- [2026-07-07 v1.0] (canton-rwa) B-02 최초 작성 — A-13 v1 형식. 부품 정의를 "기술 전제 확인"에서 "위임(G2)의 세 전제(표준성·배선 불변·작동) 검증"으로 정밀화: 상장 파이프라인 L1~L5(모델·인터페이스·권한·행위·봉인) + 거래 게이트 ①~⑤(선언·배선·상태·동결잔액·위임 프로브)의 2층 구조 확정, 배선 드리프트의 보안 사건 등급화·재승인 트랙 정의. §3 = 설계 명령형 구성(§5·§2(a)(11)·Ralston + ★Rule 502(d) legend·144(a)(3) 승계·§4(a)(7)/(e)(1)(C) + §3(c)(7)(A) 유지장치 + §3(a)(25)/§17A 정밀 범위[§12 등록 증권 한정 — D-01 hook] + Peirce 2025·3-Division staff statement 2026[native/wrapper 분기]), 전 조문 1차 출처 verbatim 검증(uscode.house.gov·ecfr.gov 2026-07-01 현행본·sec.gov·govinfo.gov·eips.ethereum.org). EIP-3643 경로 비대칭(mint·forcedTransfer의 모듈 우회 문언) 식별 → L4 테스트 벡터·T9·D-01 공급 항목화. 거절 코드 6종 + 상장 거절 1종·테스트 T1~T10(회귀: T3 compliance 바꿔치기, T4 미승인 업그레이드, T6 자유 잔액 ≥ 경계) 확정. R3 미부착의 커버리지 논증(§8.4)·B-01/B-03/B-04/A-04/D-01 협응 명문화. OD-B02-1~7 등록. 그림 2매(fig30 법조문 흐름·fig50 상장+게이트 런타임) Graphviz 렌더. + diff --git a/docs/compliance/elements/B-03.md b/docs/compliance/elements/B-03.md new file mode 100644 index 0000000..cf92f65 --- /dev/null +++ b/docs/compliance/elements/B-03.md @@ -0,0 +1,627 @@ +# ELE.B-03_transfer-restriction-metadata + +# B-03 이전제한 메타데이터 (Transfer Restriction Metadata) — 부품 심층 인수인계 문서 (Walkthrough) + +**이 문서는 무엇인가.** Decipher RWA DEX의 컴플라이언스 부품 중 하나인 이전제한 메타데이터 부품(내부 식별자 B-03)을, 미국 증권법을 처음 보는 사람도 이해할 수 있도록 풀어 쓴 인수인계 문서다. 개발자·법무팀·외부 자문 변호사·학회원이 각자 작업의 base로 그대로 쓸 수 있도록 — ① 이 규제가 어디서 왔고 왜 존재하는지, ② 어떤 사실을 입력받아 ③ 어떤 로직으로 판정하고 ④ 실패하면 어떻게 처리하며 ⑤ 어떤 테스트로 검증하는지를, 기술 요소마다 풀이를 함께 붙여 설명한다. + +**자체완결 원칙.** 이 문서는 다른 내부 문서를 열지 않아도 단독으로 이해되도록 작성했다. 인용은 미국 연방법·연방규칙·SEC·판례 등 외부 공식 자료만 사용한다. + +**출처 기준 (Version 1.0, 2026-07-07).** 본 부품의 미국 증권법 인용은 다음 1차 출처를 기준으로 한다 — 17 C.F.R. §230.502(Rule 502)·§230.144(Rule 144)는 eCFR 현행본(Title 17, 2026-07-01 기준·최종 개정 반영 2026-06-25), Securities Act §4(15 U.S.C. §77d)·§5(15 U.S.C. §77e)는 uscode.house.gov 현행본(2026-06-05 시행 법률 기준), 판례는 govinfo.gov(U.S. Reports), SEC 공식 간행물 "Rule 144: Selling Restricted and Control Securities"는 sec.gov다. 영문 원문은 전부 위 출처에서 문자 단위로 대조했다. + +**한 줄 정의.** B-03은 "**이 자산의 신상카드에, 법이 요구하는 이전제한의 선언(디지털 legend)이 실려 있고 완비되어 있는가**"를 매 거래 직전에 기계로 판정하는 부품이다. 종이 시대에 증서 표면에 찍히던 restrictive legend — "이 증권은 미등록이며 재판매가 제한된다"는 도장 — 의 카드(Manifest) 기재판을, 존재·정합·완비·근거의 네 축으로 검사한다. + +**형제 부품과의 분업 (중요 — 먼저 읽을 것).** 같은 "이전제한"이라는 말이 세 부품에 걸쳐 있어 혼동하기 쉽다. 분업은 이렇다 — **B-03 = 제한의 선언**(카드의 restrictedFlag·재판매 경로 태그·보유기간 태그·legend 참조가 법정 최소 내용을 갖췄는가), **B-02 = 제한의 집행 기계**(그 선언이 가리키는 ERC-3643 이전제한 컨트랙트가 실재·작동하는가), **B-01 = 카드라는 그릇의 무결성**(선언이 실린 카드 자체가 진본·승인·최신·무모순인가). 그리고 선언의 **소비자**가 따로 있다 — C-00(경로 부품)은 B-03이 검증한 enabledResalePaths를 읽어 이 거래가 어느 재판매 면제로 성립하는지 분기하고, C-01(보유기간 부품)은 B-03이 검증한 기간 태그를 읽어 이 매도인이 그 기간을 채웠는지 계산한다. B-03은 태그의 값이 법과 정합함을 보증할 뿐, 그 태그로 개별 거래를 판정하지 않는다 — 선언과 소비의 분리다. + +**테스트 토큰 전제 (중요).** 본 문서는 실제 BlackRock BUIDL의 발행 표준, transfer architecture, 또는 현재 운영 조건을 단정하지 않는다. 본 프로젝트는 BUIDL-like §3(c)(7) private fund interest를 ERC-3643 테스트 토큰으로 모델링하여, 제한 선언 기반 pre-trade 검증을 실험하는 것이다. 이하 'BUIDL'·'ERC-3643' 관련 서술은 모두 이 모델링 전제 하의 것이다. + +## §1. 규제 맥락 — 이 부품이 다루는 규제는 어디서 왔는가 (Context First) + +**왜 맥락부터 읽어야 하나.** 이 부품이 검사하는 것은 언뜻 보면 데이터 필드 몇 개다 — 플래그 하나, 경로 목록 하나, 숫자 하나. 그런데 그 필드들은 1933년법이 만들어낸 "제한증권(restricted securities)"이라는 법적 지위의 기계가독 표현이고, 그 지위의 표시 방식은 규칙이 문언으로 정해 두었다(Rule 502(d)(3)의 legend). 필드가 왜 그 값이어야 하는지를 모르면, 구현자는 "그냥 메타데이터"로 취급해 임의로 고치거나 생략하게 되고 — 그 순간 이 자산 위에서 도는 모든 재판매 검사가 틀린 전제 위에 서게 된다. 그래서 큰 그림부터 깐다. + +### 1.1 미국 증권법의 4개 기둥과 그중 본 부품의 자리 + +미국 연방 증권규제는 4개의 큰 법률이 각자 다른 국면을 맡는다 — Securities Act of 1933(발행·1차 시장), Securities Exchange Act of 1934(유통·거래소·중개업자), Investment Company Act of 1940(펀드 구조), Investment Advisers Act of 1940(자문업자). 본 부품은 첫 번째 기둥, **1933년법의 영역**에서 나온다. 더 정확히는 1933년법의 사모 면제 체계가 만들어낸 부산물 — "면제로 발행된 증권은 등록 없이 재판매될 수 없다"는 지위 — 를 다룬다. + +이 지위의 핵심 성질은 **증권에 붙어 다닌다**는 것이다. 발행 거래가 끝나도, 손이 바뀌어도, 심지어 적법한 면제 재판매를 거쳐도(§3.4의 §4(e)(1)(C)) 지위는 남는다. 그래서 이 지위는 어딘가에 **표시**되어야 한다 — 다음 거래의 당사자와 중개자가 "이 증권에는 제한이 걸려 있다"를 알 수 있게. 종이 시대의 표시 장치가 증서 legend였고, Decipher에서 그 자리가 신상카드의 제한 선언 필드들이다. B-03은 그 표시가 제대로 붙어 있는지를 보는 검사원이다. + +### 1.2 왜 이 규제가 존재하는가 — 사모 면제의 누수 방지 + +1933년법 §5는 모든 증권의 offer·sale에 등록을 요구하는 것을 기본값으로 놓았다(§3.1). 사모 면제(§4(a)(2)와 그 안전항인 Reg D)는 이 기본값의 예외인데, 예외에는 구조적 누수 경로가 하나 있다 — **발행인이 소수의 세련된 투자자에게 팔고, 그 투자자가 곧바로 대중에게 되파는 것**. 이 2단 구조가 허용되면 등록 요구는 종이호랑이가 된다. 그래서 법은 첫 매수인이 "유통(distribution)의 고리"가 되는 것을 underwriter 개념(§2(a)(11))으로 포착해 §4(a)(1) 면제 밖으로 밀어내고, Reg D는 발행인에게 "매수인이 underwriter가 되지 않도록 reasonable care를 다하라"고 명령했다(Rule 502(d)). + +그 reasonable care의 법정 예시 세 가지 중 세 번째가 legend다 — 증권을 표창하는 문서에 "미등록·재판매 제한"을 새겨라. 이 도장의 기능은 이중이다: ① 보유자에 대한 **경고**(마음대로 팔 수 없다), ② 시장 인프라에 대한 **신호**(transfer agent·broker가 이 증권의 이전을 보면 멈추고 확인하라). Decipher 같은 permissioned 시장에서 ②의 신호가 기계가 읽는 형태로 승격된 것이 B-03의 검사 대상이다 — 사람이 읽고 멈추는 대신, 코드가 읽고 다음 검사들(C-00·C-01)을 켠다. + +### 1.3 종이 legend에서 카드 선언으로 — 무엇이 같고 무엇이 다른가 + +Rule 502(d)(3)의 문언은 이미 무증서 형태를 포용한다 — legend를 붙일 자리를 "certificate **or other document that evidences the securities**"라고 썼다(§3.3). 증권을 표창하는 것이 토큰과 그 신상카드라면, 제한을 새길 자리도 거기다. 다만 매체가 바뀌면서 성질이 두 가지 달라진다. + +첫째, **읽히는 방식**. 종이 legend는 사람이 읽기를 기다린다 — 안 읽으면 그만이고, 그래서 실무에서는 legend와 별개로 transfer agent의 stop-transfer 장부가 실질 통제를 했다. 카드 선언은 매 거래 코드가 강제로 읽는다 — B-03이 게이트라서, 선언이 없거나 어긋나면 거래 자체가 서지 않는다. 읽히기를 기다리는 경고에서, 읽지 않고는 지나갈 수 없는 관문으로. + +둘째, **떼어지는 방식**. 종이 legend의 제거는 발행인 동의(통상 counsel의 opinion letter)를 받은 transfer agent만 할 수 있다는 것이 확립된 실무다(§3.9의 SEC 공식 간행물). 카드 선언의 restrictedFlag를 false로 바꾸는 것이 그 디지털 등가물이므로, 같은 규율을 받아야 한다 — 아무나, 아무 때나, 근거 없이 끌 수 없고, 발행자·TA의 확인이 등록된 정정 버전(B-01의 승인 사슬)으로만 가능하다. B-03의 판정 ⑤(unrestrict 근거 검사)가 이 규율의 런타임 방벽이다. + +### 1.4 Decipher 시스템에서 왜 중요한가 — Existential Risk + +B-03이 무너지는 시나리오는 소리 없이 온다. 카드의 restrictedFlag가 (버그로, 실수로, 악의로) false가 되어 있거나, enabledResalePaths가 빈 채로 배포되어 있다고 하자. 무슨 일이 생기나 — **아무 일도 안 생기는 것처럼 보인다.** C-00은 판정할 경로 목록이 없으니 분기를 못 하거나(구현에 따라) 제한 없는 자산으로 취급해 통과시키고, C-01은 요구 기간을 0으로 읽어 모든 매도를 즉시 허용한다. 거래는 매끄럽게 체결되고, PASS 로그가 쌓인다. 그런데 그 매끄러운 거래들 하나하나가 §5의 사정권 안에 있다 — 제한증권의 재판매가 면제 검사 없이 흘러간 것이므로. 나중에 감독기관이 물을 때, 쌓인 PASS 로그는 증명 자산이 아니라 **"검사가 꺼진 채 돌았다"는 반대 증거**가 된다(Ralston의 입증책임, §3.8). + +이것이 B-03이 R1(발행)·R2(재판매) 양쪽에 필수 부착(●)이고, 검사가 "태그가 있으면 확인"이 아니라 "**태그가 반드시 있어야 하고 법정 값이어야 한다**"는 완비성 검사인 이유다. 하류 부품들이 딛고 설 전제를, 하류가 돌기 전에 못 박는다. + +### 1.5 한국법과의 비교 (직관용) + +한국 자본시장법에도 대응 개념이 있다 — 사모로 발행된 증권의 전매제한(자본시장법 시행령의 전매기준: 발행 후 일정 기간 권면 분할·양도 금지 등을 발행 조건에 붙여 "모집"으로의 전환을 차단)이 그것이고, 한국예탁결제원 전자등록 체계에서 처분제한 등록이 그 표시 장치다. 구조적 발상은 같다 — 제한을 증권 자체에 조건으로 새기고, 인프라가 그 표시를 읽어 이전을 통제한다. 차이는 미국 체계가 "지위(restricted) → 표시(legend) → 출구(Rule 144 등 면제)"의 3단을 규칙 문언으로 분해해 두었다는 점이고, B-03은 그중 두 번째 단의 기계화다. + +## §2. 메타 정보 (Internal Identifier Box) + +아래는 Decipher 내부 PM 규약상의 식별자·분류값을 한곳에 모은 박스다. 본문에서는 이 코드들을 단독으로 쓰지 않고 "본 부품"·"이전제한 메타 부품" 같은 자연어로 부른다. + +| 항목 | 값 | 한 줄 풀이 | +| --- | --- | --- | +| 부품 이름 | 이전제한 메타데이터 (Transfer Restriction Metadata) | 카드에 실린 디지털 legend의 검사원 | +| 검사 대상 | 신상카드의 제한 선언 — restrictedFlag의 존재·발행 프레임워크와의 지위 정합·필수 태그 완비(enabledResalePaths·holdingPeriodMonths·reportingStatus·legendRef)·태그 내적 정합·unrestrict 전환의 근거(unrestrictBasisRef) | "법이 요구하는 제한 표시가 실려 있고, 값이 법과 맞고, 소비자가 읽을 수 있는가" | +| Internal ID | B-03 (Decipher PM 규약) | 부품 일련번호 | +| 검증 방식 | 기계 판정형(Pattern A) — 필드 존재·집합 소속·함의·방향 검사 | 판단 0, 조회·비교 100 — reasonable belief가 낄 자리가 없다 | +| Timing | pre-trade (union 내 B-01 직후, B-02와 병렬 — 자산 메타 계열) | 카드 무결성 보증 위에서, 그 카드의 제한 기재를 읽는다 | +| Stateful 여부 | STATELESS | per-tx 판정은 현재 카드 스냅샷의 정적 검사 — 과거 거래 누적에 의존하지 않음 | +| 주 활성화 Recipe | R1(Reg D 506(c) 발행)·R2(재판매) 필수 부착 | 제한 지위는 발행 순간 생겨(R1) 전 수명 유지되므로(R2) 양쪽 상시 | +| Cumulative Recipe | 해당 없음 (R3·R4 미부착) | R3는 펀드 고유 요건만 — 선언 검사는 R1·R2 경유로 전 거래 커버 | +| Cascade Element | 없음 — B-03은 다른 부품을 호출하지 않는다 | 검증된 태그를 C-00·C-01이 소비하는 공급 관계일 뿐(§9) | +| 임계값·방향 규칙 | holdingPeriodMonths ∈ {6, 12} (집합 소속); 지위·기간의 방향 검사 — 완화 방향 = FAIL, 강화 방향 = PASS | 크기 비교가 아니라 소속 + 방향 (§5.3) | +| 성숙도 | 완료 → 본 문서로 기준서 확정 | 기존 정리(그룹 1: restrictedFlag·tag check) + 두 요소 분해·unrestrict 규율·이중 방벽 정밀화 반영 | +| 파일·위치 | B-03_transfer-restriction-metadata.md · 산출물/elements/ | 산출물 경로 | + + +## §3. 법적 근거 (Layer 1 → 2 → 3) + +**이 절을 읽는 법.** 아래 표의 종류 칸이 그대로 Layer에 대응한다 — Statute = Layer 1, SEC Rule = Layer 2, SEC Release·SEC Staff·Case = Layer 3. 본 절은 중요도순이 아니라 **논리 흐름 순서**로 배열돼 §3.1~§3.9 번호를 유지한다: 기본값(§5) → 지위의 정의(144(a)(3)) → 표시의 법정 원형(502(d)) → 표시의 수명(§4(e)(1)(C)) → 표시할 값들의 법정 기준(144(d)(1)·144(b)(1)) → 표시의 출구(Preliminary Note) → 기록 명령(Ralston) → 출구의 실무 통제(SEC 간행물). + +한 문장으로 요약하면 이렇다 — **§5가 기본값을 금지로 놓고, 144(a)(3)이 "제한 걸린 증권"이라는 지위를 문언으로 정의하고, 502(d)(3)이 그 지위를 증권 표면에 표시하라고 명령하고, §4(e)(1)(C)가 그 표시는 손이 바뀌어도 유지된다고 못 박고, 144(d)·(b)가 표시에 담길 기간·경로의 법정 값을 주고, Preliminary Note가 유일한 출구를 열어 두고, Ralston이 이 전부를 기록으로 증명하라고 명령한다.** B-03은 이 사슬 중 "표시" 마디의 기계 검사다. + +### 3.0 법조문 관계 플로우차트 (개발자용) + +![B-03 법조문 관계 흐름](B-03_fig30.png) + +*그림 3.0 — 조문 관계: 메인 스파인(§5 → 144(a)(3) → 502(d) → B-03 게이트 → 소비자)과 보조 입력(§4(e)(1)(C) 유지·144(d) 기간값·144(b) 경로 구조·Ralston 기록), 그리고 출구 라인(Preliminary Note·SEC 간행물 → 거버넌스 평면 → 판정 ⑤).* + +### 3.0.1 실제 BUIDL-like 자산은 어떻게 적용되나 + +BUIDL-like 테스트 토큰(Rule 506(c) + ICA §3(c)(7) 모델링)의 카드에서 B-03이 지키는 선언은 이렇게 구성된다. 발행이 Reg D 506(c)이므로 취득분은 Rule 144(a)(3)(ii)의 문언상 restricted다 — 따라서 **restrictedFlag = true는 발행자의 선택이 아니라 사실의 기재**이고, false로 실려 있으면 그 자체가 카드 오류다(판정 ②). 재판매 경로 태그는 프로젝트의 미결 쟁점을 그대로 반영한다 — Rule 144 경로와 §4(a)(7) 경로 중 무엇을 열지(또는 둘 다)는 Open Issue Q-B1로 변호사 위임 중이며, B-03은 어느 쪽으로 확정되든 **그 확정값이 유효 enum 안에서 비어 있지 않게 실렸는지**만 본다(경로의 법적 타당성 판단은 C-00·변호사 몫). 기간 태그는 발행체가 Exchange Act 보고 의무 밖(non-reporting)이라는 카드 기재를 따라 holdingPeriodMonths = 12로 실리는 것이 Rule 144(d)(1)(ii)의 정합값이다 — 6으로 실려 있으면 완화 방향 모순으로 차단된다(판정 ④). legendRef는 청약 문서(subscription agreement)의 이전제한 조항을 가리키는 해시 앵커로 — 502(d)(3)의 "referring to" 축의 이행이다. + +### 3.0.2 조문 순서·중요성 한눈에 보기 (법 리스트) + +**표 1 — Authority Verification Table** + +| 종류 | Authority | 내용 | B-03 관련성 | Direct/Supporting | Official URL | +| --- | --- | --- | --- | --- | --- | +| Statute | Securities Act §5 · 15 U.S.C. §77e(a)·(c) | 미등록 증권 판매·청약 금지 (무과실 기본값) | 선언 붕괴 시 하류 검사 오작동이 도착하는 종착점 — fail-closed 근거 | Background | uscode.house.gov | +| SEC Rule | Rule 144(a)(3) · 17 C.F.R. §230.144(a)(3) | restricted securities 정의 — (ii) Reg D 502(d) 취득분 명시 지정 | 선언 대상 지위의 문언 확정 — flag = true가 기재 사실인 근거 | **Direct** | ecfr.gov | +| SEC Rule | Rule 502(d) · 17 C.F.R. §230.502(d) | 재판매 제한 + reasonable care 3예시 — (3) legend의 두 요소 | ★ B-03이 기계화하는 법정 원형 그 자체 | **Direct** | ecfr.gov | +| SEC Rule | Rule 502(b)(2)(vii) · 17 C.F.R. §230.502(b)(2)(vii) | 506(b) 비적격 매수인에 대한 (d)(2) 방식 재판매 제한 고지 | 고지 축의 각주 — 506(c)-only 자산엔 직접 부과 없음(조건 명시) | Background | ecfr.gov | +| Statute | Securities Act §4(a)(7)·(d)·(e) · 15 U.S.C. §77d | 자격자 간 재판매 면제 + (e)(1)(C) restricted 지위 유지 + (d)(3)(C) 정확한 title·class | 선언의 전 수명 유지 명령 — R2 상시 부착 근거 | **Direct**(유지)·Conditional(R2 정보요건) | uscode.house.gov | +| SEC Rule | Rule 144(d)(1)(i)·(ii) · 17 C.F.R. §230.144(d)(1) | 보유기간 최소값 — reporting 6개월 / non-reporting 1년 | holdingPeriodMonths 태그의 법정 기준값 + reportingStatus와의 정합 축 | **Direct** | ecfr.gov | +| SEC Rule | Rule 144(b)(1)(i)·(ii) · 17 C.F.R. §230.144(b)(1) | 비계열 재판매의 조건 구조 — (i) (c)(1)+(d)·1년 후 (c)(1) 면제 / (ii) (d)만 | 경로·정보요건 태그가 그리는 소비 구조(C-00·C-01)의 지도 | Supporting | ecfr.gov | +| SEC Rule | Rule 144 Preliminary Note (결론부) | 전 조건 충족 매도의 매수인은 not restricted securities 수령 | unrestrict 전환의 유일한 법정 출구 — 거래 단위 | **Direct**(출구 규율) | ecfr.gov | +| Case | SEC v. Ralston Purina Co., 346 U.S. 119, 126 (1953) | 면제 주장자의 입증책임 | 선언 상태·판정 이벤트를 기록으로 남기라는 설계 명령 | Supporting | govinfo.gov | +| SEC Staff | SEC, "Rule 144: Selling Restricted and Control Securities" | legend 제거 = transfer agent만 + 발행자 동의(opinion letter) | restrictedFlag = false 전환의 실무 통제 규범 — 판정 ⑤의 근거 | Supporting | sec.gov | + +**표 2 — 조문 순서·중요성** + +| 순서 | 조문 | 중요성 | B-03이 그걸로 하는 일 | +| --- | --- | --- | --- | +| §3.1 | Securities Act §5 — 등록의무 기본값 | 배경(핵심 전제) | 안 함 — 선언 붕괴의 종착점을 정의, fail-closed 방향 고정 | +| §3.2 | Rule 144(a)(3) — restricted 정의 | 핵심 | 요구 지위(required status)의 도출 — 판정 ②의 좌변 | +| §3.3 | Rule 502(d) — legend·reasonable care | ★핵심 | 선언의 두 요소(미등록 기재 + 제한 명시·인용)를 판정 ①·③으로 기계화 | +| §3.4 | §4(a)(7)·(d)·(e) — 재판매와 지위 유지 | 핵심(R2) | 선언 검사의 전 수명 상시화 — R2 필수 부착 | +| §3.5 | Rule 144(d)(1) — 보유기간 기준값 | 핵심 | 기간 태그 값의 법정 기준 — 판정 ③·④(방향 검사) | +| §3.6 | Rule 144(b)(1) — 비계열 경로 구조 | 보조 | 안 함(판정은 C-00·C-01) — 태그가 그리는 소비 지도 확인 | +| §3.7 | Rule 144 Preliminary Note — 출구 | 핵심(전환 규율) | unrestrict의 법정 출구 확인 — 판정 ⑤와 거버넌스 경로의 근거 | +| §3.8 | Ralston Purina — 입증책임 | 보조(설계 원리) | 판정 이벤트·선언 이력을 증명 자산으로 남기는 근거 | +| §3.9 | SEC 공식 간행물 — legend 제거 실무 | 보조(Layer 3) | 전환 통제(발행자 동의 + TA)의 실무 규범 — 판정 ⑤·§11 | +| §3.19 | Sub-요건 분해 매트릭스 | — | 위 원리를 원자적 검증 단위로 분해 | +| §3.20 | ERC-3643 변환 총정리 | — | §3.1~§3.9의 카드·토큰 매핑을 한 표로 | + +**경계 — 이 부품이 다루지 않는 것.** 아래는 같은 자산·같은 거래에 작동하지만 B-03이 아니라 다른 부품·레이어가 책임진다 — 누락이 아니라 소관 분리이며, B-03 안에 끌어다 구현하지 않는다. + +- **카드라는 그릇의 무결성** — 카드의 존재·상태·버전 승인·cross-field 무모순·신선도는 B-01 소관. 특히 B-01의 불변식 INV-3(enabledResalePaths ⊆ framework 허용집합)은 B-03의 태그 검사와 **같은 필드를 다른 질문으로** 본다: INV-3은 "선언이 프레임워크와 모순되지 않는가"(무모순 — 공집합도 부분집합이므로 통과), B-03 판정 ③은 "restricted 자산에 법이 요구하는 선언이 **비어 있지 않게** 완비되어 있는가"(완비성 — 공집합이면 탈락). 이중 방벽이며, 어느 한쪽이 다른 쪽을 대신하지 않는다(§7 T7). +- **제한을 집행하는 기계** — 선언이 가리키는 ERC-3643 이전제한 컨트랙트의 표준성·배선·작동은 B-02 소관. B-03과 B-02는 상장 심사에서 교차 전제를 공유한다 — restricted 선언 자산에 집행 기계가 없는 조합은 상장 거절. +- **태그의 소비 판정** — 이 거래가 enabledResalePaths 중 어느 경로로 성립하는지는 C-00, 이 매도인이 기간 태그를 채웠는지(now − 취득시각의 계산)는 C-01 소관. B-03은 자산 레벨 상수의 정합만 본다 — 보유자별·거래별 계산은 하지 않는다. +- **선언 내용의 진실성** — 카드에 실린 reportingStatus가 실제 발행체의 보고 지위와 일치하는가의 사실 확인은 온보딩 심사·발행자 보증·A-12(반대정보) 소관. B-03은 기재값들 사이의 법적 정합만 본다. +- **경로 선택의 법적 타당성** — 어느 재판매 면제 경로를 열 것인가의 판단은 발행자·변호사 몫(Q-B1). B-03은 열린 경로가 유효 enum 안에 있고 비어 있지 않음만 본다. + + +### 3.1 Securities Act §5 — 등록의무 기본값: 선언 붕괴의 종착점 [uscode.house.gov] + +- **조항**: Securities Act of 1933 §5(a)·(c), 15 U.S.C. §77e(a)·(c) — uscode.house.gov + +- **핵심 원문**: (a) Unless a registration statement is in effect as to a security, it shall be unlawful for any person, directly or indirectly— (1) to make use of any means or instruments of transportation or communication in interstate commerce or of the mails to sell such security through the use or medium of any prospectus or otherwise; or (2) to carry or cause to be carried through the mails or in interstate commerce, by any means or instruments of transportation, any such security for the purpose of sale or for delivery after sale. … (c) It shall be unlawful for any person, directly or indirectly, to make use of any means or instruments of transportation or communication in interstate commerce or of the mails to offer to sell or offer to buy through the use or medium of any prospectus or otherwise any security, unless a registration statement has been filed as to such security, or while the registration statement is the subject of a refusal order or stop order or (prior to the effective date of the registration statement) any public proceeding or examination under section 77h of this title. + +- **한국어**: (a) 어느 증권에 관하여 등록신고서가 효력을 갖고 있지 아니하는 한, 누구든지 직접 또는 간접으로 — (1) 주간통상의 운송·통신 수단 또는 우편을 이용하여 prospectus 그 밖의 수단으로 그 증권을 판매하는 것; 또는 (2) 판매 목적으로 또는 판매 후 인도를 위하여 그 증권을 우편 또는 주간통상으로 운반하거나 운반하게 하는 것은 위법이다. … (c) 어느 증권에 관하여 등록신고서가 제출되어 있지 아니하는 한(또는 그 등록신고서가 거부명령·정지명령의 대상이거나 효력 발생 전의 공개 절차·심사 대상인 동안), 누구든지 직접 또는 간접으로 주간통상의 운송·통신 수단 또는 우편을 이용하여 prospectus 그 밖의 수단으로 그 증권의 매도 청약 또는 매수 청약을 하는 것은 위법이다. + +- **쉬운 설명**: 기본값은 금지이고, 조문 어디에도 고의·과실 요건이 없다. B-03에게 이 조문의 의미는 §1.4에서 본 그 시나리오다 — 제한 선언이 카드에서 빠지거나 꺼지면, 하류의 경로·기간 검사(C-00·C-01)는 **자기가 꺼진 줄도 모르고** 통과를 찍고, 그렇게 흘러간 재판매 각각이 이 조문의 사정권으로 들어간다. 선언은 하류 검사들의 전원 스위치라서, 스위치가 뽑힌 채 도는 시장은 §5 앞에서 무방비다. 따라서 B-03의 설계 방향은 하나로 고정된다 — **fail-closed**: 선언이 없거나, 어긋나거나, 불완전하면 그 거래는 서지 않는다. "태그쯤 없어도 나머지 검사로 커버되겠지"라는 낙관은 이 조문 앞에서 성립하지 않는다. + +- **PASS/FAIL 반영**: 간접 ✕ — B-03이 §5를 판정하지 않는다. 선언 붕괴의 법적 종착점으로서 완비성 검사(판정 ①·③)와 fail-closed 원칙의 근거가 된다. + +- **ERC-3643 변환**: 직접 매핑 없음. Router의 cumulative AND(하나라도 FAIL이면 revert)와 B-03의 자산 메타 계열 배치가 이 조문의 "기본값 = 금지"를 코드에 옮긴 것이다. + +### 3.2 Rule 144(a)(3) — restricted securities 정의: 선언 대상 지위의 문언 확정 [ecfr.gov] + +- **조항**: Rule 144(a)(3) 본문 및 (i)·(ii), 17 C.F.R. §230.144(a)(3) — ecfr.gov (2026-07-01 현행) + +- **핵심 원문**: (3) The term restricted securities means: (i) Securities acquired directly or indirectly from the issuer, or from an affiliate of the issuer, in a transaction or chain of transactions not involving any public offering; (ii) Securities acquired from the issuer that are subject to the resale limitations of § 230.502(d) under Regulation D or § 230.701(c); … + +- **한국어**: (3) "restricted securities"란 다음을 말한다: (i) 발행인으로부터 또는 발행인의 affiliate로부터, 공모를 수반하지 아니하는 거래 또는 **거래의 사슬**을 통하여 직접 또는 간접으로 취득한 증권; (ii) Regulation D의 §230.502(d) 또는 §230.701(c)의 재판매 제한이 적용되는, 발행인으로부터 취득한 증권; … + +- **쉬운 설명**: B-03의 판정 ②(지위 정합)의 좌변을 주는 조문이다. 발행 프레임워크로부터 "이 자산에 요구되는 제한 지위"를 도출할 때, 그 도출은 해석이 아니라 이 정의의 문언 대입이다 — 카드의 issuanceFramework = RegD-506c라면 취득분은 (ii)에 의해 정의상 restricted이고, 따라서 카드의 restrictedFlag는 **참일 수밖에 없는 사실의 기재**다. 발행자가 "우리 토큰은 제한 없이 갈게요"라고 선언할 재량이 없다는 뜻이다. 여기서 B-03 검사의 성격이 정해진다: restrictedFlag = false + framework = RegD-506c 조합은 "설정 취향의 차이"가 아니라 **카드가 법적 사실을 거짓 기재한 상태**이며, 즉시 차단 대상이다(FAIL_RESTRICTION_STATUS_CONFLICT). 반대 방향 — 요구 지위가 느슨한데 flag = true — 는 보수 초과라 통과시킨다(§5.3의 방향 규칙). (i)의 "chain of transactions"는 §3.4와 함께 이 지위가 손바뀜으로 사라지지 않음을 말한다. + +- **PASS/FAIL 반영**: 직접 ○ — 판정 ②의 requiredStatus(framework) 함수가 이 정의의 코드화다. framework → 요구 지위 매핑 테이블의 각 행이 (i)~(viii)의 해당 항에 근거를 둔다(본 자산은 (ii)). + +- **ERC-3643 변환**: requiredStatus 매핑 — Manifest.facts.issuanceFramework = RegD506c ⇒ required = RESTRICTED (근거: 144(a)(3)(ii)); 매핑 테이블 자체는 거버넌스 상수(카드 밖)로 두어 자기참조를 차단한다(B-01 §3.20과 같은 규율). + +### 3.3 Rule 502(d) — 재판매 제한과 legend: 선언의 법정 원형 (★핵심) [ecfr.gov] + +- **조항**: Regulation D Rule 502(d), 17 C.F.R. §230.502(d) — ecfr.gov (2026-07-01 현행) + +- **핵심 원문**: (d) Limitations on resale. Except as provided in § 230.504(b)(1), securities acquired in a transaction under Regulation D shall have the status of securities acquired in a transaction under section 4(a)(2) of the Act and cannot be resold without registration under the Act or an exemption therefrom. The issuer shall exercise reasonable care to assure that the purchasers of the securities are not underwriters within the meaning of section 2(a)(11) of the Act, which reasonable care may be demonstrated by the following: (1) Reasonable inquiry to determine if the purchaser is acquiring the securities for himself or for other persons; (2) Written disclosure to each purchaser prior to sale that the securities have not been registered under the Act and, therefore, cannot be resold unless they are registered under the Act or unless an exemption from registration is available; and (3) Placement of a legend on the certificate or other document that evidences the securities stating that the securities have not been registered under the Act and setting forth or referring to the restrictions on transferability and sale of the securities. While taking these actions will establish the requisite reasonable care, it is not the exclusive method to demonstrate such care. Other actions by the issuer may satisfy this provision. In addition, § 230.502(b)(2)(vii) requires the delivery of written disclosure of the limitations on resale to investors in certain instances. + +- **한국어**: (d) 재판매의 제한. §230.504(b)(1)의 경우를 제외하고, Regulation D 하의 거래로 취득한 증권은 본법 §4(a)(2) 하의 거래로 취득한 증권의 지위를 가지며, 본법에 따른 등록 또는 그로부터의 면제 없이는 재판매될 수 없다. 발행인은 증권의 매수인이 본법 §2(a)(11)의 의미에서의 underwriter가 아님을 보증하기 위하여 reasonable care를 다하여야 하며, 그 reasonable care는 다음에 의하여 증명될 수 있다: (1) 매수인이 자기 자신을 위하여 취득하는지 타인을 위하여 취득하는지를 판단하기 위한 합리적 조사; (2) 그 증권이 본법에 따라 등록되지 아니하였고 따라서 등록되거나 등록 면제가 가능하지 아니하는 한 재판매될 수 없다는 사실의, 판매 전 각 매수인에 대한 서면 고지; 및 (3) 그 증권이 본법에 따라 등록되지 아니하였음을 **기재하고**(stating) 그 증권의 양도·판매에 대한 제한을 **명시하거나 인용하는**(setting forth or referring to) legend를, 증서 또는 그 증권을 표창하는 그 밖의 문서에 부착하는 것. 이러한 조치를 취하면 소요 reasonable care가 성립하지만, 이것이 그 care를 증명하는 배타적 방법은 아니다. 발행인의 다른 조치도 본 규정을 충족할 수 있다. 이에 더하여, §230.502(b)(2)(vii)은 일정한 경우 재판매 제한의 서면 공시를 투자자에게 전달할 것을 요구한다. + +- **쉬운 설명**: 본 부품의 법적 심장이다 — B-02가 이 조문에서 "제한 기계"를 읽었다면, B-03은 같은 조문에서 "제한 표시"를 읽는다. (3)의 legend 문언을 뜯어 보면 검사 항목이 그대로 나온다. legend는 두 가지를 해야 한다: **요소① "stating that the securities have not been registered under the Act"** — 미등록이라는 사실의 기재. 카드에서 이 요소의 최소 형태가 restrictedFlag = true다(미등록·제한부라는 지위 선언). **요소② "setting forth or referring to the restrictions on transferability and sale"** — 제한 내용의 명시 **또는 인용**. "or referring to"가 실무적으로 결정적이다 — 종이 legend도 제한 전문을 다 새기지 않고 "별도 약정의 제한 참조"라고 인용해 왔다. 카드에서 이 요소가 두 갈래로 이행된다: 기계가 소비할 제한 파라미터의 **명시**(enabledResalePaths·holdingPeriodMonths·reportingStatus — setting forth) + 법률 문서 전문에 대한 **인용**(legendRef: 청약 문서 제한 조항의 해시 앵커 — referring to). 판정 ③(태그 완비)이 이 두 요소의 존재 검사다. 세 가지 유의점. ① 부착 자리 — "certificate **or other document that evidences the securities**": 무증서·전자 형태를 문언이 이미 포용하므로, 토큰을 표창하는 신상카드가 legend의 정당한 자리다. ② 수범자 — 이 reasonable care의 의무자는 발행인이다. venue인 Decipher가 이 조문을 직접 이행하는 것이 아니라, 발행인의 표시 장치가 자기 시장의 카드에 온전히 실려 있음을 확인함으로써 자기 시장의 적법 전제를 지킨다(B-02 §3.4와 같은 구도). ③ (2)의 서면 고지 축 — 표시와 별개로 남는 고지 실무이며, 마지막 문장이 인용하는 (b)(2)(vii)은 **506(b) 거래의 비적격 매수인**에게 (d)(2) 방식의 고지를 요구하는 조항이라(원문: "At a reasonable time prior to the sale of securities to any purchaser that is not an accredited investor in a transaction under § 230.506(b), the issuer shall advise the purchaser of the limitations on resale in the manner contained in paragraph (d)(2) of this section. Such disclosure may be contained in other materials required to be provided by this paragraph."), 전원 AI인 506(c)-only 자산에는 직접 부과되지 않는다 — 다만 재판매 venue에서의 고지·기록 실무는 별도 설계 사안이다(B-02 OD-B02-7과 공유). + +- **PASS/FAIL 반영**: 직접 ○ — B-03 전체가 (3)의 두 요소의 기계화다. 판정 ①(선언 존재)·③(태그 완비)이 요소①·②의 존재 검사, ②(지위 정합)·④(내적 정합)가 기재값의 정확성 검사다. + +- **ERC-3643 변환**: 요소① = ManifestCore.factsPacked.restrictedFlag = true; 요소②-명시 = facts.enabledResalePaths(비트셋) + facts.holdingPeriodMonths + facts.reportingStatus; 요소②-인용 = facts.legendRef = keccak256(제한 조항 canonical 전문) (직렬화 규격은 OD-B03-1); 부착 자리 = "그 증권을 표창하는 그 밖의 문서"로서의 Manifest. + +### 3.4 Securities Act §4(a)(7)·§4(d)·§4(e) — 적법 재판매 후에도 지위는 유지된다 [uscode.house.gov] + +- **조항**: Securities Act §4(a)(7)·§4(d)(3)(C)·§4(e)(1), 15 U.S.C. §77d(a)(7)·(d)·(e) — uscode.house.gov (2026-06-05 시행 기준) + +- **핵심 원문**: (a) In general. The provisions of section 77e of this title shall not apply to— … (7) transactions meeting the requirements of subsection (d). … (d) Certain accredited investor transactions. The transactions referred to in subsection (a)(7) are transactions meeting the following requirements: … (3) Information requirement.— … (C) The exact title and class of the security. … (e) Additional requirements. (1) In general.—With respect to an exempted transaction described under subsection (a)(7): (A) Securities acquired in such transaction shall be deemed to have been acquired in a transaction not involving any public offering. (B) Such transaction shall be deemed not to be a distribution for purposes of section 77b(a)(11) of this title. (C) Securities involved in such transaction shall be deemed to be restricted securities within the meaning of Rule 144 (17 CFR 230.144). + +- **한국어**: (a) 일반. §77e(§5)의 규정은 다음에 적용되지 아니한다 — … (7) subsection (d)의 요건을 충족하는 거래. … (d) 일정한 적격투자자 거래. subsection (a)(7)의 거래란 다음 요건을 충족하는 거래를 말한다: … (3) 정보 요건 — … (C) 그 증권의 정확한 명칭(title)과 종류(class). … (e) 추가 요건. (1) 일반 — subsection (a)(7)의 면제 거래에 관하여: (A) 그 거래로 취득한 증권은 공모를 수반하지 아니하는 거래로 취득한 것으로 본다. (B) 그 거래는 §77b(a)(11)의 목적상 distribution이 아닌 것으로 본다. (C) 그 거래에 관련된 증권은 Rule 144(17 CFR 230.144)의 의미에서의 restricted securities로 본다. + +- **쉬운 설명**: B-03이 발행 직후 한 철 부품이 아니라 R2(재판매)에도 필수 부착인 이유를 의회가 직접 써 두었다. **(e)(1)(C)** — §4(a)(7)로 아무리 적법하게 재판매돼도, 넘어간 증권은 restricted securities로 "본다(deemed)". 적법한 손바뀜이 표시를 세탁하지 못한다는 뜻이고, 따라서 매 재판매 뒤에도 다음 재판매를 위한 선언은 카드에 그대로 남아 있어야 하며 — B-03의 검사도 그대로 상시다. 두 번째로 **(d)(3)(C)** — 비보고 발행체의 §4(a)(7) 재판매에서 매도인이 제공할 정보 항목에 "정확한 title과 class"가 법정으로 들어 있다. 제한 선언은 증권 일반이 아니라 **특정 class에** 붙는 것이므로, 카드의 선언 필드가 legalClassId(D-01과 공유하는 class 식별자)에 결속되어야 한다는 설계 근거가 여기 있다 — 같은 발행체의 다른 class에 다른 제한이 걸릴 수 있고, 선언이 class를 잘못 가리키면 (d)(3)(C)의 정보 자체가 틀린다. §4(a)(7)의 나머지 요건들(각 매수인 AI, 매도인 측 일반청약 금지 등)의 판정은 C-00·A-03 등 각 소관 부품이며 B-03은 관여하지 않는다. + +- **PASS/FAIL 반영**: 직접 ○(유지 명령 한정) — 개별 (d) 요건을 판정하지 않고, (e)(1)(C)가 선언 검사의 전 수명 상시성(R1·R2 필수 부착)을, (d)(3)(C)가 선언↔class 결속 검사(판정 ③의 legalClassId 바인딩)를 명령한다. + +- **ERC-3643 변환**: (e)(1)(C) = 재판매 체결 후에도 카드 선언 필드 불변(변경은 거버넌스 경로만) + B-03의 R2 부착; (d)(3)(C) = facts.restriction 블록이 facts.legalClassId를 명시 참조 — class 불일치는 FAIL_RESTRICTION_TAGS_INCOMPLETE의 하위 사유. + + +### 3.5 Rule 144(d)(1) — 보유기간 최소값: 기간 태그의 법정 기준 [ecfr.gov] + +- **조항**: Rule 144(d)(1)(i)·(ii), 17 C.F.R. §230.144(d)(1) — ecfr.gov (2026-07-01 현행) + +- **핵심 원문**: (d) Holding period for restricted securities. If the securities sold are restricted securities, the following provisions apply: (1) General rule. (i) If the issuer of the securities is, and has been for a period of at least 90 days immediately before the sale, subject to the reporting requirements of section 13 or 15(d) of the Exchange Act, a minimum of six months must elapse between the later of the date of the acquisition of the securities from the issuer, or from an affiliate of the issuer, and any resale of such securities in reliance on this section for the account of either the acquiror or any subsequent holder of those securities. (ii) If the issuer of the securities is not, or has not been for a period of at least 90 days immediately before the sale, subject to the reporting requirements of section 13 or 15(d) of the Exchange Act, a minimum of one year must elapse between the later of the date of the acquisition of the securities from the issuer, or from an affiliate of the issuer, and any resale of such securities in reliance on this section for the account of either the acquiror or any subsequent holder of those securities. + +- **한국어**: (d) 제한증권의 보유기간. 매도되는 증권이 restricted securities인 경우, 다음 규정이 적용된다: (1) 일반 원칙. (i) 그 증권의 발행인이 매도 직전 90일 이상(at least 90 days) 계속하여 Exchange Act §13 또는 §15(d)의 보고 의무의 적용을 받고 있는 경우, 발행인 또는 발행인의 affiliate로부터의 취득일 중 나중인 날과 본 조에 의거한 재판매 사이에 **최소 6개월**(a minimum of six months)이 경과하여야 한다 — 취득자 본인 또는 그 후속 보유자의 계산 모두에 대하여. (ii) 그 발행인이 매도 직전 90일 이상 계속하여 그 보고 의무의 적용을 받고 있지 아니한 경우, 같은 기산 방식으로 **최소 1년**(a minimum of one year)이 경과하여야 한다. + +- **쉬운 설명**: 카드의 기간 태그(holdingPeriodMonths)가 가질 수 있는 값과, 그 값을 정하는 인자를 주는 조문이다. 값은 딱 두 개다 — 6 또는 12. 정하는 인자는 발행체의 보고 지위 하나다 — reporting이면 6, non-reporting이면 12. 여기서 B-03의 두 검사가 나온다. 판정 ③: 태그 값이 {6, 12} 집합 밖이면(예: 0, 3, 9) 법정 근거가 없는 수치이므로 무효(FAIL_RESTRICTION_TAG_INVALID). 판정 ④: 태그 값과 카드의 reportingStatus 기재가 **완화 방향으로** 어긋나면 모순이다 — non-reporting인데 6이 실려 있으면, 법이 1년을 요구하는 자산의 카드가 6개월만 요구한다고 거짓 선언한 것이고, 그 선언을 읽는 C-01은 6개월 경과 매도를 통과시켜 버린다(FAIL_RESTRICTION_TAG_CONFLICT). 반대 방향 — reporting인데 12 — 는 법정 최소를 초과하는 보수 설정이라 통과다(발행자가 더 긴 계약상 lock-up을 태그에 반영하는 경우). 두 가지 정밀 유의점. ① **90일 조건의 자리**: "is, and has been for a period of at least 90 days immediately before the sale"은 매도 시점 판별 문언이다 — 이를 카드의 자산 레벨 상수(reportingStatus)로 접는 것은 보수 조건 하에서만 안전하다: 비보고 → 12로 접는 것은 항상 안전(법정 최대 요구)하고, 보고 → 6으로 접는 것은 "보고 지위가 90일 이상 계속 + 유지 중"이라는 카드 기재의 신선도(B-01 ⑤)와 지위 전환 시 정정 트리거(OD-B03-4)가 받쳐 줄 때만 안전하다. ② **경계·기산의 소관**: "취득일 중 나중인 날"의 확정, full payment 기산(144(d)(1)(iii)), tacking(144(d)(3))은 전부 보유자·거래 레벨 계산이라 C-01 소관이다 — B-03은 그 계산의 상수(요구 개월수)가 옳게 선언돼 있음만 본다. 온체인 timestamp 중 무엇이 법적 취득 시점인가는 프로젝트 공통 미결(A-11 §5.4와 동일 쟁점)로 C-01 측 정리에 위임한다. + +- **PASS/FAIL 반영**: 직접 ○ — 판정 ③의 값 집합 {6, 12}와 판정 ④의 reportingStatus↔기간 정합 규칙이 (i)·(ii)의 코드화다. + +- **ERC-3643 변환**: facts.holdingPeriodMonths ∈ {6, 12}; facts.reportingStatus ∈ {REPORTING_90D, NON_REPORTING}; 정합 규칙 NON_REPORTING ⇒ 기간 = 12 / REPORTING_90D ⇒ 기간 ∈ {6, 12}; C-01이 이 상수를 읽어 now − acquiredAt과 비교(비교식 자체는 C-01 문서). + +### 3.6 Rule 144(b)(1) — 비계열 재판매의 조건 구조: 태그가 그리는 소비 지도 [ecfr.gov] + +- **조항**: Rule 144(b)(1)(i)·(ii), 17 C.F.R. §230.144(b)(1) — ecfr.gov (2026-07-01 현행) + +- **핵심 원문**: (b) Conditions to be met. Subject to paragraph (i) of this section, the following conditions must be met: (1) Non-affiliates. (i) If the issuer of the securities is, and has been for a period of at least 90 days immediately before the sale, subject to the reporting requirements of section 13 or 15(d) of the Securities Exchange Act of 1934 (the Exchange Act), any person who is not an affiliate of the issuer at the time of the sale, and has not been an affiliate during the preceding three months, who sells restricted securities of the issuer for his or her own account shall be deemed not to be an underwriter of those securities within the meaning of section 2(a)(11) of the Act if all of the conditions of paragraphs (c)(1) and (d) of this section are met. The requirements of paragraph (c)(1) of this section shall not apply to restricted securities sold for the account of a person who is not an affiliate of the issuer at the time of the sale and has not been an affiliate during the preceding three months, provided a period of one year has elapsed since the later of the date the securities were acquired from the issuer or from an affiliate of the issuer. (ii) If the issuer of the securities is not, or has not been for a period of at least 90 days immediately before the sale, subject to the reporting requirements of section 13 or 15(d) of the Exchange Act, any person who is not an affiliate of the issuer at the time of the sale, and has not been an affiliate during the preceding three months, who sells restricted securities of the issuer for his or her own account shall be deemed not to be an underwriter of those securities within the meaning of section 2(a)(11) of the Act if the condition of paragraph (d) of this section is met. + +- **한국어**: (b) 충족할 조건. 본 조 (i)항[shell company 제외 조항]을 조건으로, 다음 조건이 충족되어야 한다: (1) 비계열자. (i) 발행인이 매도 직전 90일 이상 계속하여 Exchange Act §13 또는 §15(d)의 보고 의무 적용을 받고 있는 경우 — 매도 시점에 발행인의 affiliate가 아니고 직전 3개월간 affiliate가 아니었던 자가 자기 계산으로 그 발행인의 restricted securities를 매도하는 때에는, 본 조 (c)(1)[현행 공시]과 (d)[보유기간]의 조건이 모두 충족되면 §2(a)(11)의 underwriter가 아닌 것으로 본다. 다만 발행인 또는 그 affiliate로부터의 취득일 중 나중인 날부터 **1년이 경과한** 경우에는 (c)(1)의 요건은 적용하지 아니한다. (ii) 발행인이 그 보고 의무 적용을 받고 있지 아니한 경우 — 같은 비계열 요건의 매도인은 **(d)의 조건만** 충족되면 underwriter가 아닌 것으로 본다. + +- **쉬운 설명**: 이 조문 자체를 B-03이 판정하지는 않는다 — 판정은 C-00(경로 성립)·C-01(기간)·A-06(affiliate 여부) 몫이다. 여기 싣는 이유는 **B-03의 태그들이 하류에서 어떤 지도를 그리는지** 확정하기 위해서다. (i)·(ii)를 표로 접으면: reporting 트랙은 "기간 6개월 + 현행 공시(c)(1), 단 1년 지나면 공시 요건 소멸"의 2단이고, non-reporting 트랙은 "기간 1년, 공시 요건 없음"의 1단이다. 그래서 카드의 선언 블록에는 기간 태그와 나란히 **currentInfoRequired**(현행 공시 요건 활성 여부) 같은 파생 태그가 실릴 수 있는데, 그 값은 독립 변수가 아니라 reportingStatus의 함수다 — non-reporting인데 currentInfoRequired = true로 실리면 존재하지 않는 요건을 선언한 것(강화 방향이라 차단까지는 아니나 REVIEW 대상), reporting 트랙의 1년-후 공시 소멸은 보유자별 경과 계산이므로 자산 상수가 아니라 C-01/C-00의 런타임 산출이다(카드에 접지 않는다 — OD-B03-5의 경계). 판정 ④의 currentInfoRequired ↔ reportingStatus 정합 검사가 이 절에서 나온다. + +- **PASS/FAIL 반영**: 조건부 — 직접 판정 없음. 판정 ④의 파생 태그 정합 규칙의 근거이자, PASS 시 태그 공급이 C-00·C-01에서 어떻게 소비되는지의 지도. + +- **ERC-3643 변환**: facts.currentInfoRequired = f(reportingStatus) — REPORTING_90D ⇒ true(기본, 1년-후 소멸은 런타임), NON_REPORTING ⇒ false; 소비: C-00의 Rule 144 경로 분기 조건 + C-01의 기간 상수. + +### 3.7 Rule 144 Preliminary Note (결론부) — 유일한 법정 출구: 거래 단위의 unrestrict [ecfr.gov] + +- **조항**: Rule 144 Preliminary Note 결론부, 17 C.F.R. §230.144 — ecfr.gov (2026-07-01 현행) + +- **핵심 원문**: If a sale of securities complies with all of the applicable conditions of Rule 144: 1. Any affiliate or other person who sells restricted securities will be deemed not to be engaged in a distribution and therefore not an underwriter for that transaction; 2. Any person who sells restricted or other securities on behalf of an affiliate of the issuer will be deemed not to be engaged in a distribution and therefore not an underwriter for that transaction; and 3. The purchaser in such transaction will receive securities that are not restricted securities. + +- **한국어**: 증권의 매도가 Rule 144의 적용 가능한 조건 전부를 충족하는 경우: 1. restricted securities를 매도하는 affiliate 또는 그 밖의 자는 그 거래에 관하여 distribution에 종사하지 아니한 것으로, 따라서 underwriter가 아닌 것으로 본다; 2. 발행인의 affiliate를 위하여 restricted 또는 그 밖의 증권을 매도하는 자는 그 거래에 관하여 distribution에 종사하지 아니한 것으로, 따라서 underwriter가 아닌 것으로 본다; 그리고 3. **그 거래의 매수인은 restricted securities가 아닌 증권을 수령한다.** + +- **쉬운 설명**: 표시가 떼어질 수 있는 유일한 법정 문이다 — 그리고 문의 크기가 중요하다. 3항의 주어는 "**그 거래의** 매수인"이다: 출구는 자산 전체가 아니라 **조건을 전부 충족한 그 매도로 넘어간 분량**에만 열린다. 자산 레벨 restrictedFlag 하나로는 이 거래-단위 성질을 정밀 표현할 수 없는데, permissioned 시장의 운영 현실이 이 간극을 보수적으로 접게 해 준다: Rule 144의 전 조건 충족(특히 manner-of-sale 등)은 통상 공개시장 매도의 사건이고, Decipher 안에서 도는 이전은 그 출구를 실제로 통과하지 않은 채 남는 것이 기본이다. 따라서 **보수 기본값 = 시장 안에서는 전량 restricted 취급 유지**이고, flag를 false로 내리는 일은 발행자·TA가 출구 성립을 확인해 준 예외적 사건 — lot 단위 표현의 필요 여부는 OD-B03-6으로 남긴다. 판정 관점의 귀결은 하나다: restrictedFlag = false는 B-03이 만들어 낼 수 있는 상태가 아니라 **검증해야 할 주장**이며, 그 주장의 근거(unrestrictBasisRef)가 등록돼 있지 않으면 차단한다(판정 ⑤). + +- **PASS/FAIL 반영**: 직접 ○(전환 규율 한정) — 개별 Rule 144 조건을 판정하지 않고(그건 C-00·C-01), unrestrict 상태의 성립 요건 구조(판정 ⑤ + 거버넌스 경로)를 명령한다. + +- **ERC-3643 변환**: facts.restrictedFlag = false ⇒ facts.unrestrictBasisRef ≠ null (opinion letter + TA 확인의 해시, 정정 버전으로 승인 사슬 편입); 시장 내 기본값 = true 유지; forcedTransfer 등 발행 측 강제조치는 flag를 건드리지 않는다(경로 분리 — B-01 OD-B01-7 연동). + +### 3.8 SEC v. Ralston Purina Co. — 면제 주장자의 입증책임 [govinfo.gov] + +- **조항**: SEC v. Ralston Purina Co., 346 U.S. 119, 126 (1953) — govinfo.gov (U.S. Reports) + +- **핵심 원문**: Keeping in mind the broadly remedial purposes of federal securities legislation, imposition of the burden of proof on an issuer who would plead the exemption seems to us fair and reasonable. + +- **한국어**: 연방 증권 입법의 광범위한 구제적 목적을 염두에 둘 때, 면제를 주장하고자 하는 issuer에게 입증책임을 지우는 것이 우리에게는 공정하고 합리적으로 보인다. + +- **쉬운 설명**: B-03의 산출이 판정 하나로 끝나지 않는 이유다. 면제 위에서 도는 시장은 "제한 표시가 온전한 채로 매 거래가 지나갔다"를 스스로 증명할 수 있어야 한다. 필요한 기록은 두 겹이다 — ① 매 거래의 판정 이벤트(어느 카드 버전의 어떤 선언값으로 PASS/FAIL했는가), ② 선언값의 변경 이력(restrictedFlag·태그가 언제 어떤 근거로 바뀌었는가 — 이는 B-01 버전 사슬이 담고 B-03 이벤트가 참조한다). 뒤집으면, 선언이 꺼진 뒤에 쌓인 PASS 기록은 증명 자산이 아니라 반대 증거다(§1.4) — 그래서 선언 검사는 상장 때 한 번이 아니라 매 거래다. + +- **PASS/FAIL 반영**: 직접 ○(설계 원리) — 개별 거래의 분기 조건은 아니나, 판정 이벤트 emit + 카드 버전 참조라는 이중 산출을 직접 명령한다. + +- **ERC-3643 변환**: 판정 이벤트 emit B03Check(elementId = B-03, assetId, cardVersion, reasonCode, declSnapshotHash, timestamp) — 불변 로그; Operator 보존 양식으로 export(§11). + +### 3.9 SEC 공식 간행물 — legend 제거의 실무 통제: TA만 + 발행자 동의 (Layer 3) [sec.gov] + +- **조항**: SEC, "Rule 144: Selling Restricted and Control Securities" — sec.gov (SEC 공식 투자자 간행물) + +- **핵심 원문**: Even if you have met the conditions of Rule 144, you can't sell your restricted securities to the public until you've gotten the legend removed from the certificate. Only a transfer agent can remove a restrictive legend. But the transfer agent won't remove the legend unless you've obtained the consent of the issuer—usually in the form of an opinion letter from the issuer's counsel—that the restrictive legend can be removed. + +- **한국어**: Rule 144의 조건을 충족했다 하더라도, 증서에서 legend가 제거되기 전까지는 restricted securities를 대중에게 매도할 수 없다. **restrictive legend를 제거할 수 있는 것은 transfer agent뿐이다.** 그러나 transfer agent는 — 통상 발행인 counsel의 opinion letter 형태로 — legend를 제거해도 된다는 발행인의 동의를 얻지 않는 한 legend를 제거하지 않는다. + +- **쉬운 설명**: §3.7이 열어 둔 출구의 실무 통제 구조다 — 문은 있으되, 열쇠는 두 개가 함께 있어야 돈다: 발행인의 동의(counsel opinion) + transfer agent의 집행. 보유자 스스로도, venue도, 열쇠가 아니다. 카드 선언의 디지털 등가 규율이 여기서 그대로 도출된다: restrictedFlag의 true → false 전환은 (i) 발행인 측 확인 문서(opinion letter)와 (ii) 등록 TA(본 프로젝트에서는 Securitize)의 확인이 등록된 **정정 버전**으로만 발효될 수 있고, 그 참조가 unrestrictBasisRef다. 형식상 유의: 이 간행물은 staff 차원의 투자자 안내로서 Commission의 규칙이 아니다 — 판정 규칙의 문언 근거로 쓰지 않고, 전환 절차 설계(판정 ⑤의 근거 문서 종류 + §11 워크플로)의 실무 규범으로만 인용한다. 근거 문서의 최소 형식·서명 주체는 변호사 확인 대상이다(OD-B03-2). + +- **PASS/FAIL 반영**: 간접(설계 근거) — 판정 ⑤의 존재 이유와 §11 전환 워크플로의 실무 원형. 판정식의 문언 근거는 §3.3·§3.7이 담당. + +- **ERC-3643 변환**: unrestrictBasisRef = { opinionLetterHash, taConfirmationSig, effectiveCardVersion } — 정정 버전 승인(다중서명 + time-lock, B-01 경로) 시 등록; agent 권한 주소(TA 통제 키)의 실재·배선은 B-02 L3 소관. + +### 3.19 Sub-요건 분해 매트릭스 + +위 §3.1~§3.9의 원리를, B-03이 실제로 판정하는 원자적 검증 단위로 분해한다. 각 행은 §5.2의 판정 분기와 1:1 대응한다(채널 표기: G = per-tx 게이트, GOV = 거버넌스 평면 전제). deemed-PASS 같은 우회 경로는 존재하지 않는다. + +| Sub-ID | 원자 검증 단위 | 근거 원리 | 채널 | PASS 조건 | FAIL 코드 | +| --- | --- | --- | --- | --- | --- | +| B03-G1 | 선언 존재 — restrictedFlag 필드 non-null | 502(d)(3) 요소①(§3.3)·§5 fail-closed(§3.1) | G① | facts.restrictedFlag ∈ {true, false} (미기재 아님) | FAIL_RESTRICTION_DECL_MISSING | +| B03-G2 | 지위 정합 — required(framework) vs flag의 방향 검사 | 144(a)(3) 정의 대입(§3.2) | G② | ¬(required = RESTRICTED ∧ flag = false) — 완화 방향만 차단, 강화 방향(요구 완화 ∧ flag = true)은 통과 | FAIL_RESTRICTION_STATUS_CONFLICT | +| B03-G3a | 경로 태그 완비 — 비어 있지 않고 유효 집합 소속 | 502(d)(3) 요소②-명시(§3.3)·C-00 전제 | G③ | flag = true ⇒ enabledResalePaths ≠ ∅ ∧ enabledResalePaths ⊆ VALID_PATHS | FAIL_RESTRICTION_TAGS_INCOMPLETE / FAIL_RESTRICTION_TAG_INVALID | +| B03-G3b | 기간 태그 완비 — 법정 값 집합 소속 | 144(d)(1)(§3.5) | G③ | flag = true ⇒ holdingPeriodMonths ∈ {6, 12} | FAIL_RESTRICTION_TAGS_INCOMPLETE / FAIL_RESTRICTION_TAG_INVALID | +| B03-G3c | 지위 인자·class 결속 — reportingStatus 지정 + legalClassId 참조 | 144(d)(1) 인자(§3.5)·§4(d)(3)(C)(§3.4) | G③ | flag = true ⇒ reportingStatus 지정 ∧ restriction 블록의 classRef = facts.legalClassId | FAIL_RESTRICTION_TAGS_INCOMPLETE | +| B03-G3d | legend 인용 — 법률 문서 앵커 존재 | 502(d)(3) 요소②-인용 "referring to"(§3.3) | G③ | flag = true ⇒ legendRef ≠ null | FAIL_RESTRICTION_TAGS_INCOMPLETE | +| B03-G4a | 기간↔지위 정합 — 완화 방향 모순 차단 | 144(d)(1)(i)·(ii)(§3.5) | G④ | reportingStatus = NON_REPORTING ⇒ holdingPeriodMonths = 12; REPORTING_90D ⇒ ∈ {6, 12} | FAIL_RESTRICTION_TAG_CONFLICT | +| B03-G4b | 공시 파생 태그 정합 | 144(b)(1)(§3.6) | G④ | currentInfoRequired = f(reportingStatus) 규칙 위반 없음(완화 방향 위반 = FAIL, 강화 방향 = REVIEW 큐) | FAIL_RESTRICTION_TAG_CONFLICT | +| B03-G5 | unrestrict 근거 — 출구 주장의 등록 확인 | Prelim Note(§3.7)·SEC 간행물(§3.9) | G⑤ | flag = false ⇒ unrestrictBasisRef ≠ null ∧ 해당 참조가 승인 버전 사슬에 존재 | FAIL_UNRESTRICT_BASIS_MISSING | +| B03-GOV | 전환 규율 — flag·태그 변경은 정정 버전 경로만 | §4(e)(1)(C)(§3.4)·B-01 승인 사슬 | GOV | 게이트가 아닌 전제 — 우회 변경은 B-01 버전 검사가 차단, 근거 미등록은 G⑤가 차단 | (G⑤·B-01로 표면화) | + +**두 가지 판독 규칙.** ① 모든 방향 검사는 비대칭이다 — **완화 방향(법이 요구하는 것보다 느슨한 선언)만 차단**하고, 강화 방향(더 엄격한 선언)은 통과시킨다. B-01 INV-6(override 강화 방향만)과 같은 문법이며, "보수 초과는 안전"이라는 시스템 공통 원칙의 B-03 판이다. ② G3a의 집합 검사와 B-01 INV-3의 관계 — INV-3은 enabledResalePaths ⊆ framework 허용집합(무모순: ∅도 통과), G3a는 ≠ ∅ ∧ ⊆ VALID_PATHS(완비: ∅ 탈락). 두 부등호가 함께 있어야 "빈 선언"과 "모순 선언" 양쪽이 막힌다(§7 T7의 회귀 포인트). + +### 3.20 ERC-3643 변환·선언 필드 총정리 + +§3.1~§3.9에 흩어진 변환을 한곳에 모은 것이다. B-03의 선언 필드는 전부 자산 레벨(ManifestCore.facts) 상수이며, 사람 claim(A계열의 ONCHAINID claim)과 층이 다르다. + +| 조항 | ERC-3643 / Manifest 변환 | 간략 설명 | +| --- | --- | --- | +| §3.1 §5 | Router cumulative AND + B-03 자산 메타 배치 | 기본값 = 금지의 코드화 (직접 필드 없음) | +| §3.2 144(a)(3) | requiredStatus 매핑: issuanceFramework = RegD506c ⇒ RESTRICTED — 거버넌스 상수 테이블 | 요구 지위의 문언 대입 (판정 ② 좌변) | +| §3.3 502(d)(3) 요소① | facts.restrictedFlag: bool (non-null 강제) | 미등록·제한부 지위의 기재 | +| §3.3 502(d)(3) 요소②-명시 | facts.enabledResalePaths: bitset ⊆ VALID_PATHS; facts.holdingPeriodMonths ∈ {6, 12}; facts.reportingStatus ∈ {REPORTING_90D, NON_REPORTING} | 제한 내용의 기계가독 명시 (setting forth) | +| §3.3 502(d)(3) 요소②-인용 | facts.legendRef = keccak256(제한 조항 canonical 전문) | 법률 문서 참조 (referring to) — 직렬화 규격 OD-B03-1 | +| §3.4 §4(e)(1)(C) | 선언 필드의 R2 상시 검사 + 변경은 GOV 경로만 | 지위의 전 수명 유지 | +| §3.4 §4(d)(3)(C) | restriction 블록의 classRef = facts.legalClassId | class 결속 (D-01 공유 식별자) | +| §3.5 144(d)(1) | 기간 값 집합 {6, 12} + NON_REPORTING ⇒ 12 정합 규칙 | 기간 태그의 법정 기준 (판정 ③b·④a) | +| §3.6 144(b)(1) | facts.currentInfoRequired = f(reportingStatus) | 공시 파생 태그 (판정 ④b); 1년-후 소멸은 런타임(C-00·C-01) | +| §3.7 Prelim Note | flag = false ⇒ facts.unrestrictBasisRef ≠ null | 출구 주장의 근거 등록 (판정 ⑤) | +| §3.9 SEC 간행물 | unrestrictBasisRef = { opinionLetterHash, taConfirmationSig, effectiveCardVersion } | 전환 근거의 구성 (형식은 OD-B03-2) | +| §3.8 Ralston | emit B03Check(assetId, cardVersion, reasonCode, declSnapshotHash, ts) | 판정 이벤트 = 증명 자산 | + + +## §4. 입력 사실 — 판정에 필요한 데이터 + +### 4.1 본 부품이 판정하려면 어떤 증거가 필요한가 + +B-03의 입력은 전부 **신상카드(ManifestCore.facts)의 필드**와 **거버넌스 상수** 둘뿐이다. 사람 claim도, 외부 oracle도, off-chain 호출도 없다 — B-01이 PASS한 카드의 스냅샷을 읽고, 거버넌스 상수 테이블과 대조하는 순수 읽기·비교다. 이 단순성이 우연이 아니라 설계다: 선언 검사가 외부 신뢰 지점을 가지면, 그 지점이 곧 선언을 우회하는 문이 된다. + +### 4.2 Data field — DEX가 실제로 읽는 항목 + +| 필드 | 타입·값역 | 출처 | 판정 사용처 | 없으면 | +| --- | --- | --- | --- | --- | +| facts.restrictedFlag | bool (non-null) | ManifestCore | ①존재·②정합·분기 | FAIL_RESTRICTION_DECL_MISSING | +| facts.issuanceFramework | enum (RegD506c 등) | ManifestCore | ② required 도출 | B-01 INV-2 선에서 이미 차단 | +| facts.enabledResalePaths | bitset | ManifestCore | ③a 완비·유효 | FAIL_RESTRICTION_TAGS_INCOMPLETE | +| facts.holdingPeriodMonths | uint ∈ {6, 12} | ManifestCore | ③b 값 집합·④a 정합 | FAIL_RESTRICTION_TAGS_INCOMPLETE | +| facts.reportingStatus | enum {REPORTING_90D, NON_REPORTING} | ManifestCore | ③c 지정·④a·④b 정합 | FAIL_RESTRICTION_TAGS_INCOMPLETE | +| facts.currentInfoRequired | bool | ManifestCore | ④b 파생 정합 | (파생 태그 — 미기재 시 f(reportingStatus)로 취급) | +| restriction.classRef | id | ManifestCore | ③c class 결속 (= facts.legalClassId) | FAIL_RESTRICTION_TAGS_INCOMPLETE | +| facts.legendRef | bytes32 (hash) | ManifestCore | ③d 인용 존재 | FAIL_RESTRICTION_TAGS_INCOMPLETE | +| facts.unrestrictBasisRef | struct 또는 null | ManifestCore (정정 버전 경유) | ⑤ 출구 근거 | flag = false일 때 null이면 FAIL_UNRESTRICT_BASIS_MISSING | +| params.requiredStatusMap | 매핑 테이블 | 거버넌스 상수 (카드 밖) | ② required 도출 | 시스템 구성 오류 — 배포 게이트에서 차단 | +| params.VALID_PATHS | enum 집합 | 거버넌스 상수 | ③a 소속 검사 | 상동 | + +**자기참조 차단.** 판정 파라미터(requiredStatusMap·VALID_PATHS)는 카드 밖 거버넌스 상수다 — 카드가 자기 검사 기준을 스스로 싣는 순간 검사가 무의미해지기 때문이다(B-01 §3.20과 동일 규율). 카드에는 사실만, 기준은 상수에. + +### 4.3 수집 경로 — 선언은 어떻게 카드에 실리는가 + +선언 필드의 생애는 세 단계다. **① 온보딩(최초 기재)**: 발행자가 청약 문서·발행 구조를 제출하면, Operator 심사에서 issuanceFramework를 확정하고 그로부터 requiredStatus를 도출해 restrictedFlag를 기재하며, 변호사 확인을 거친 경로 집합·발행체 보고 지위·기간값·legend 앵커를 태그로 싣는다 — 이 시점에 B-03의 전 판정을 사전 실행해(pre-flight) FAIL 상태의 카드가 발효되지 않게 한다. **② 정정(변경)**: 어떤 선언 필드든 변경은 정정 버전 — 다중서명 + time-lock(B-01 승인 사슬) — 으로만 가능하고, 특히 완화 방향 변경(flag true → false, 기간 12 → 6)은 법적 근거 문서의 등록이 선행돼야 한다(unrestrictBasisRef·보고 지위 전환 증빙). **③ 소비(매 거래)**: B-03 게이트가 읽고, PASS면 같은 스냅샷을 C-00·C-01이 이어 읽는다 — 한 거래 안에서 세 부품이 같은 카드 버전을 본다는 것은 B-01의 버전 고정이 보증한다. + +### 4.4 층별 필수 확인 항목 (전체 표) + +| 층 | 대상 | 필수 확인 항목 | 근거 | +| --- | --- | --- | --- | +| 온보딩 — 지위 | issuanceFramework | requiredStatus 도출·restrictedFlag 기재 일치 (pre-flight ①·②) | §3.2 | +| 온보딩 — 태그 | 선언 블록 | 경로·기간·지위 인자·classRef·legendRef 완비 (pre-flight ③·④) | §3.3~§3.6 | +| 온보딩 — 봉인 | 카드 | 선언 블록의 B-01 승인 경로 발효 | §3.8; B-01 | +| 게이트 — 존재·정합 | flag | ① non-null · ② 방향 검사 | G1·G2 | +| 게이트 — 완비 | 태그 4종 | ③ paths ≠ ∅ ⊆ VALID_PATHS · 기간 ∈ {6, 12} · 지위 인자·classRef · legendRef | G3a~d | +| 게이트 — 정합 | 태그 상호 | ④ NON_REPORTING ⇒ 12 · currentInfoRequired = f(status) | G4a·b | +| 게이트 — 출구 | flag = false 트랙 | ⑤ unrestrictBasisRef 존재·승인 사슬 소속 | G5 | +| 게이트 — 비검사 | — | 카드 무결성(B-01)·집행 기계(B-02)·경로 성립(C-00)·기간 경과(C-01)·affiliate(A-06)·기재 진실성(온보딩·A-12) | 경계(§3.0.2) | + +## §5. 판정 로직 — 어떻게 PASS/FAIL이 결정되는가 + +### 5.0 판정 흐름 플로우차트 + +![B-03 런타임 판정 흐름](B-03_fig50.png) + +*그림 5.0 — 런타임 판정: 전제(B-01 PASS) → ①존재 → ②지위 정합 → flag 분기 → [true 트랙: ③완비 → ④정합] / [false 트랙: ⑤출구 근거] → PASS emit. 거버넌스 평면(점선)은 체결 경로 밖에서 flag 전환과 basisRef를 공급한다.* + +### 5.1 전체 흐름 (사람 말로) + +다섯 관문을 순서대로 지난다. 먼저 **선언이 있는가**(①) — legend 자리 자체가 비어 있으면 그걸로 끝이다. 다음 **선언이 사실과 맞는가**(②) — 발행 프레임워크가 요구하는 지위와 flag를 대조하되, 느슨한 쪽으로 어긋난 경우만 잡는다(빡빡한 쪽 초과는 안전). 여기서 flag 값에 따라 트랙이 갈린다. **restricted 트랙**(flag = true)에서는 하류가 소비할 태그 네 종이 **다 있고 유효한가**(③), 그리고 태그끼리 **서로 모순이 없는가**(④)를 본다 — 특히 비보고 발행체에 6개월 태그가 실린 완화 모순이 이 관문의 표적이다. **unrestricted 트랙**(flag = false)에서는 단 하나를 본다 — **그렇게 주장할 근거가 등록돼 있는가**(⑤): 발행자 counsel의 opinion과 TA 확인이 정정 버전으로 승인 사슬에 실려 있어야 한다. 전부 통과하면 PASS 이벤트를 남기고, 검증된 태그가 다음 부품들(C-00·C-01)의 입력이 된다. + +### 5.2 Pseudocode + 단계별 해설 + +``` +function check_B03(asset, now) -> (PASS | FAIL(code)): + # 전제: 같은 union에서 B-01이 이미 PASS — 카드 스냅샷의 무결성 보증 + f = ACM[asset].facts # SLOAD (B-01이 고정한 버전) + + # ① 선언 존재 — 502(d)(3) 요소①의 자리 자체 + if f.restrictedFlag is null: + return FAIL(RESTRICTION_DECL_MISSING) + + # ② 지위 정합 — 144(a)(3) 대입, 완화 방향만 차단 + required = params.requiredStatusMap[f.issuanceFramework] # 거버넌스 상수 + if required == RESTRICTED and f.restrictedFlag == false: + return FAIL(RESTRICTION_STATUS_CONFLICT) # 거짓 완화 선언 + # (required가 느슨한데 flag == true → 강화 방향, 통과) + + if f.restrictedFlag == true: + # ③ 필수 태그 완비 — 502(d)(3) 요소②의 명시 + 인용 + if f.enabledResalePaths == EMPTY: return FAIL(RESTRICTION_TAGS_INCOMPLETE, paths) + if not f.enabledResalePaths ⊆ params.VALID_PATHS: + return FAIL(RESTRICTION_TAG_INVALID, paths) + if f.holdingPeriodMonths not in {6, 12}: return FAIL(RESTRICTION_TAG_INVALID, holding) + if f.reportingStatus is null: return FAIL(RESTRICTION_TAGS_INCOMPLETE, status) + if f.restriction.classRef != f.legalClassId: return FAIL(RESTRICTION_TAGS_INCOMPLETE, class) + if f.legendRef is null: return FAIL(RESTRICTION_TAGS_INCOMPLETE, legend) + + # ④ 태그 내적 정합 — 완화 방향 모순 차단 (144(d)(1)·(b)(1)) + if f.reportingStatus == NON_REPORTING and f.holdingPeriodMonths == 6: + return FAIL(RESTRICTION_TAG_CONFLICT, period) + if f.reportingStatus == NON_REPORTING and f.currentInfoRequired == true: + enqueue REVIEW(info_tag_overclaim) # 강화 방향 — 차단 아님 + if f.reportingStatus == REPORTING_90D and f.currentInfoRequired == false: + return FAIL(RESTRICTION_TAG_CONFLICT, info) + + else: # f.restrictedFlag == false — required도 이를 허용하는 경우만 도달 + # ⑤ 출구 근거 — Prelim Note의 거래-단위 출구를 통과했다는 등록 주장 + if f.unrestrictBasisRef is null or not in_approved_chain(f.unrestrictBasisRef): + return FAIL(UNRESTRICT_BASIS_MISSING) + + emit B03Check(asset, ACM[asset].version, PASS, hash(f.restrictionBlock), now) + return PASS +``` + +**해설.** ①~⑤ 전부 결정론이고 외부 호출이 없다 — SLOAD와 비교뿐이라 hot path 비용은 자산 메타 계열 중 가장 싼 축이다. required·VALID_PATHS가 카드 밖(거버넌스 상수)에서 오는 것이 자기참조 차단의 구현이고, ④의 두 번째 분기가 강화 방향을 차단이 아닌 REVIEW로 보내는 것이 방향 규칙의 정확한 구현이다(완화 = FAIL, 강화 = 통과하되 과잉 선언은 운영 검토). emit되는 이벤트에 선언 블록의 해시가 실리므로, "그 거래 시점의 legend가 무엇이었나"를 사후에 바이트 단위로 재구성할 수 있다(§3.8의 증명 자산). + +### 5.3 Threshold·방향 매트릭스 + +B-03에는 크기 비교(>, ≥)가 없다 — 모든 검사가 **존재 · 집합 소속 · 함의 · 방향** 넷 중 하나다. 그래서 경계값 표 대신 방향 표를 고정한다. + +| 검사 | 문법 | 통과 조건 | 자주 틀리는 지점 | +| --- | --- | --- | --- | +| ① 존재 | non-null | flag ∈ {true, false} | "미기재 = false 취급" 구현 — 미기재는 **결측**이지 완화 선언이 아니며, 둘의 FAIL 코드가 다르다 | +| ② 지위 | 방향(함의) | ¬(required=R ∧ flag=false) | 대칭 검사로 구현해 강화 방향(required 완화 ∧ flag=true)까지 차단하는 과잉 — 보수 초과는 통과다 | +| ③a 경로 | 비영 + 소속 | paths ≠ ∅ ∧ ⊆ VALID_PATHS | ∅ ⊆ 아무 집합이므로 소속 검사만 하면 빈 선언이 통과 — 비영 검사가 별도로 필요 (B-01 INV-3과의 분업 지점) | +| ③b 기간 | 집합 소속 | ∈ {6, 12} | "6 이상이면 OK" 식 크기 비교 — 9 같은 무근거 값이 통과해 버린다; 법정 값은 두 개뿐 | +| ④a 기간↔지위 | 방향 | NON_REPORTING ⇒ 12 | 역방향(REPORTING ⇒ 6 강제)까지 요구하는 과잉 — reporting 자산의 12는 계약상 lock-up 반영으로 적법한 강화다 | +| ⑤ 출구 | 존재 + 사슬 소속 | basisRef ≠ null ∧ 승인 사슬 내 | 존재만 보고 사슬 소속을 생략 — 미승인 참조를 단 우회 flag-off가 열린다 | + +### 5.4 왜 자산 레벨 상수인가 — 그리고 그 한계선 + +B-03의 모든 필드는 자산(정확히는 class) 레벨이다. 이 선택의 정당화와 한계를 명시한다. 정당화: 제한 지위의 발생 인자(발행 프레임워크)·기간의 결정 인자(발행체 보고 지위)·경로 집합은 전부 **class 공통 사실**이라 보유자별로 다르지 않다 — 상수로 접는 것이 표현으로 정확하고, per-tx 비용도 최소가 된다. 한계선 두 곳: ① 144(d)(1)의 90일 reporting 판별은 엄밀히는 매도 시점 사실이므로, 상수화는 §3.5의 보수 조건(비보고 → 12 방향은 항상 안전, 보고 → 6 방향은 신선도 + 전환 트리거 전제)으로만 지탱된다 — 전환 절차는 OD-B03-4. ② Prelim Note의 출구는 거래 단위라 자산 flag 하나로는 lot별 차등을 표현하지 못한다 — 보수 기본값(시장 내 전량 restricted)으로 접고, lot 표현 필요성은 OD-B03-6. 두 한계 모두 **보수 방향으로 접혀 있다**는 점이 요점이다 — 상수화의 오차가 생기더라도 과잉 차단 쪽이지 과소 차단 쪽이 아니다. + +### 5.5 비결정성을 결정성으로 — 본 부품 구현의 본질 + +다른 자격 부품들(A-03·A-13 등)은 비결정론적 판단을 off-chain 검증기관에 격리하고 서명 결과만 소비하는 방식(패턴 B)으로 결정성을 얻는다. B-03은 더 앞 단계에서 결정성을 얻는다 — **비결정적 판단을 전부 카드 기재 시점(온보딩·정정)으로 밀어내고, 게이트에는 기재값들의 형식 관계만 남긴다.** "이 발행이 어느 프레임워크인가", "어느 경로를 열 것인가", "출구가 성립했는가"는 전부 변호사·발행자·TA의 판단이지만, 그 판단은 게이트가 돌기 전에 카드에 값과 근거로 봉인돼 있고, 게이트는 존재·소속·함의·방향만 계산한다. B-03에 남는 유일한 비결정성은 "기재가 진실인가"인데, 이는 §3.0.2 경계에서 본 대로 온보딩 심사·발행자 보증·A-12로 격리된다. 이 격리가 유지되는 한 B-03은 reasonable belief도 manual review도 없는 순수 기계 게이트로 남는다 — 단 하나의 예외(④b 강화 방향의 REVIEW 큐)는 차단이 아닌 운영 위생이다. + + +## §6. 거절·예외 처리 — 검사에 실패하면 어떻게 되는가 + +### 6.1 전체 흐름 (사람 말로) + +B-03의 FAIL은 전부 **자산의 카드 문제**이지 거래 당사자의 문제가 아니다 — 이 점이 A계열 부품과 처리 흐름을 가르는 분기점이다. 매수인 자격 미달이면 "당신이 서류를 보완하라"고 안내할 수 있지만, 선언 결손·모순은 당사자가 고칠 수 있는 것이 아니다. 그래서 처리의 방향은 하나다: 해당 거래를 즉시 거절하고(fail-closed), 같은 카드 버전을 딛는 **그 자산의 모든 후속 거래도 같은 코드로 막히며**(결정론이므로), 해소는 오직 정정 버전 — Operator·발행자가 근거를 갖춰 카드를 고쳐 승인 사슬에 태우는 것 — 뿐이다. 런타임에 사람이 "이번만 통과" 시킬 문은 없다. + +### 6.2 Failure codes 6종 + +| 코드 | 관문 | 의미 | 해소 경로 | 기록 항목 | +| --- | --- | --- | --- | --- | +| FAIL_RESTRICTION_DECL_MISSING | ① | 선언 필드 자체가 결측 — legend 자리가 비어 있다 | 정정 버전으로 선언 블록 기재 (온보딩 pre-flight 누락의 사후 발견) | 카드 버전·결측 필드 | +| FAIL_RESTRICTION_STATUS_CONFLICT | ② | 프레임워크가 요구하는 지위를 flag가 완화 방향으로 거짓 기재 | 정정 버전으로 flag 교정 — 또는 (드물게) framework 기재 자체의 오류 조사 | required·flag 쌍·framework | +| FAIL_RESTRICTION_TAGS_INCOMPLETE | ③ | restricted 자산의 필수 태그 결측 (paths ∅ / status·classRef·legendRef null) | 정정 버전으로 결측 태그 기재 (경로 확정은 변호사 회신 의존 시 그 대기) | 결측 태그 목록 | +| FAIL_RESTRICTION_TAG_INVALID | ③ | 태그 값이 유효 집합 밖 (미지 경로 enum·기간 ∉ {6, 12}) | 정정 버전으로 법정 값 교정 | 무효 값·유효 집합 | +| FAIL_RESTRICTION_TAG_CONFLICT | ④ | 태그 간 완화 방향 모순 (NON_REPORTING + 6 등) | 정정 버전 — 지위 인자 재확인 후 정합값 기재 | 모순 쌍 | +| FAIL_UNRESTRICT_BASIS_MISSING | ⑤ | flag = false 주장에 등록된 근거 없음 | 근거 문서(opinion + TA 확인) 등록한 정정 버전 — 또는 flag = true로 원복 | flag·basisRef 상태 | + +### 6.3 Manual Review — 있는 곳과 없는 곳 + +판정 경로에는 manual review가 없다 — 여섯 코드 전부 결정론 FAIL이고 사람의 재량 통과가 불가능하다. 사람이 등장하는 자리는 두 곳뿐이며 모두 체결 경로 밖이다: ① **정정 버전 워크플로**(§11) — FAIL의 유일한 해소 경로로서, 심사·다중서명·time-lock을 거친다. ② **REVIEW 큐** — ④b의 강화 방향 과잉 선언(비보고 자산에 currentInfoRequired = true) 같은, 차단 사유는 아니나 카드 위생상 정리할 항목이 적재되는 곳. REVIEW 항목은 거래를 막지 않으며, 처리 시한·담당은 Operator 운영 기준(§11)을 따른다. + +### 6.4 Error message — 매수인 노출용 vs 내부 기록용 분리 + +선언 결손은 자산 쪽 사정이므로, 거래 당사자에게는 원인의 세부를 노출할 필요도 이유도 없다 — 세부는 오히려 "이 자산의 카드가 어떻게 잘못돼 있는지"의 지도가 되어 우회 시도를 돕는다. 노출용은 한 문장으로 통일한다: **"이 자산은 현재 컴플라이언스 설정 점검 중으로 거래가 일시 제한됩니다. (코드: B03-ASSET)"** — 여섯 코드 모두 동일 문구이며, 당사자가 취할 행동이 없음을 반영한다. 내부 기록용은 §6.2의 코드·기록 항목 전부에 카드 버전·선언 블록 해시를 붙여 남긴다 — 정정 워크플로와 감독 대응의 입력이 된다. + +## §7. 테스트 케이스 — 스펙이 제대로 작동하는지 검증 + +### 7.1 Test 1 — Pass (명백한 통과) + +BUIDL-like 카드: framework = RegD506c, flag = true, paths = {Rule144, Section4a7} (VALID_PATHS 내), holdingPeriodMonths = 12, reportingStatus = NON_REPORTING, currentInfoRequired = false, classRef = legalClassId 일치, legendRef 등록. 기대: ①~④ 전 통과, PASS + B03Check emit(선언 블록 해시 포함). 확인 포인트: emit된 해시가 카드 전문의 restriction 블록 재직렬화 해시와 일치. + +### 7.2 Test 2 — Fail (명백한 거절: 거짓 완화 선언) + +같은 카드에서 flag = false, unrestrictBasisRef = null. framework = RegD506c이므로 required = RESTRICTED. 기대: ②에서 FAIL_RESTRICTION_STATUS_CONFLICT — ⑤까지 가지 않는다(②가 선행 차단). 확인 포인트: 144(a)(3)(ii) 문언 대입이므로 어떤 운영 입력으로도 이 FAIL을 런타임에 뒤집을 수 없어야 한다. + +### 7.3 Test 3 — Fail (빈 경로 선언) + +flag = true인데 paths = ∅, 나머지 태그 정상. 기대: ③a에서 FAIL_RESTRICTION_TAGS_INCOMPLETE(paths). 이 케이스의 의미: C-00이 "판정할 경로 목록이 없는 채로" 도는 사태 — 구현에 따라 무단 통과 또는 미정의 동작 — 를 그 앞 단에서 차단한다. + +### 7.4 Test 4 — Boundary/방향 (완화 모순 vs 강화 허용) + +케이스 A: reportingStatus = NON_REPORTING, holdingPeriodMonths = 6. 기대: ④a에서 FAIL_RESTRICTION_TAG_CONFLICT — 법이 1년을 요구하는 자산의 6개월 선언은 C-01을 오작동시키는 완화 모순. 케이스 B(대조): reportingStatus = REPORTING_90D, holdingPeriodMonths = 12. 기대: **PASS** — 법정 최소(6) 초과의 보수 설정은 적법하다. 두 케이스를 쌍으로 회귀에 고정한다 — 흔한 오구현이 "status별 유일 정답값" 대칭 검사로 케이스 B까지 막는 것이다(§5.3 ④a행). + +### 7.5 Test 5 — 회귀 (근거 없는 unrestrict / 근거 있는 unrestrict) + +케이스 A: framework가 restricted를 강제하지 않는 가상 자산(required = UNRESTRICTED_OK)에서 flag = false, basisRef = null. 기대: ⑤에서 FAIL_UNRESTRICT_BASIS_MISSING — required가 허용해도 근거 없는 flag-off는 서지 않는다. 케이스 B: 같은 자산, 정정 버전으로 { opinionLetterHash, taConfirmationSig } 등록 + 승인 사슬 편입 후. 기대: PASS. 확인 포인트: 케이스 B에서 basisRef가 존재하되 **승인 사슬 밖**(미승인 버전 참조)이면 여전히 FAIL — 존재 검사만 구현하고 사슬 소속을 빼먹는 것이 ⑤의 대표 오구현이다(§5.3 ⑤행). + +### 7.6 Test 6 — 회귀 (유효 집합 밖 값) + +flag = true, paths = {Rule144, UNKNOWN_PATH_X}. 기대: ③a에서 FAIL_RESTRICTION_TAG_INVALID — 부분 유효(교집합만 취해 통과) 처리 금지: 미지 enum의 존재 자체가 카드 오류다. 병행 케이스: holdingPeriodMonths = 9 → 같은 코드(holding). "6 이상" 크기 비교 구현이 잡아내지 못하는 값이므로 집합 소속 구현의 확인 케이스다. + +### 7.7 Test 7 — Cascade/이중 방벽 (B-01 INV-3과의 분업 확인 — 회귀 핵심) + +카드: framework = RegD506c(허용집합 = {Rule144, Section4a7, Rule144A}), paths = ∅, flag = true, 나머지 정상. 단계 1: B-01을 먼저 실행 — 기대: INV-3 **PASS**(∅ ⊆ 허용집합은 참이므로 무모순 검사는 통과). 단계 2: B-03 실행 — 기대: ③a **FAIL_RESTRICTION_TAGS_INCOMPLETE**. 이 케이스가 고정하는 것: 두 부품의 검사가 같은 필드에 대한 **다른 질문**이며, "B-01이 resalePaths를 이미 본다"는 이유로 B-03의 비영 검사를 생략하는 통합 리팩터링이 빈 선언 구멍을 연다는 사실. 역방향 쌍: paths = {Rule144A}인데 framework 허용집합에 Rule144A가 없는 카드 — B-01 INV-3이 FAIL(모순)하고 B-03까지 오지 않는다. 두 방벽이 각자 잡는 결함이 다름을 쌍으로 회귀에 고정한다. + +### 7.8 Test 8 — 결측 vs false 구분 + +restrictedFlag 필드 자체가 미기재(null 직렬화). 기대: ①에서 FAIL_RESTRICTION_DECL_MISSING — ②의 STATUS_CONFLICT가 아니다. "미기재를 false로 읽는" 디코더 기본값이 있으면 이 케이스가 ②로 흘러 코드가 바뀐다 — 결측과 거짓 완화는 원인·해소 경로가 다르므로(전자는 기재 누락, 후자는 값 오류) 코드 구분을 회귀로 고정한다. + + +## §8. (α) 검증 패턴 — 왜 기계 판정형인가 + +### 8.1 Decipher의 검증 방식 3패턴 중 B-03의 자리 + +| 패턴 | 설명 | B-03 | +| --- | --- | --- | +| A. 기계 판정형 | 온체인 데이터·상수만으로 결정 (조회·비교·함의) | **해당** | +| B. 증명서 확인형 | off-chain 판단을 검증기관 서명 claim으로 신뢰 | 아님 — 다만 ⑤의 basisRef가 국소적으로 이 문법을 빌린다 | +| C. 감시형 | 차단 없이 flag + 운영 판단 | 아님 — ④b의 REVIEW 큐만 국소 차용 | + +### 8.2 왜 기계 판정형이 유일한 선택인가 + +두 방향에서 강제된다. **법 쪽**: §5의 무과실 기본값(§3.1) 아래에서 선언 결손은 발생 즉시 하류 전체를 오염시키므로, 사후 표시(패턴 C)로는 §5의 사전 차단 요구를 못 맞춘다. 그리고 검사 대상이 "기재값들의 형식 관계"라 reasonable belief(패턴 B)를 세울 판단 자체가 없다 — 존재·소속·함의는 믿는 것이 아니라 계산하는 것이다. **기술 쪽**: 판단 요소는 §5.5에서 본 대로 전부 카드 기재 시점으로 밀려나 있고, 게이트에 남은 것은 결정론뿐이다. 패턴 B 구조를 억지로 끼우면 "누가 선언의 정합을 믿어주는가"라는 불필요한 신뢰 지점만 생긴다. + +### 8.3 ⑤의 하이브리드 성격 — 기계가 확인하는 증명서 + +판정 ⑤는 흥미로운 경계 사례다: unrestrict의 **판단**(출구 성립 여부)은 발행자 counsel·TA의 off-chain 몫이지만(패턴 B의 문법), B-03이 하는 일은 그 판단의 산출물이 **승인 사슬에 등록돼 있는가**의 존재·소속 검사뿐이다(패턴 A의 문법). 즉 증명서형의 신뢰 구조를 거버넌스 평면(정정 버전 승인)이 흡수하고, 게이트에는 기계 검사만 남는 배치다 — B-01의 status 서명 입력과 같은 설계 문법이며, 그래서 근거 문서의 실질 심사 기준은 게이트 스펙이 아니라 §11 워크플로 + OD-B03-2의 소관이 된다. + +## §9. (β) Cross-Element·Cross-Recipe Coordination — 혼자 움직이지 않는다 + +### 9.1 본 부품의 책임 경계 + +B-03은 *자산 class의 제한 선언 형식 판정*(존재·지위 정합·완비·내적 정합·출구 근거)만 한다. **넘기는 것** — 카드 그릇의 무결성·버전·신선도는 B-01, 집행 기계의 표준성·작동은 B-02, 경로 성립 판정은 C-00, 기간 경과 계산은 C-01, 매도인의 affiliate 여부는 A-06, 기재 진실성은 온보딩·발행자 보증·A-12, 경로 선택의 법적 타당성은 발행자·변호사(Q-B1), 근거 문서의 실질 심사는 Operator 워크플로. + +### 9.2 협응 표 + +| 상대 부품 | 관계 | 협응 내용 | +| --- | --- | --- | +| B-01 카드 정합 | 선행 (숙주 보증) + 이중 방벽 | B-01 PASS가 B-03 입력의 무결성 전제. INV-3(⊆ 무모순)과 G3a(≠ ∅ 완비)의 분업 — 같은 필드, 다른 질문(§7 T7). 선언 필드의 신선도·버전은 B-01 ③·⑤ 소관 | +| B-02 토큰 표준 | 병행 (선언 ↔ 기계) | 상장 심사 교차 전제 — restricted 선언(B-03) 자산에 집행 기계(B-02) 부재 시 상장 거절. 게이트에서는 상호 데이터 의존 없음 | +| C-00 전매 경로 | 공급 (강한 의존) | 검증된 enabledResalePaths·currentInfoRequired 공급 — C-00은 이 집합 안에서 이 거래의 성립 경로를 분기. 경로 목록의 확정(Q-B1)은 C-00 측 미결과 동기화(OD-B03-3) | +| C-01 보유기간 | 공급 (강한 의존) | 검증된 holdingPeriodMonths(요구 상수) 공급 — C-01이 now − acquiredAt과 비교. 기산·tacking·full payment 판정은 전부 C-01 | +| A-06 affiliate | 무의존 (평행 소비) | 144(b)의 affiliate 분기는 A-06 산출 — B-03 태그와 함께 C-00·C-08에서 소비될 뿐, B-03과 직접 배선 없음 | +| D-01 보유자 수 | 식별자 공유 | legalClassId를 공유 — B-03의 classRef 결속(G3c)이 D-01의 class 분리 카운트와 같은 식별 체계를 딛는다 | +| F-04 판매중 매수금지 | 무의존 | distributionStatus는 B-01 공급·F-04 소비 — B-03의 restriction 블록과 별개 축 | +| A-12 반대정보 | 보완 (진실 축) | 선언 기재의 진실성에 대한 red flag — B-03(형식 축)과 직교. flag가 서면 Operator가 정정 검토 | +| Router / Manifest | 숙주 | R1·R2 union 내 B-01 직후 배치(자산 메타 계열). R3 활성 거래도 R1 또는 R2를 반드시 경유하므로 커버리지 공백 없음 | + +### 9.3 Recipe orchestration + +R1(발행)에서 B-03은 "발행 거래가 딛는 선언이 온전한가"를, R2(재판매)에서는 "§4(e)(1)(C)가 유지시킨 선언이 여전히 온전한가"를 본다 — 검사식은 동일하고, 부착 이유만 조문이 다르다(§3.3 vs §3.4). R3(펀드)·R4(행위감시)에는 미부착: 펀드 고유 요건(QP·보유자 수)은 제한 선언과 별개 축이고, 모든 토큰 이동이 R1 또는 R2를 경유하므로 R3-활성 거래에서도 선언 검사는 빠지지 않는다(B-02 §8.4와 동일한 커버리지 논증). + +### 9.4 Conflict resolution rule + +충돌 세 경우의 처리를 고정한다. ① **B-01 FAIL + B-03 도달 전**: union 순서상 B-01이 먼저이므로 B-03은 실행되지 않는다 — 카드 무결성 없는 선언 검사는 무의미. ② **B-03 FAIL vs C-00/C-01의 "관대한" 해석 가능성**: 존재하지 않는다 — B-03 FAIL이면 Router cumulative AND로 거래가 서지 않으므로 하류가 태그를 "달리 읽을" 기회 자체가 없다. ③ **B-02와의 교차 전제 위반 발견**(restricted 선언인데 기계 부재): 게이트가 아니라 상장 심사·재승인 트랙의 거절 사유이며, 운영 중 발견 시(기계 배선 드리프트) B-02 G2가 차단하고 B-03은 관여하지 않는다. + +## §10. (γ) 3-Layer Solution — 선언 신뢰를 세 겹으로 + +### 10.1 층 구성 + +| 층 | 주체 | B-03에서의 역할 | 법적 토대 | +| --- | --- | --- | --- | +| L1 Self-Attest | 발행자 | 발행 구조·보고 지위·경로 의향·제한 조항 원문 제출 | 502(d) reasonable care의 수범자(§3.3) — 선언의 원천 책임 | +| L2 Trusted 확인 | Operator 심사 + 변호사 + TA(Securitize) | 온보딩 pre-flight(전 판정 사전 실행)·경로의 법적 확인·unrestrict 시 opinion + TA 확인 | §3.9의 실무 규범 — 열쇠 두 개(발행자 동의 + TA 집행) | +| L3 Spot-Check | 게이트(매 거래) + Operator 감사 | ①~⑤ 상시 기계 검사 + 선언 변경 이력의 주기 감사 | §5 무과실(§3.1)·Ralston 기록(§3.8) | + +### 10.2 책임 분배 — 선언이 틀린 채 거래가 흘렀다면 + +원인별로 갈린다. **기재가 처음부터 거짓**(발행자가 보고 지위를 허위 제출): 원천 책임은 L1 발행자 — 온보딩 심사(L2)의 검증 깊이와 A-12 red flag 대응이 venue의 방어선이고, B-03은 형식 정합까지만 책임진다(진실성은 경계 밖 — §3.0.2). **정정 경로 우회로 값이 바뀜**: B-01 버전 검사의 방어 실패 영역 — B-03은 바뀐 값이 형식 모순이면 잡지만(②·④), 형식상 정합한 거짓값은 못 잡는다; 그래서 완화 방향 변경에 근거 등록을 강제하는 ⑤·GOV가 이 시나리오의 실질 방벽이다. **게이트 자체의 오구현**(비영 검사 누락 등): venue 책임 — §7의 회귀 세트(특히 T7·T8)가 그 방지 장치다. + +## §11. (δ) Frontend·Off-chain Operator Layer + +기계 판정형이라도 그 전제(선언의 최초 기재·변경 근거·감사)는 운영이 만든다. B-03의 Operator 층: + +- **온보딩 pre-flight**: 카드 발효 전 B-03 전 판정을 시뮬레이션 — FAIL 상태 카드의 발효를 원천 차단. 경로 태그가 변호사 회신(Q-B1) 대기 중이면, 보수 기본값(확정분만 기재, 미확정 경로는 미기재 = 그 경로 불가)으로 발효하고 회신 도착 시 정정 버전으로 확장한다 — "일단 다 열고 나중에 닫기"의 역방향. +- **정정 버전 워크플로 (선언 필드)**: 강화 방향(경로 축소·기간 연장·flag on) = 통상 트랙(다중서명 + time-lock). 완화 방향(경로 추가·기간 단축·flag off) = 근거 선행 트랙 — 법적 근거 문서(보고 지위 전환 증빙·opinion letter + TA 확인)의 해시 등록이 승인 조건이며, 등록 없는 완화 신청은 거버넌스에서 반려된다(런타임 이중 방벽은 ②·④·⑤). +- **unrestrict 전환 절차**: §3.9의 두 열쇠를 워크플로로 — ① 발행자 counsel opinion 수령·검토, ② TA(Securitize) 확인 서명, ③ 둘의 해시를 unrestrictBasisRef로 담은 정정 버전 상정, ④ 승인·발효. 근거 문서의 최소 형식·서명 요건은 OD-B03-2 확정 후 이 절차서에 반영. +- **대시보드**: 자산별 선언 블록 스냅샷·최근 변경 이력(방향 표시: 강화/완화)·REVIEW 큐 잔량(④b 과잉 선언 등)·Q-B1 대기 자산 목록(경로 미확정분). +- **보존·export**: B03Check 이벤트(선언 해시 포함)·선언 변경 이력·근거 문서 해시를 B-01의 보존 체계(≥ 3년, 버전 사슬 = 존속기간)에 실어 export — 감독 검사 시 "그 거래 시점의 legend"를 바이트 단위로 재구성 가능해야 한다(§3.8). +- **매수인 노출 문구 관리**: §6.4의 단일 문구 유지 — 코드별 세부를 노출하는 프런트 변경은 우회 지도 제공이므로 금지 항목으로 명문화. + + +## §12. Open Issues — 변호사 follow-up 대상 + +| # | 질문(무엇을 결정해야 하나) | 왜 필요한가 | Priority | 해소 경로(권고) | +| --- | --- | --- | --- | --- | +| OD-B03-1 | **legendRef의 대상·직렬화 규격** — 무엇의 해시인가(청약 문서 제한 조항 발췌 vs 전문 vs 별도 legend 문서), canonical 직렬화 규칙은 무엇인가 | 502(d)(3) "referring to" 축의 이행 방식 — 규격 없이는 같은 문서가 다른 해시를 낳아 인용 검증이 불안정 (B-01 OD-B01-1 canonical 규격과 공유) | ⚠ 즉시 | 개발팀 규격 결정 + 변호사의 인용 충분성 확인 | +| OD-B03-2 | **unrestrictBasisRef의 최소 요건** — opinion letter의 형식·서명 주체(발행자 counsel 특정)·TA 확인의 형태(서명·서면)·둘의 결합 방식 | 판정 ⑤가 존재·사슬 소속만 보므로, 실질 충분성은 등록 시점 심사가 전담 — 그 심사 기준이 미확정이면 ⑤가 형식만 남은 문이 된다 | 높음 | 변호사 위임 (§3.9 실무 규범의 문서 요건화) + Securitize 협의 | +| OD-B03-3 | **VALID_PATHS enum의 확정** — Rule144 · Section4a7 외에 Rule144A·§4(a)(1)·Reg S 등을 유효 집합에 둘 것인가 | 판정 ③a의 소속 검사 기준 — C-00의 경로 분기 목록과 1:1이어야 하며, 본 자산의 열림 여부(Q-B1)와 별개로 시스템 유효 집합 자체의 범위 결정 | 높음 | C-00 확정과 동기 (변호사 회신 Q-B1 합류) | +| OD-B03-4 | **reportingStatus 전환 절차** — 비보고 → 보고 전환 시 90일 계속 조건의 기산·확인 방법, 기간 태그 12 → 6 완화의 정정 트리거·증빙 | §3.5의 상수화 보수 조건 중 "보고 → 6" 방향의 안전장치 — 전환 시점 오판이면 법정 기간 미달 매도가 열린다 | 높음 | 변호사 위임 (증빙 요건) + Operator 절차서 | +| OD-B03-5 | **§4(a)(7) 정보요건의 카드 기재 범위** — (d)(3) 정보 패키지의 가용성·최신성을 카드 태그로 둘 것인가, 아니면 전부 C-00 런타임·off-chain 절차로 둘 것인가 | (d)(3)의 "reasonably current" 항목들은 시점 의존이라 자산 상수화가 부적합할 수 있음 — 태그화하면 신선도 규율(B-01 ⑤) 편입 필요 | 중간 | 설계 결정 + C-00 문서와 경계 확정 (Q-B1 연동) | +| OD-B03-6 | **lot 단위 unrestrict의 표현** — Rule 144 출구를 통과한 분량(거래 단위)과 잔여 분량의 지위 차등을 표현할 필요가 있는가; 자산(class) 레벨 flag의 한계 대응 | Prelim Note 3항의 거래-단위 성질(§3.7) — 현행 보수 기본값(시장 내 전량 restricted)으로 충분한지, 출구 통과분의 재유입 시나리오가 있는지 | 중간 | 설계 결정 (보수 기본값 유지 권고) + 재유입 시나리오의 변호사 확인 | +| OD-B03-7 | **강화 방향 REVIEW 항목의 처리 기준** — ④b 과잉 선언(비보고 + currentInfoRequired) 등의 정리 시한·정정 강제 여부 | 차단 아닌 위생 항목의 방치가 카드 신뢰도를 갉음 — 다만 과잉 규율은 운영 부담 | 낮음 | Operator 운영 기준 (Decipher 자체) | + +## §13. 파일명 규칙 (Naming Convention) + +Decipher Element / Recipe 산출물 명명 규칙: + +- **Element:** B-XX_부품이름.md (예: B-03_transfer-restriction-metadata.md) +- **Recipe:** R-XX_Recipe이름.md (예: R2_resale.md) + +Element 부품 ID 체계(앞글자 = 카테고리): + +| 앞글자 | 카테고리 | +| --- | --- | +| A | 신원·자격 (매수인 측) | +| B | 자산·기술 메타 ← 본 부품(B-03)이 여기 | +| C | 거래 경로·시점 | +| D | 집계·누적 | +| E | 발행자 측 | +| F | 행위·운영 | + +본 부품: **B-03 = "자산·기술 메타 카테고리의 3번 부품"** — 자산 메타 계층의 제한 표시 담당. 같은 계층의 B-01(그릇)·B-02(기계)·B-04(엔진)와 나란히 선다. + +파일명 규칙 (Naming Convention) + +- Element: B-03_transfer-restriction-metadata.md · 위치 산출물/elements/ +- 빌드 산출: 동명 .docx(pandoc + CJK 패치). 도표 2종 임베드 — B-03_fig30.png(§3.0 법조문 관계 흐름) · B-03_fig50.png(§5.0 판정 로직 흐름). + +— 이하 부록 A~D는 A-13 양식엔 대응 슬롯이 없는 B-03 고유 내용으로 보존한다. — + +## 부록 A — 관련 조문·URL 빠른참조 + +| 조문 | 인용 | 1차 출처 | +| --- | --- | --- | +| Securities Act §5 | 15 U.S.C. §77e(a)·(c) | uscode.house.gov | +| Securities Act §4(a)(7)·(d)·(e) | 15 U.S.C. §77d(a)(7)·(d)·(e) | uscode.house.gov | +| Rule 502(b)(2)(vii)·(d) | 17 C.F.R. §230.502 | ecfr.gov | +| Rule 144 Preliminary Note·(a)(3)·(b)(1)·(d)(1) | 17 C.F.R. §230.144 | ecfr.gov | +| 입증책임 판례 | SEC v. Ralston Purina Co., 346 U.S. 119, 126 (1953) | govinfo.gov | +| legend 제거 실무 | SEC, "Rule 144: Selling Restricted and Control Securities" | sec.gov | + +인용 현행성: eCFR Title 17은 2026-07-01 기준(최종 개정 반영 2026-06-25), U.S. Code는 2026-06-05 시행 법률 기준 — 전 조문 2026-07-07 접속·문자 대조. + +## 부록 B — BUIDL-like 적용 노트 + +테스트 토큰(ERC-3643 모델링 전제)의 카드에서 B-03이 실제로 지키는 것: ① **flag = true의 사실 기재성** — 506(c) 발행분의 restricted 지위는 144(a)(3)(ii) 문언이므로, 어떤 경로로든 false가 실리면 ②가 즉시 차단(이 자산에서 STATUS_CONFLICT는 사실상 카드 침해 신호다), ② **경로 태그의 Q-B1 동기화** — Rule 144 vs §4(a)(7)의 확정 전에는 보수 기재(확정분만)로 발효하고, 회신이 어느 쪽이든 유효 enum 안의 비영 집합으로 실리는 것만 보증(경로의 타당성 자체는 C-00·변호사), ③ **비보고 지위와 12개월의 결속** — 발행체가 Exchange Act 보고 밖이라는 카드 기재가 유지되는 한 기간 태그는 12로 고정되며, 6으로의 완화는 보고 지위 전환 증빙(OD-B03-4)이 등록된 정정 버전으로만, ④ **legendRef의 실전 앵커** — Securitize 관리 청약 문서의 이전제한 조항 해시(규격은 OD-B03-1 확정 후). 실제 BUIDL의 발행 표준·운영 조건은 단정하지 않는다 — B-03은 어느 쪽으로 확정되든 그 확정값이 법정 형식으로 카드에 실리는 것만 보증한다. + +## 부록 C — 용어·경계 정정 노트 + +- **선언 ≠ 기계 ≠ 그릇.** 제한의 선언(디지털 legend)은 B-03, 집행 기계는 B-02, 카드 그릇의 무결성은 B-01 — 세 부품이 같은 자산의 다른 층을 본다. 어느 하나를 다른 하나로 흡수하는 리팩터링은 각자의 회귀 케이스(특히 §7 T7)를 깨뜨린다. +- **선언 ≠ 소비.** B-03은 태그의 법정 정합을 보증할 뿐 태그로 거래를 판정하지 않는다 — 경로 성립은 C-00, 기간 경과는 C-01. "B-03이 보유기간을 검사한다"는 서술은 오류다(그건 C-01의 now − acquiredAt 계산). +- **flag = true는 선택이 아니라 기재다.** 506(c) 발행분에서 restricted 지위는 발행자 재량이 아니라 144(a)(3)(ii)의 문언 — "발행자가 제한을 걸었다"가 아니라 "법이 건 제한을 카드가 옮겨 적었다"로 읽는다. +- **방향 규칙은 비대칭이다.** 완화 방향만 차단, 강화 방향은 통과(④b 과잉 선언만 REVIEW) — 대칭 검사로 구현하면 적법한 보수 설정(reporting + 12)까지 막는다(§7 T4-B). +- **∅은 무모순이지만 미완비다.** B-01 INV-3(⊆)은 빈 경로를 통과시키고, B-03 G3a(≠ ∅)가 잡는다 — 두 부등호의 분업을 지우면 빈 선언 구멍이 열린다(§7 T7). +- **90일 조건은 매도 시점 문언이다.** 카드 상수(reportingStatus)로의 접힘은 보수 방향에서만 무조건 안전 — "보고 → 6" 방향은 신선도 + 전환 절차(OD-B03-4)가 지탱한다(§3.5·§5.4). +- **출구는 거래 단위다.** Prelim Note 3항의 unrestrict는 그 매도로 넘어간 분량의 사건 — 자산 flag의 false 전환은 예외적·근거 필수 사건이지 시장 내 기본 흐름이 아니다(§3.7·OD-B03-6). +- **⑤는 존재 + 사슬 소속이다.** basisRef의 존재 검사만 구현하면 미승인 참조 우회가 열린다 — 승인 사슬 소속 검사가 본체다(§7 T5). +- **(b)(2)(vii)은 506(b) 조항이다.** 재판매 제한 고지의 이 조항은 506(b) 거래의 비적격 매수인 한정 — 전원 AI인 506(c)-only 자산에 직접 부과된다고 쓰지 않는다(§3.3 유의점 ③). + +## 부록 D — 결론 + +B-03은 "이 자산의 카드에, 법이 요구하는 제한 표시가 온전히 실려 있는가"를 기계로 판정하는 부품이다. 법리 골격은 이렇다 — 미국 증권규제의 기본값은 금지이고(§5), 사모 면제로 태어난 증권에는 restricted라는 지위가 문언으로 붙으며(144(a)(3)(ii)), 그 지위는 증권을 표창하는 문서에 두 요소 — 미등록 사실의 기재, 제한의 명시 또는 인용 — 로 표시되어야 하고(502(d)(3)), 그 표시는 적법한 손바뀜으로도 벗겨지지 않으며(§4(e)(1)(C)), 표시에 담기는 기간·경로의 값은 규칙이 정한 것이고(144(d)(1)·(b)(1)), 표시가 떼어지는 유일한 문은 Rule 144 전 조건 충족의 거래 단위 출구이며(Preliminary Note) 그 문의 열쇠는 발행자 동의와 transfer agent에게 있고(SEC 간행물), 이 전부가 온전했음은 기록으로 증명해야 한다(Ralston). 종이 시대에 읽히기를 기다리던 도장을, 읽지 않고는 지나갈 수 없는 관문으로 옮긴 것 — 그것이 이 부품의 전부이자, permissioned 시장이 legend라는 오래된 장치에 지불하는 새 형식의 성실이다. + +--- + +**변경 이력** + +- [2026-07-07 v1.0] B-03 최초 작성 — A-13 v1 형식. 부품 정의를 "restrictedFlag·tag check"에서 "디지털 legend의 존재·지위 정합·완비·내적 정합·출구 근거 5관문"으로 정밀화: 502(d)(3)의 두 요소(stating / setting forth or referring to) 분해 → 판정 ①·③ 매핑, 144(a)(3)(ii) 문언 대입의 지위 정합(②)·완화-방향-만-차단 규칙 확립, 144(d)(1) 기간 값 집합 {6, 12}·NON_REPORTING ⇒ 12 정합(④)·90일 상수화의 보수 조건 명시, Prelim Note 거래-단위 출구 + SEC 간행물(TA + 발행자 동의)의 unrestrict 근거 검사(⑤) 신설. B-01 INV-3과의 이중 방벽(∅의 무모순/미완비 분업) 명문화 + 회귀 T7 고정, §4(d)(3)(C) class 결속(legalClassId) 편입. 전 조문 1차 출처 verbatim 검증(ecfr.gov 2026-07-01 현행·uscode.house.gov 2026-06-05 기준·sec.gov·govinfo.gov). 거절 코드 6종·테스트 T1~T8(회귀: T4 방향 쌍, T5 사슬 소속, T7 이중 방벽, T8 결측/false 구분) 확정. OD-B03-1~7 등록. 그림 2매(fig30 법조문 흐름·fig50 런타임) Graphviz 렌더. + +문서 끝. + diff --git a/docs/compliance/elements/B-04.md b/docs/compliance/elements/B-04.md new file mode 100644 index 0000000..e66aa1c --- /dev/null +++ b/docs/compliance/elements/B-04.md @@ -0,0 +1,791 @@ +# ELE.B-04_engine-selection + +# B-04 Engine Selection(엔진 선택) — 부품 심층 인수인계 문서 (Walkthrough) + +**이 문서는 무엇인가.** Decipher RWA DEX의 컴플라이언스 부품 중 하나인 엔진 선택 부품(내부 식별자 B-04)을, 미국 증권 재판매 규제를 처음 보는 사람도 이해할 수 있도록 풀어 쓴 인수인계 문서다. 개발자·법무팀·외부 자문 변호사·학회원이 각자 작업의 base로 그대로 쓸 수 있도록 — ① 이 규제가 어디서 왔고 왜 존재하는지, ② 어떤 사실을 입력받아 ③ 어떤 로직으로 PASS/FAIL이 결정되고 ④ 실패하면 어떻게 처리하며 ⑤ 어떤 테스트로 검증하는지를, 기술 요소마다 풀이를 함께 붙여 설명한다. + +**자체완결 원칙.** 이 문서는 다른 내부 문서를 열지 않아도 단독으로 이해되도록 작성했다. 인용은 미국 연방법·연방규칙·SEC 발행문서 등 외부 공식 자료만 사용한다. + +**출처 기준 (Version 1.0, 2026-07-08).** 본 부품의 미국 증권법 인용은 다음 1차 출처를 기준으로 한다 — 15 U.S.C. §77d·§77e·§78c는 uscode.house.gov 현행본(각 페이지 표기 기준 2026-05-29~06-14 시행 법률 반영), 17 CFR §230.144·§230.501·§230.502·§230.506·§242.300은 eCFR 현행본(Title 17, 2026-07-01/07-06 기준 표시·최종 개정 2026-06-25 반영), SEC 채택 release(Release No. 33-8869, 2007-12-06)·staff statement는 sec.gov다. 전 조문은 2026-07-08 접속·문자 대조했다. 제정법 출처는 uscode.house.gov로 통일했으며, govinfo.gov/link/uscode/... 딥링크도 동일한 1차 출처다. + +**테스트 토큰 전제 (중요).** 본 문서는 실제 BlackRock BUIDL의 발행 표준, transfer architecture, 또는 현재 운영 조건을 단정하지 않는다. 본 프로젝트는 BUIDL-like 자산(Rule 506(c) 발행 + ICA §3(c)(7) 펀드 지분)을 ERC-3643 테스트 토큰으로 모델링하여, 체결 엔진 게이팅을 검증하는 것이다. 이하 'BUIDL'·'ERC-3643' 관련 서술은 모두 이 모델링 전제 하의 것이다. + +## §1. 규제 맥락 — 이 부품이 다루는 규제는 어디서 왔는가 (Context First) + +**왜 맥락부터 읽어야 하나.** 이 부품은 한 줄로 말하면 *"이 거래가 이 자산에서, 이 매도인이, 법이 허용하는 방식(엔진)으로 체결되는가"*를 거래 직전에 판정한다. 같은 자산·같은 당사자·같은 수량이라도 **어떤 체결 기계를 타느냐**에 따라 적법과 위법이 갈린다 — affiliate의 매도가 RFQ로 market maker에게 가면 Rule 144가 명시적으로 허용하는 방식이고, 같은 매도가 AMM pool로 흘러가면 어느 법정 방식에도 해당하지 않는다. "무엇을 파는가"(자산 카드, B-01·B-03)와 "누가 사고 파는가"(A계열)만으로는 판정이 완결되지 않고, "**어떻게 파는가**"라는 세 번째 축이 남는 것이다. 이 축이 조문 어디에서 나오는지, 왜 존재하는지를 먼저 깐다. + +### 1.1 재판매 규제 지형에서 "어떻게 파는가"의 자리 + +미국 연방 증권규제의 기본값은 1933년법 §5의 등록의무다 — 등록 없이는 팔지도, 청약하지도 못하며, 이 금지는 발행 한 번이 아니라 **거래 한 건 한 건**에 걸린다. Decipher에 올라오는 BUIDL-like 자산은 Rule 506(c)로 적법하게 발행됐지만, 그 매수인의 2차 재판매는 자기만의 면제가 따로 필요하다. 본 시스템이 쓰는 재판매 면제는 크게 두 갈래다. + +| 재판매 갈래 | 근거 | 면제의 구조 | "어떻게 파는가"에 거는 요건 | +| --- | --- | --- | --- | +| Rule 144 safe harbor | 17 C.F.R. §230.144 (§4(a)(1) 연동) | 매도인이 underwriter가 아님을 의제 | **(f) Manner of sale** — 계열(affiliate) 매도는 ① brokers' transactions ② market maker 직접 거래 ③ riskless principal 세 방식 중 하나여야 한다. 비계열 매도에는 부적용 | +| §4(a)(7) 사적 재판매 | 15 U.S.C. §77d(a)(7)·(d) | 요건 충족 거래 자체를 면제 | **(d)(2) 무권유** — 매도인(과 그 대리인)은 어떤 형태의 general solicitation·general advertising으로도 청약·판매할 수 없다 | + +두 갈래 모두 매도의 **방식**에 요건을 건다는 점이 B-04의 출발점이다. Rule 144 쪽 요건은 사람 축(계열 여부)에 조건부고, §4(a)(7) 쪽 요건은 경로 축(그 경로를 탔는가)에 조건부다. 그리고 두 요건 모두, DEX 위에서는 곧바로 **엔진의 속성**으로 번역된다 — 상대방을 특정해 견적을 받는 RFQ인가, 전체 멤버십에 주문을 게시하는 오더북인가, 불특정 상대(pool)에 상시 노출되는 AMM인가. + +**쉽게 말하면:** 오프라인 세계에서 이 요건들은 "브로커 창구로 팔아라 / 마켓메이커에게 직접 팔아라 / 광고하며 팔지 마라"라는 절차 규범이었다. DEX에서는 브로커 창구도 광고 매체도 없는 대신 체결 엔진이 그 자리를 차지한다. 그래서 매도 방식 요건은 코드 세계에서 "**이 자산·이 거래에 어떤 엔진이 허용되는가**"라는 집합 판정으로 원자화되고, 그 판정기가 B-04다. + +### 1.2 왜 이 규제가 존재하는가 — underwriter 사슬 책임과 분매(distribution) 통제 + +매도 방식 요건은 진공에서 나온 절차 취향이 아니다. 1933년법의 뼈대인 **§2(a)(11) underwriter 정의**에서 연역된다. 등록 없는 공개 분매를 막으려는 의회의 설계는 "발행인 → 중간자 → 대중"으로 흐르는 사슬의 **모든 고리**를 underwriter로 포섭하는 것이었고, 개인 투자자라도 그 사슬의 고리로 행동하면 underwriter가 된다. 문제는 취득 시점의 "분매 의도"라는 심리 상태를 외부에서 판별할 수 없다는 것 — 그래서 SEC는 1972년 Rule 144를 채택해 객관적 기준(보유기간·물량·공시·방식·신고)을 충족한 매도를 underwriter 비해당으로 의제하는 safe harbor를 만들었다. + +그중 매도 방식 요건(f)·(g)의 논리는 이렇다: **계열의 매도는 구조상 발행인의 분매와 가장 닮았으므로, 분매가 아니라는 외형을 방식 자체로 담보하라.** 구체적으로 ① 매도인이 스스로 매수 주문을 끌어모으지 못하게 하고(무권유), ② 거래를 시장 전문 중개자 — 매수자를 "찾아 나서지 않는" broker, 또는 상시 호가로 이미 시장에 서 있는 market maker — 의 손을 거치게 한다. SEC는 2007년 개정 채택문(Release 33-8869)에서 이 구조의 존재 이유를 직접 말한다 — 브로커는 "as financial intermediaries, brokers serve an important function as gatekeepers for promoting compliance with Rule 144"이며, 지분증권에서 이 요건을 없애면 "would lead to abuse"라고. + +이 요건의 연혁이 곧 B-04의 세 갈래 지도다. 1972년 원형은 brokers' transactions 한 방식이었고, **1978년 개정(Release 33-5979)이 market maker 직접 거래 갈래를 신설**했으며, **2007년 개정(Release 33-8869)이 riskless principal 갈래를 추가**하고 broker의 ATS 호가 게시를 무권유의 예외로 편입했다((g)(3)(iv)). 같은 2007년 개정은 **비계열 매도에서 방식 요건을 전면 폐지**했다 — "most abuses in sales of unregistered securities involve affiliates of issuers"라는 판단에서다. 요컨대 매도 방식 규제는 시대의 체결 인프라(브로커 창구 → 마켓메이커 → ATS)를 따라 갱신되어 온, "계열 분매 차단"이라는 단일 목적의 장치다. + +§4(a)(7) 쪽 무권유 요건은 계보가 다르다. 2015년 FAST Act가 신설한 이 재판매 면제는 이른바 "§4(a)(1½)" 관행을 성문화한 것으로, 매수인 전원 AI + 매도인 측 무권유 + 정보 제공을 조건으로 사적 재판매를 열어 준다. 여기서 무권유는 브로커 경유를 요구하지 않는 대신 **판매의 사적 성격 자체**를 지키는 장치다 — 발행 국면의 Rule 502(c)와 같은 문법("any form of general solicitation or general advertising")을 쓴다. 발행 쪽에서는 2012년 JOBS Act가 Rule 506(c)로 일반청약을 열어 주었지만(§77d(b)), **재판매 쪽 §4(a)(7)은 그 완화를 물려받지 않았다** — 발행은 시끄럽게 해도 되지만 재판매는 조용해야 하는 비대칭이 조문 구조에 박혀 있다. + +### 1.3 세 엔진의 법적 프로필 — RFQ · 오더북 · AMM + +Decipher의 체결 계층은 세 엔진으로 구성된다(Manifest의 supportedEngines bitset이 이 셋을 원소로 갖는다). 각 엔진이 위 두 요건 지도에서 어디에 서는지를 먼저 정성적으로 잡아 둔다 — 조문 단위 정밀 판정은 §3, 판정식은 §5. + +| 엔진 | 체결 구조 | Rule 144(f) 계열 매도방식 축 | §4(d)(2) 무권유 축 | 구조 특이점 | +| --- | --- | --- | --- | --- | +| RFQ (Request-for-Quote) | 매도인이 특정 상대(들)에게 견적 요청 → 양자 직접 결제(1-hop) | 상대방이 §3(a)(38) market maker면 (f)(1)(ii) "transactions directly with a market maker"에 문언 그대로 부합 | 특정·사전검증 상대에 대한 표적 요청 — 일반권유 아님(법률의견서 Q4 결론과 정합) | 상대방 자격(MM claim)이 판정 입력이 됨 | +| 오더북 (OB) | 주문을 멤버십 전체에 게시 → 매칭 엔진이 교차(1-hop) | (f)(1)(i) brokers' transactions는 등록 broker의 실행을 전제 — 현행 아키텍처에 broker가 없어 갈래 자체가 닫혀 있고, (g)(3)(iv)의 ATS 호가 안전항도 주체가 broker다. 매도인 본인의 게시는 (f)(2)(i) 무권유와 긴장 | 폐쇄 멤버십(전원 사전검증 AI) 내부 게시의 성격 미확정 — 보수 기본값은 §4(a)(7) 경로에서 배제 | 계열 매도 보수 차단의 중심 사례 | +| AMM (pool) | 매도인 → pool → 매수인의 2-hop; pool이 상대방 | pool은 사람도 dealer도 아니므로 §3(a)(38) market maker 전제 자체가 성립 불가 — 세 방식 어디에도 해당 없음 | pool의 상시 양방향 노출은 표적 요청의 반대극 | 매수인 식별 문제(§3(c)(7) 자산에서 취득자가 누구인가) — 자산 레벨 선언 단계에서 걸러짐 | + +세 프로필의 요점은 이것이다 — **엔진 선택은 UX 취향이 아니라 법률 요건의 기계 번역**이며, 같은 자산 안에서도 거래 유형(계열 여부·경로)에 따라 허용 집합이 달라진다. 그래서 B-04는 두 층으로 설계된다: 자산 레벨의 선언(이 자산이 시스템에서 열어 둔 엔진 집합)과 거래 레벨의 overlay(이 거래의 사실관계가 그 집합을 추가로 좁히는가). + +### 1.4 Decipher 시스템에서 왜 중요한가 — Existential Risk + +이제 우리 시스템으로 내려오자. "김 부장 시나리오"가 이 부품의 존재 이유를 압축한다 — BlackRock 임원(= affiliate)인 김 부장이 BUIDL-like $100K를 매도한다. 이 한 건에 발행 유지(R1)·재판매(R2)·펀드(R3)·행위(R4)의 Recipe들이 누적 활성화되고, 그 R2 축 안에서 **엔진 적합성 검증**이 돈다: affiliate 매도이므로 AMM은 차단되고, RFQ는 Rule 144가 허용하는 "market maker 직접 매도"와 정확히 부합한다. 엔진 선택 자체가 법적 판단인 것이다. + +이 판정이 실패하면 어디에 닿는가. Rule 144는 "all of the conditions"의 누적 충족을 요구한다((b)(2)) — 계열 매도가 (f) 밖의 방식으로 체결되면 그 거래는 safe harbor를 잃고, 매도인은 §2(a)(11) underwriter 취급의 사정권으로, 거래는 §5의 사정권으로 들어간다. §5는 고의·과실을 묻지 않는 무과실 조항이고, 면제의 입증책임은 면제를 주장하는 쪽에 있다. §4(a)(7) 경로도 마찬가지다 — 무권유 요건이 깨지면 그 거래의 면제가 통째로 깨진다. + +엔진 오선택 → 방식 요건 위반 → 해당 재판매의 면제 상실 + → 그 매도 거래가 §5 미등록 판매 사정권 진입 (무과실) + → 매도인 rescission 노출 · 사슬 오염(하류 재판매의 지위 불안) + → venue가 위반 거래를 반복 체결한 기록 = 감독 대응·BD/ATS 성격규명 국면에서의 최악의 사실관계 + +마지막 줄이 B-04를 "있으면 좋은" 필터가 아니라 존립(existential) 안전장치로 만든다. Decipher의 venue 층 성격규명(BD/ATS)은 현재 SEC rulemaking이 진행 중인 미해결 영역인데, 그 국면에서 "이 플랫폼은 계열 분매·권유성 재판매를 엔진 차원에서 구조적으로 차단해 왔다"는 기록과 "차단 장치 없이 반복 체결해 왔다"는 기록은 방어 논거의 무게가 다르다. 또한 R1이 매 거래에 부착되어 발행 framework 유지를 확인하는 구조상, 엔진 게이트는 발행 자산의 유통 전 구간에서 "조용한 사적 유통"이라는 전제를 지키는 상설 장치다. + +**쉽게 말하면:** B-04가 실수로 계열 매도를 AMM에 태우면, 잘못되는 것은 그 거래 하나가 아니다. 그 매도인의 면제, 그 물량을 받은 하류의 지위, 그리고 venue의 규제 방어 서사가 함께 흔들린다. 그래서 이 부품의 설계 철학은 시종 "보수적으로 — 법적 부합이 확정된 엔진만 열고, 미확정 조합은 막은 채 변호사 확인으로 연다"이다. + +## §2. 메타 정보 (Internal Identifier Box) + +아래는 Decipher 내부 PM 규약상의 식별자·분류값을 한곳에 모은 박스다. 본문에서는 이 코드들을 단독으로 쓰지 않고, "본 부품"·"엔진 선택 부품" 같은 자연어로 부른다. 코드는 시스템 추적용으로만 여기 둔다. + +| 항목 | 값 | 한 줄 풀이 | +| --- | --- | --- | +| 부품 이름 | 엔진 선택 (Engine Selection) | 이 거래가 허용된 체결 방식으로 도는지 확인 | +| 검사 대상 | ① 자산 카드의 supportedEngines 선언(비영·유효집합 소속·구조 전제) ② 거래의 엔진 식별 ③ 선언 집합 소속 ④ 경로 overlay(§4(a)(7) ⇒ 무권유 부합 엔진) ⑤ 계열 overlay(affiliate ⇒ 144(f) 부합 엔진 + 상대방 MM claim) | "이 자산에서, 이 거래가, 이 엔진을 타도 되나" | +| Internal ID | B-04 (Decipher PM 규약) | 부품 일련번호 | +| 검증 방식 | 기계 판정 (Pattern A) — 집합 소속·함의 검사. 상대방 MM 자격의 실질 판단만 off-chain claim으로 국소 위임 | 게이트는 결정론, 자격 판단은 검증기관 | +| Timing | pre-trade (거래 체결 직전) + 상장 시점 카드 검사 | 거래가 일어나기 전에 막는다 | +| Stateful 여부 | STATELESS (Element 한정) | 게이트는 카드 상수·거래 컨텍스트·flag의 현재 스냅샷만 읽는다. 선언·상수의 갱신은 정정 버전·거버넌스 경로(거래 외)로만 일어난다 | +| 주 활성화 Recipe | R1 (Reg D 506(c) Issuance) · R2 (§4(a)(7)·Rule 144 Resale) — 필수 attach | 발행·재판매 거래마다 명시 검사 | +| Cumulative Recipe | R3·R4는 매트릭스상 비부착 — 펀드 자산의 거래도 R1·R2 경유로 B-04에 도달(중복 부착 불요, §8.4) | 자산 메타 계열의 공통 부착 원칙 | +| Cascade Element | A-06(affiliate flag 공급) · C-00(재판매 경로 공급) · A-11(MM claim 만료) · C-09(매도방식 실체 — forward) · B-02(엔진별 프로브 위상) | 엔진 판정에 얹히거나 이어지는 검사들 | +| 성숙도 | 완료 (본 문서로 Spec 확정 — "확인만" 단계의 기존 정리를 조문 대조로 승격) | R1·R2 공통, 데모 필수 | +| 파일·위치 | B-04_engine-selection.md · 산출물/elements/ | 산출물 경로 | + + +## §3. ① 법적 근거 (Layer 1 → 2 → 3) + +**읽는 법.** 법적 근거는 세 겹이다 — Layer 1(조문)은 의회가 만든 법률 텍스트(statute), Layer 2(규칙)는 SEC가 그것을 실무 수준으로 구체화한 연방규칙(rule), Layer 3(해석)은 채택 release·staff statement가 모호한 부분을 메운 해석이다. 아래 §3.0.2 표의 **종류** 칸이 그대로 Layer에 대응한다 — Statute = Layer 1, SEC Rule = Layer 2, SEC Release·SEC Staff = Layer 3. 본 절은 조문이 작동하는 **논리 흐름 순서**로 배열돼 §3.1~§3.16 번호를 유지하며, 각 항목이 어느 Layer인지는 표의 종류 칸으로 확인한다. + +### 3.0 법조문 관계 플로우차트 (개발자용) + +아래 그림은 세 Layer의 조문·규칙이 B-04 판정에서 어떻게 연결되는지를 하나의 큰 흐름으로 정리한 것이다 — §5 등록의무 기본값에서 출발해, 발행 국면(506(c) 일반청약 허용)과 재판매 국면(Rule 144 / §4(a)(7) 두 갈래)으로 갈라지고, 각 갈래가 매도 방식에 거는 요건 — 계열이면 (f)(1)의 3방식, §4(a)(7)이면 (d)(2)의 무권유 — 이 세 엔진(RFQ·오더북·AMM)에 어떻게 대응되는지를 보여준다. 각 조항의 상세는 §3.1~§3.14. + +![](B-04_fig30.png) + +*그림 3.0 — 법조문 관계 흐름: §5 기본값 → 재판매 두 갈래의 방식 요건 → 엔진 매핑 (개발자용)* + +**범례.** + +- 파랑 = 핵심(Direct: 144(b)(2)·(f)(1) 3방식, §3(a)(38) market maker, §4(d)(2) 무권유, 144(g)) + +- 회색 = 판정·분기 노드 + +- 초록 = PASS·부합 경로(비계열의 방식 자유, RFQ-to-MM, 폐쇄 RFQ의 무권유 부합, 506(c) 발행측 카브아웃) + +- 빨강 = FAIL(계열 AMM, pool의 §3(a)(38) 전제 탈락, 미선언 엔진) + +- 주황 = 조건부·참고·미확정(오더북의 (g)(3)(iv) 조건부 편입, 폐쇄 멤버십 게시의 §4(d)(2) 성격, §77d(c) 플랫폼 조항, Reg ATS·CUI 성명) + +### 3.0.1 실제 BUIDL에 어떻게 적용되나 + +§3.0이 일반 조문 흐름이라면, 이 절은 BUIDL-like 테스트 토큰에 B-04가 어떻게 걸리는지를 보여준다. **(재확인) 본 서술은 실제 BlackRock BUIDL의 발행 표준·transfer architecture·현재 운영 조건을 단정하지 않는다.** + +**현실 선례 — RFQ가 왜 기본 엔진인가.** 현실의 BUIDL 2차 유통은 whitelist된 참여자 간 P2P 및 Securitize 계열이 관여하는 RFQ형 메커니즘으로 공개돼 있다 — 익명 불특정 다수에 대한 상시 자동 체결(AMM)이 아니라, 검증된 상대방과의 견적 기반 직접 거래다. 이 선택은 우연이 아니다: §3(c)(7) 펀드 지분의 "조용한 사적 유통" 요구(무권유·매수인 전원 자격 확인)와 계열 매도의 방식 요건이, 상대방을 특정하고 자격을 확인한 뒤 체결하는 RFQ 구조와 정확히 맞물리기 때문이다. + +**Decipher 모델의 카드 기재.** 본 프로젝트의 BUIDL-like 카드는 supportedEngines = {RFQ, OB}로 선언한다(AMM 미선언). 미선언의 이유는 두 겹이다 — ① 취득자 식별: §3(c)(7) 자산은 모든 취득자가 취득 시점에 QP여야 하는데, pool 매도에서 "취득자"가 누구인지(pool 자체인지, LP 집합인지)의 법적 정리가 미확정이다. ② 계열·경로 overlay와의 상호작용 이전에, 자산 성격 자체가 상시 양방향 노출 구조와 긴장한다. 오더북은 선언에는 포함하되, 계열 매도(§3.4)와 §4(a)(7) 경로(§3.8)에서는 거래 레벨 overlay가 보수적으로 차단한다 — "선언된 엔진"과 "이 거래에 허용된 엔진"은 다른 물음이다. + +**김 부장 시나리오의 좌표.** 임원(affiliate)의 $100K 매도가 RFQ로 기관 market maker에게 가면: 선언 집합 소속(RFQ ∈ {RFQ, OB}) 통과 + 계열 overlay(RFQ ∈ AFFILIATE_ENGINE_SET) 통과 + 상대방 MM claim 확인 통과 → B-04 PASS. 같은 매도가 오더북 게시로 가면 계열 overlay에서 차단, AMM으로 가면 선언 소속에서 이미 차단된다. 매도방식의 실체 충족(브로커 개입·수수료 성격 등 §3.4의 남는 축)은 C-09가 이어받는다. + +### 3.0.2 조문 순서·중요성 한눈에 보기 (법 리스트) + +아래 두 표가 §3의 지도다. **표 1**(Authority)은 각 근거가 어떤 종류(=Layer)이고 무슨 내용이며 B-04에 어떻게 닿는지를, **표 2**(순서·중요성)는 아래 §3.1~§3.16 소단원의 읽는 순서(논리 흐름)와 중요성(B-04가 실제로 그걸로 판정하는가)을 보여준다. 순서는 중요도순이 아니라 흐름순이다. 제정법 출처는 uscode.house.gov로 통일했다. + +**표 1 — Authority(근거 목록)** + +| 종류 | Authority | 내용 | B-04 관련성 | Direct/Supporting | Official URL | +| --- | --- | --- | --- | --- | --- | +| Statute | Securities Act §5 · 15 U.S.C. §77e(a)·(c) | 등록의무 기본값(무과실) | 방식 요건 위반이 도착하는 종착점 — fail-closed 설계 근거 | Background | uscode.house.gov | +| Statute | Securities Act §2(a)(11) · 15 U.S.C. §77b(a)(11) | underwriter 정의(사슬 책임, issuer에 affiliate 포함) | 방식 요건의 존재 이유 — 계열 분매 차단 | Supporting | uscode.house.gov (Rule 144 Prelim. Note 경유 인용) | +| SEC Rule | Rule 144(b)(1)·(b)(2) · 17 C.F.R. §230.144(b) | 비계열/계열 트랙 — (f)의 인적 적용범위 | overlay 활성 조건(계열이면 "all of the conditions") | Direct | ecfr.gov | +| SEC Rule | Rule 144(f) · §230.144(f) | 매도방식 3갈래 + 매도인 금지행위 + 적용 제외 | 계열 overlay의 판정 본체 | Direct | ecfr.gov | +| Statute | Securities Act §4(a)(4) · 15 U.S.C. §77d(a)(4) | brokers' transactions 면제 | (f)(1)(i) 갈래의 제정법 고리 — broker 부재 시 갈래 폐쇄 | Direct | uscode.house.gov | +| Statute | Exchange Act §3(a)(38)·(a)(5) · 15 U.S.C. §78c(a)(38)·(a)(5) | market maker·dealer 정의 | (f)(1)(ii) 갈래의 상대방 요건 → MM claim; AMM pool 배제 논거 | Direct | uscode.house.gov | +| SEC Rule | Rule 144(g) · §230.144(g) | brokers' transactions의 요건화(무권유 + 호가 게시 예외 + reasonable inquiry) | (f)(1)(i) 갈래의 내용; (g)(3)(iv)가 오더북 편입의 유일 통로 | Direct(조건부) | ecfr.gov | +| Statute | Securities Act §4(a)(7)·§4(d)·§4(e) · 15 U.S.C. §77d(a)(7)·(d)·(e) | 사적 재판매 면제 — AI 요건·무권유·정보요건·restricted 의제 | 경로 overlay의 판정 본체((d)(2)) | Direct | uscode.house.gov | +| SEC Rule | Rule 502(c) · §230.502(c) | general solicitation의 예시적 정의 | (d)(2) 무권유 요건의 내용을 채우는 기준 | Supporting | ecfr.gov | +| SEC Rule | Rule 506(c) · §230.506(c) + Statute §77d(b) | 발행 국면 일반청약 허용 | R1 국면에서 엔진의 권유 성격이 발행면제를 깨지 않는 이유 | Supporting | ecfr.gov · uscode.house.gov | +| Statute | Securities Act §4(c) · 15 U.S.C. §77d(c) | 506 증권 플랫폼의 BD 비등록 조건(무보수 등) | venue 층 경계의 제정법 좌표 — 수수료 venue 비적용 | Background | uscode.house.gov | +| SEC Rule | Reg ATS Rule 300(a)·(e) · 17 C.F.R. §242.300 | ATS·Order 정의 | (g)(3)(iv)의 참조어; "주문 게시"의 규제 문법 | Supporting | ecfr.gov | +| SEC Release | Release No. 33-8869 (2007-12-06) · 72 FR 71546 | 2007 개정 채택문 — gatekeeper 논거·riskless principal·ATS 호가·비계열 폐지 | (f)·(g) 현행 구조의 취지·주체 확정(호가 게시의 주어 = broker) | Supporting | sec.gov | +| SEC Staff | Staff Statement, File No. 4-894 (2026-04-13) | 비수탁 인터페이스의 §15 비등록 견해 — 체결·결제 venue 배제 | venue 층 경계(B-04 밖) — 엔진 층과 venue 층의 분리 근거 | Background | sec.gov | + +**표 2 — 조문 순서·중요성 한눈에 보기** + +| 순서 | 조문 | 중요성 | B-04가 그걸로 하는 일 | +| --- | --- | --- | --- | +| §3.1 | Securities Act §5 — 등록의무 기본값 | 배경 | 안 함 — fail-closed 설계의 종착점 | +| §3.2 | §2(a)(11) — underwriter 사슬 책임 | 보조 | 안 함 — 방식 요건의 존재 이유 | +| §3.3 | Rule 144(b)(1)·(b)(2) — 인적 적용범위 | 핵심 | 계열 overlay의 활성 조건 판독 | +| §3.4 | Rule 144(f) — 매도방식 3갈래 | 핵심 | 계열 매도의 허용 엔진 집합 도출 | +| §3.5 | §4(a)(4) — brokers' transactions 면제 | 핵심(조건부) | (f)(1)(i) 갈래의 개폐 판독(broker 부재 = 폐쇄) | +| §3.6 | §3(a)(38)·(a)(5) — market maker·dealer | 핵심 | RFQ 상대방 요건(MM claim)·AMM pool 배제 | +| §3.7 | Rule 144(g) — 무권유·호가 게시·조사 | 핵심(조건부) | 오더북 편입 조건의 문언 고정((g)(3)(iv)) | +| §3.8 | §4(a)(7)·(d)·(e) — 사적 재판매 | 핵심 | 경로 overlay(무권유 부합 엔진 집합) | +| §3.9 | Rule 502(c) — 일반권유 정의 | 보조 | 무권유 요건의 내용 기준 | +| §3.10 | Rule 506(c) + §77d(b) — 발행측 허용 | 보조 | R1 국면의 비제약 확인 | +| §3.11 | §77d(c) — 506 플랫폼 조항 | 배경 | 안 함 — venue 경계 좌표 | +| §3.12 | Reg ATS Rule 300(a)·(e) | 보조 | (g)(3)(iv) 참조어·주문 문법 | +| §3.13 | Release 33-8869 (Layer 3) | 보조 | 안 함 — 취지·주체 해석 | +| §3.14 | Staff Statement 2026-04-13 (Layer 3) | 배경 | 안 함 — venue 층 분리 | +| §3.15 | Sub-요건 분해 매트릭스 | — | 위 요건을 원자적 검증 단위로 분해 | +| §3.16 | ERC-3643 변환·엔진 선언 필드 총정리 | — | §3.1~§3.14의 필드 매핑을 한 표로 | + +**경계 — 이 부품이 다루지 않는 것.** 아래 조문·쟁점은 같은 거래에 작동하지만 B-04가 아니라 다른 부품·레이어가 책임진다 — 누락이 아니라 소관 분리이며, B-04 안에 끌어다 구현하지 않는다. + +- **affiliate 판정 자체** (Rule 144(a)(1)·Rule 405 control) — A-06 소관. B-04는 A-06의 산출 flag만 소비한다. + +- **재판매 경로의 성립** (Rule 144 조건 충족·§4(a)(7) 요건 전반) — C-00 소관. B-04는 C-00이 확정한 경로 태그만 소비한다. + +- **매도방식의 실체 충족** ((f)(2) 금지행위의 사실 판단, (g)(1)·(2)·(4)의 broker 행위·수수료·reasonable inquiry, riskless principal의 SRO 보고 요건) — C-09 소관(forward-reference). B-04는 엔진 층위의 집합 판정까지만 한다. + +- **물량 한도·Form 144** (144(e)·(h)) — C-08·E-06 소관. 단 (e)(1)(ii)·(h)(3)의 문언이 방식(broker 주문·MM 직접 체결)을 시점 앵커로 쓰므로 §9에서 접점을 고정한다. + +- **venue의 BD/ATS 지위** (Exchange Act §3(a)(1)·(a)(4)·Rule 3b-16·Reg ATS 등록) — Operator·법률의견서(BD-ATS reliance memo Q1) 소관. B-04는 엔진 층과 venue 층을 분리하고, 그 경계의 좌표만 §3.11·§3.14에 둔다. + +### 3.1 Securities Act §5 — 등록의무 기본값 (무과실) [uscode.house.gov] + +- **조항**: Securities Act of 1933 §5(a)·(c), 15 U.S.C. §77e(a)·(c) — uscode.house.gov + +- **핵심 원문**: (a) Unless a registration statement is in effect as to a security, it shall be unlawful for any person, directly or indirectly— (1) to make use of any means or instruments of transportation or communication in interstate commerce or of the mails to sell such security through the use or medium of any prospectus or otherwise; or (2) to carry or cause to be carried through the mails or in interstate commerce, by any means or instruments of transportation, any such security for the purpose of sale or for delivery after sale. [...] (c) It shall be unlawful for any person, directly or indirectly, to make use of any means or instruments of transportation or communication in interstate commerce or of the mails to offer to sell or offer to buy through the use or medium of any prospectus or otherwise any security, unless a registration statement has been filed as to such security, or while the registration statement is the subject of a refusal order or stop order or (prior to the effective date of the registration statement) any public proceeding or examination under section 77h of this title. + +- **한국어**: (a) 어느 증권에 관하여 등록신고서가 효력을 갖고 있지 아니하는 한, 누구든지 직접 또는 간접으로 — (1) 주간통상의 운송·통신 수단 또는 우편을 이용하여 prospectus 그 밖의 수단으로 그 증권을 판매하는 것; 또는 (2) 판매 목적으로 또는 판매 후 인도를 위하여 그 증권을 우편 또는 주간통상으로 운반하거나 운반하게 하는 것은 위법이다. [...] (c) 어느 증권에 관하여 등록신고서가 제출되어 있지 아니하는 한(또는 그 등록신고서가 거부명령·정지명령의 대상이거나 효력 발생 전의 공개 절차·심사 대상인 동안), 누구든지 직접 또는 간접으로 주간통상의 운송·통신 수단 또는 우편을 이용하여 prospectus 그 밖의 수단으로 그 증권의 매도 청약 또는 매수 청약을 하는 것은 위법이다. + +- **쉬운 설명**: 모든 방식 요건의 무게는 이 조문에서 나온다. §5는 발행 한 번이 아니라 거래 한 건 한 건에 걸리고, 고의·과실을 묻지 않는다. 계열 매도가 (f) 밖의 방식으로, 또는 §4(a)(7) 매도가 권유를 수반해 체결되면, 그 재판매의 면제가 무너지고 거래는 이 조문의 사정권으로 들어간다 — 면제의 입증책임은 면제를 주장하는 쪽에 있다. B-04에게 이 조문은 이렇게 읽힌다: **엔진 판정의 실패가 도착하는 곳이 바로 여기이며, 확인 불가면 차단(fail-closed)이 유일한 안전 방향이다.** + +- **PASS/FAIL 반영**: 간접 ✕ — B-04가 §5를 판정하지 않는다. 방식 요건 위반의 법적 종착점으로서 fail-closed 설계 원칙의 근거가 된다. + +- **ERC-3643 변환**: 직접 매핑 없음. Router의 cumulative AND(하나라도 FAIL이면 revert)와 엔진 게이트의 pre-trade 배치가 이 조문의 "기본값 = 금지" 구조를 코드에 옮긴 것이다. + +### 3.2 Securities Act §2(a)(11) — underwriter 사슬 책임: 방식 요건의 존재 이유 [uscode.house.gov · ecfr.gov] + +- **조항**: Securities Act §2(a)(11), 15 U.S.C. §77b(a)(11) — uscode.house.gov. 본 블록의 원문 인용은 Rule 144 Preliminary Note(17 C.F.R. §230.144, ecfr.gov)의 조문 전재와 Release 33-8869 n.10의 후단 전재를 사용한다(두 인용 모두 1차 출처의 자체 전재). + +- **핵심 원문**: The term "underwriter" is broadly defined in Section 2(a)(11) of the Securities Act to mean any person who has purchased from an issuer with a view to, or offers or sells for an issuer in connection with, the distribution of any security, or participates, or has a direct or indirect participation in any such undertaking, or participates or has a participation in the direct or indirect underwriting of any such undertaking. [Rule 144 Preliminary Note] / Section 2(a)(11) states that the term "issuer" shall include, in addition to an issuer, any person directly or indirectly controlling or controlled by the issuer, or any person under direct or indirect common control with the issuer. [Release 33-8869 n.10] + +- **한국어**: "underwriter"란 이 법에서 넓게 정의되어 — 발행인으로부터 distribution을 목적으로(with a view to) 매수한 자, 발행인을 위하여 distribution과 관련하여 청약·판매하는 자, 또는 그러한 undertaking에 직접·간접으로 참여하거나 그 직접·간접 인수(underwriting)에 참여하는 모든 자를 뜻한다. / §2(a)(11)은 이 조항에서 "issuer"에 발행인 외에도 발행인을 직접·간접으로 지배하거나 발행인에 의하여 지배되거나 발행인과 공통 지배 하에 있는 모든 자가 포함된다고 규정한다. + +- **쉬운 설명**: 방식 요건이 왜 계열에게만 걸리는지의 뿌리다. 후단 문장 때문에 계열(affiliate)의 매도는 구조상 "issuer의 판매"와 같은 취급 위험을 지고, 계열 물량을 받아 파는 자·계열을 위해 파는 자까지 underwriter 사슬에 포섭될 수 있다. Rule 144는 이 정의에서 빠져나오는 객관 기준을 제공하는 safe harbor이고, 그중 (f)·(g)는 "분매처럼 보이지 않는 방식"을 외형으로 담보하는 축이다 — 매도인이 매수자를 끌어모으지 않고, 시장 전문 중개자의 손을 거치게 한다. 엔진 게이트는 이 외형 담보를 코드로 옮긴 것이다. + +- **PASS/FAIL 반영**: 간접 ✕ — B-04가 underwriter 여부를 판정하지 않는다. 계열 overlay(§3.4)의 목적 규범. + +- **ERC-3643 변환**: 직접 매핑 없음. sellerIsAffiliate flag(A-06 산출)가 이 조문의 "issuer에 affiliate 포함" 구조를 거래 컨텍스트로 옮긴 값이다. + +### 3.3 Rule 144(b)(1)·(b)(2) — 비계열/계열 트랙: (f)의 인적 적용범위 [ecfr.gov] + +- **조항**: 17 C.F.R. §230.144(b)(1)·(b)(2) — ecfr.gov (Title 17, 2026-07-01 기준 현행) + +- **핵심 원문**: (b) Conditions to be met. Subject to paragraph (i) of this section, the following conditions must be met: (1) Non-affiliates. (i) If the issuer of the securities is, and has been for a period of at least 90 days immediately before the sale, subject to the reporting requirements of section 13 or 15(d) of the Securities Exchange Act of 1934 (the Exchange Act), any person who is not an affiliate of the issuer at the time of the sale, and has not been an affiliate during the preceding three months, who sells restricted securities of the issuer for his or her own account shall be deemed not to be an underwriter of those securities within the meaning of section 2(a)(11) of the Securities Act if all of the conditions of paragraphs (c)(1) and (d) of this section are met. [...] (ii) If the issuer of the securities is not, or has not been for a period of at least 90 days immediately before the sale, subject to the reporting requirements of section 13 or 15(d) of the Exchange Act, any person who is not an affiliate of the issuer at the time of the sale, and has not been an affiliate during the preceding three months, who sells restricted securities of the issuer for his or her own account shall be deemed not to be an underwriter of those securities within the meaning of section 2(a)(11) of the Securities Act if the condition of paragraph (d) of this section is met. (2) Affiliates or persons selling on behalf of affiliates. Any affiliate of the issuer, or any person who was an affiliate at any time during the 90 days immediately before the sale, who sells restricted securities, or any person who sells restricted or any other securities for the account of an affiliate of the issuer of such securities, or any person who sells restricted or any other securities for the account of a person who was an affiliate at any time during the 90 days immediately before the sale, shall be deemed not to be an underwriter of those securities within the meaning of section 2(a)(11) of the Securities Act if all of the conditions of this section are met. + +- **한국어**: (b) 충족할 조건. 본 조 (i)항을 조건으로, 다음 조건이 충족되어야 한다: (1) 비계열자. (i) 발행인이 매도 직전 90일 이상 계속하여 Exchange Act §13/15(d) 보고 의무 대상인 경우 — 매도 시점에 발행인의 affiliate가 아니고 직전 3개월간 affiliate가 아니었던 자가 자기 계산으로 그 발행인의 restricted securities를 매도하는 때에는, (c)(1)[현행 공시]과 (d)[보유기간]의 조건이 모두 충족되면 §2(a)(11)의 underwriter가 아닌 것으로 본다. [...] (ii) 발행인이 그 보고 의무 대상이 아니거나 매도 직전 90일 이상 대상이 아니었던 경우 — 같은 비계열 요건의 매도인은 (d)의 조건만 충족되면 underwriter가 아닌 것으로 본다. (2) 계열자 또는 계열자를 위하여 매도하는 자. 발행인의 affiliate, 매도 직전 90일 중 어느 때라도 affiliate였던 자로서 restricted securities를 매도하는 자, 또는 그러한 자의 계정을 위하여 restricted 또는 그 밖의 증권을 매도하는 모든 자는, **본 section의 모든 조건이 충족되는 경우** §2(a)(11)의 underwriter가 아닌 것으로 본다. + +- **쉬운 설명**: (f)가 누구에게 걸리는지를 정하는 스위치 조문이다. 비계열 트랙(1)의 조건 목록에는 (f)가 **없다** — 비보고 발행자 자산이면 (d) 하나뿐이다(2007년 개정이 비계열 방식 요건을 폐지한 결과, §3.13). 계열 트랙(2)은 "all of the conditions of this section" — (c)·(d)·(e)·(f)·(h) 전부다. 그래서 B-04의 계열 overlay는 A-06의 flag 하나로 켜지고 꺼진다. 유의점 둘. ① (2)의 인적 범위가 넓다 — 현재 계열뿐 아니라 **직전 90일 내 계열이었던 자**, 그리고 그들의 계정을 위해 파는 자까지다. A-06가 이 tail을 flag에 반영하므로 B-04는 flag만 읽으면 되지만, "지금은 사임했으니 자유 매도"라는 구현이 tail을 놓치는 대표 오류임을 회귀로 고정한다(§7 T8). ② (1)·(2)의 구분 기준일 단위가 다르다 — 비계열 자격은 "preceding three months"(직전 3역월), 계열 tail은 "90 days"(직전 90일). 두 창의 판정은 A-06 소관이고, B-04는 그 결과 flag의 소비자다. + +- **PASS/FAIL 반영**: 직접 ○ (활성 조건) — sellerIsAffiliate = true ⇒ 계열 overlay(G⑤) 활성. false ⇒ (f) 축 비적용(G⑤ 스킵). 판정식 자체는 §3.4가 채운다. + +- **ERC-3643 변환**: 입력: txContext.sellerIsAffiliate (A-06 산출, 90일 tail 포함) · txContext.sellsForAffiliateAccount (대리 매도 케이스, A-06/운영 등록). overlay 활성식: affiliateOverlayActive = sellerIsAffiliate ∨ sellsForAffiliateAccount. + +### 3.4 Rule 144(f) — 매도방식 3갈래 + 매도인 금지행위 + 적용 제외 [ecfr.gov] + +- **조항**: 17 C.F.R. §230.144(f)(1)~(3) — ecfr.gov (Title 17, 2026-07-01 기준 현행) + +- **핵심 원문**: (f) Manner of sale. (1) The securities shall be sold in one of the following manners: (i) Brokers' transactions within the meaning of section 4(4) of the Act; (ii) Transactions directly with a market maker, as that term is defined in section 3(a)(38) of the Exchange Act; or (iii) Riskless principal transactions where: (A) The offsetting trades must be executed at the same price (exclusive of an explicitly disclosed markup or markdown, commission equivalent or other fee); (B) The transaction is permitted to be reported as riskless under the rules of a self-regulatory organization; and (C) The requirements of paragraphs (g)(2)(applicable to any markup or markdown, commission equivalent or other fee), (g)(3), and (g)(4) of this section are met. Note to § 230.144(f)(1): A riskless principal transaction means a principal transaction where, after having received from a customer an order to buy, a broker or dealer purchases the security as principal in the market to satisfy the order to buy or, after having received from a customer an order to sell, sells the security as principal to the market to satisfy the order to sell. (2) The person selling the securities shall not: (i) Solicit or arrange for the solicitation of orders to buy the securities in anticipation of or in connection with the transaction; or (ii) Make any payment in connection with the offering or sale of the securities to any person other than the broker or dealer who executes the order to sell the securities. (3) Paragraph (f) of this section shall not apply to: (i) Securities sold for the account of the estate of a deceased person or for the account of a beneficiary of such estate provided the estate or estate beneficiary is not an affiliate of the issuer; or (ii) Debt securities. + +- **한국어**: (f) 매도방식. (1) 증권은 다음 방식 중 하나로 판매되어야 한다: (i) 이 법 section 4(4)의 의미에서의 brokers' transactions; (ii) Exchange Act §3(a)(38)에 정의된 market maker와의 직접 거래; 또는 (iii) 다음 요건의 riskless principal transactions — (A) 상쇄 거래들이 동일 가격으로 체결될 것(명시적으로 공시된 markup·markdown·commission equivalent 그 밖의 fee 제외); (B) 그 거래가 자율규제기구(SRO)의 규칙상 riskless로 보고될 수 있을 것; (C) (g)(2)(markup 등에 적용)·(g)(3)·(g)(4)의 요건이 충족될 것. [(f)(1)에 대한 주: riskless principal transaction이란 broker 또는 dealer가 고객으로부터 매수 주문을 받은 후 그 주문을 충족하기 위하여 시장에서 자기계산으로 그 증권을 매수하거나, 고객으로부터 매도 주문을 받은 후 그 주문을 충족하기 위하여 시장에 자기계산으로 그 증권을 매도하는 principal 거래를 말한다.] (2) 증권을 매도하는 자는 다음을 하여서는 아니 된다: (i) 그 거래를 예상하여 또는 그 거래와 관련하여 그 증권의 매수 주문을 권유하거나 권유를 주선하는 것; (ii) 그 증권의 청약·판매와 관련하여 매도 주문을 실행하는 broker 또는 dealer 외의 자에게 어떠한 지급을 하는 것. (3) 본 (f)항은 다음에는 적용되지 아니한다: (i) 비-affiliate인 사망자 유산 또는 그 수익자의 계정으로 판매되는 증권; (ii) 채무증권. + +- **쉬운 설명**: 계열 overlay의 판정 본체다. 세 갈래를 Decipher 아키텍처에 대입하면 개폐가 갈린다. **(i) brokers' transactions** — 정의상 "broker에 의한(by a broker)" 거래이므로(§3.7), 등록 broker-dealer가 실행 주체로 통합되기 전에는 갈래 자체가 닫혀 있다. **(ii) market maker 직접 거래** — 유일하게 현행 아키텍처에서 열리는 갈래다. RFQ의 상대방이 §3(a)(38) market maker이기만 하면 문언 그대로 부합하며, 중간 broker를 요구하지 않는다(1978년 개정이 broker 경유의 대안으로 신설한 갈래 — §3.13). **(iii) riskless principal** — (B)의 SRO 보고 가능성 요건이 등록 BD·SRO 회원 체계를 전제하므로 역시 닫혀 있다. 결론: 현 단계 계열 허용 엔진 집합은 {RFQ}이며, 그 RFQ도 **상대방이 market maker인 경우**로 한정된다 — 이것이 G⑤의 두 원자(엔진 소속 + 상대방 MM claim)다. (2)는 매도인 본인의 행위 규범이다: (i) 매수 주문 권유 금지 — market maker에게 견적을 청하는 것은 (ii) 갈래가 예정한 방식 그 자체이지 금지되는 권유가 아니지만, MM 아닌 멤버십 일반에 요청을 뿌리는 것은 권유와의 경계에 선다. 그래서 계열 RFQ의 **요청 수신 대상 자체를 MM claim 보유자로 한정**하는 것이 엔진 설정의 보수 규범이다(§5.4·§11). (2)(ii) 지급 금지는 플랫폼 수수료의 성격 문제를 낳는다 — venue가 "the broker or dealer who executes the order"인가라는 물음으로, C-09·변호사 확인 대상이다(OD-B04-5). (3)의 두 예외(비계열 유산·채무증권)는 지분형 BUIDL-like 자산에는 해당 없음이 기본값이다 — 자산이 debt로 분류되면 (f) 축 전체가 꺼지므로, 그 분류는 카드 사실(B-01·B-03의 legalClassId)에서 온다. + +- **PASS/FAIL 반영**: 직접 ○ (계열 overlay 본체) — affiliateOverlayActive ⇒ txEngine ∈ AFFILIATE_ENGINE_SET(현행 {RFQ}) ∧ 상대방 MARKET_MAKER claim 존재. (iii)·(i) 갈래는 거버넌스 상수 갱신으로만 열린다(BD 통합 시 — OD-B04-1). + +- **ERC-3643 변환**: 거버넌스 상수: AFFILIATE_ENGINE_SET = {RFQ} (다중서명·time-lock 관리, §11); 판정: affiliateOverlayActive ⇒ (txEngine ∈ AFFILIATE_ENGINE_SET) ∧ hasValidClaim(buyer.ONCHAINID, topic = MARKET_MAKER_STATUS); (f)(2) 서약: 매도 주문 제출 시 noSolicitationAttestation·noSidePaymentAttestation 기록(게이트 아닌 기록 항목 — 실질은 C-09·F-02); (3)(ii) 예외: facts.securityType = DEBT ⇒ overlay 비활성(카드 사실 소비). + +### 3.5 Securities Act §4(a)(4) — brokers' transactions 면제: (f)(1)(i)의 제정법 고리 [uscode.house.gov] + +- **조항**: Securities Act §4(a)(4), 15 U.S.C. §77d(a)(4) — uscode.house.gov (2026-06-05 시행 법률 기준). Rule 144(f)(1)(i)·(g)의 "section 4(4)" 표기는 2012년 JOBS Act 재편 전 조문 번호로, 현행 §4(a)(4)를 가리킨다. + +- **핵심 원문**: The provisions of section 77e of this title shall not apply to— [...] (4) brokers' transactions executed upon customers' orders on any exchange or in the over-the-counter market but not the solicitation of such orders; + +- **한국어**: 이 법 §5[77e]의 규정은 다음에 적용되지 아니한다 — [...] (4) 거래소 또는 장외시장에서 고객의 주문에 따라 실행되는 brokers' transactions. 다만 그러한 주문의 권유(solicitation)에는 적용되지 아니한다[= 면제되지 아니한다]; + +- **쉬운 설명**: (f)(1)(i) 갈래가 딛는 제정법이다. 두 가지가 B-04에 직결된다. ① 이 면제는 **broker의 부분(part)만** 덮는다 — 고객(매도인)은 별도 면제(Rule 144 또는 §4(a)(7))가 필요하고, 그래서 (f)(1)(i)는 "broker가 §4(a)(4)로 면제되는 방식의 거래"라는 뜻이지 매도인 면제의 대체가 아니다. ② 문언 자체가 "but not the solicitation of such orders"로 권유를 면제 밖에 둔다 — 무권유가 이 방식의 정의적 속성이며, Rule 144(g)(3)이 그 속성을 요건화한 것이다. 현행 Decipher 아키텍처에는 주문을 "실행하는" 등록 broker가 없으므로 이 갈래는 구조적으로 닫혀 있고, 열리는 조건(등록 BD/ATS 통합)은 venue 층의 미해결 쟁점과 한 몸이다(§3.14·OD-B04-1). + +- **PASS/FAIL 반영**: 조건부 — 현행 폐쇄. brokerIntegrated = true(거버넌스 사실)로 전환되고 (g) 요건 충족 체계가 갖춰진 뒤에야 AFFILIATE_ENGINE_SET에 해당 방식이 편입될 수 있다. + +- **ERC-3643 변환**: 거버넌스 사실: platform.brokerIntegrated = false (현행); 편입 조건식(미래): brokerIntegrated ∧ (g)충족체계 ⇒ AFFILIATE_ENGINE_SET에 OB_BROKER 추가 가능(정정·time-lock 경로만). + +### 3.6 Exchange Act §3(a)(38)·(a)(5) — market maker·dealer 정의: RFQ 상대방 요건과 AMM 배제 [uscode.house.gov] + +- **조항**: Securities Exchange Act of 1934 §3(a)(38)·(a)(5), 15 U.S.C. §78c(a)(38)·(a)(5) — uscode.house.gov (2026-05-29 시행 법률 기준) + +- **핵심 원문**: (38) The term "market maker" means any specialist permitted to act as a dealer, any dealer acting in the capacity of block positioner, and any dealer who, with respect to a security, holds himself out (by entering quotations in an inter-dealer communications system or otherwise) as being willing to buy and sell such security for his own account on a regular or continuous basis. / (5)(A) In general.—The term "dealer" means any person engaged in the business of buying and selling securities (not including security-based swaps, other than security-based swaps with or for persons that are not eligible contract participants) for such person's own account through a broker or otherwise. (B) Exception for person not engaged in the business of dealing.—The term "dealer" does not include a person that buys or sells securities (not including security-based swaps, other than security-based swaps with or for persons that are not eligible contract participants) for such person's own account, either individually or in a fiduciary capacity, but not as a part of a regular business. + +- **한국어**: (38) "market maker"란 dealer로 행위하도록 허용된 specialist, block positioner의 자격으로 행위하는 dealer, 그리고 어느 증권에 관하여(with respect to a security) 자기계산으로 그 증권을 정기적 또는 계속적 기준으로(on a regular or continuous basis) 매수·매도할 의사가 있음을 (inter-dealer 통신 시스템에 호가를 입력하는 방법 그 밖의 방법으로) 표방하는(holds himself out) dealer를 뜻한다. / (5)(A) 일반. — "dealer"란 broker를 통하여 또는 그 밖의 방법으로 자기계산으로 증권을 매매하는 영업에 종사하는 모든 자를 뜻한다. (B) 딜링 영업에 종사하지 아니하는 자의 예외. — 개인적으로든 수탁자 자격으로든 자기계산으로 증권을 매매하되 정규 영업의 일부로서 하지 아니하는 자는 "dealer"에 포함되지 아니한다. + +- **쉬운 설명**: (f)(1)(ii) 갈래의 상대방 요건을 채우는 정의이자, AMM 배제의 문언 논거다. 세 가지를 원자화한다. ① market maker는 **dealer의 부분집합**이다 — 세 유형 모두 "dealer"를 전제어로 쓴다. 따라서 상대방이 (ii) 갈래를 성립시키려면 먼저 dealer(정규 영업으로 자기계산 매매하는 자)여야 하고, 실무상 이는 등록 broker-dealer 확인으로 수렴한다. ② 표방(holds himself out)은 **증권 단위**다 — "with respect to a security". 어느 회사가 일반적으로 마켓메이킹업을 한다는 사실만으로 부족하고, **이 토큰에 관하여** 정기적·계속적 양방향 호가로 서 있어야 한다. 플랫폼의 RFQ·호가 로그가 이 규칙성의 증빙 원천이 될 수 있다(§10·§11, 정량 기준은 OD-B04-2). ③ AMM pool은 이 정의의 어느 문에도 들어오지 못한다 — pool은 스마트컨트랙트이지 "person engaged in the business"가 아니고, 등록 dealer는 더더욱 아니다. 상시 양방향 노출이라는 **행태**는 market maker와 닮았지만, 정의의 전제어(dealer)가 탈락하므로 (ii) 갈래는 성립 불가다. 오히려 그 닮음은 반대 방향의 질문 — pool·LP·운영자가 dealer 지위를 표방하는 것 아닌가 — 을 낳으며, 이는 venue 층 미해결 쟁점으로 격리한다(OD-B04-6). + +- **PASS/FAIL 반영**: 직접 ○ (상대방 요건) — 계열 RFQ에서 buyer의 MARKET_MAKER_STATUS claim 존재를 검사(G⑤ 두 번째 원자). claim의 실질(등록 dealer + 이 토큰 호가 규칙성)은 off-chain 검증기관·C-09 소관. + +- **ERC-3643 변환**: claim.topic = MARKET_MAKER_STATUS; claim.data = {bdRegistrationRef(CRD/SEC 등록 확인), securityScope = tokenId(증권 단위 표방), quotingEvidenceRef(플랫폼 호가 로그 기간 해시)}; 발급: Trusted Issuer(§10 L2); 만료·재검증: A-11 주기 규율에 편승. + +### 3.7 Rule 144(g) — brokers' transactions의 요건화: 무권유 원칙과 호가 게시 안전항 [ecfr.gov] + +- **조항**: 17 C.F.R. §230.144(g) — ecfr.gov (Title 17, 2026-07-01 기준 현행) + +- **핵심 원문**: (g) Brokers' transactions. The term brokers' transactions in section 4(4) of the Act shall for the purposes of this section be deemed to include transactions by a broker in which such broker: (1) Does no more than execute the order or orders to sell the securities as agent for the person for whose account the securities are sold; (2) Receives no more than the usual and customary broker's commission; (3) Neither solicits nor arranges for the solicitation of customers' orders to buy the securities in anticipation of or in connection with the transaction; provided, that the foregoing shall not preclude (i) inquiries by the broker of other brokers or dealers who have indicated an interest in the securities within the preceding 60 days; (ii) inquiries by the broker of his customers who have indicated an unsolicited bona fide interest in the securities in writing within the preceding 10 business days; (iii) the publication by the broker of bid and ask quotations for the security in an inter-dealer quotation system provided that such quotations are incident to the maintenance of a bona fide inter-dealer market for the security for the broker's own account and that the broker has published bona fide bid and ask quotations for the security in an inter-dealer quotation system on each of at least twelve days within the preceding thirty calendar days with no more than four business days in succession without such two-way quotations; or (iv) the publication by the broker of bid and ask quotations for the security in an alternative trading system, as defined in § 242.300 of this chapter, provided that the broker has published bona fide bid and ask quotations for the security in the alternative trading system on each of the last twelve business days; and (4) After reasonable inquiry is not aware of circumstances indicating that the person for whose account the securities are sold is an underwriter with respect to the securities or that the transaction is a part of a distribution of securities of the issuer. [Notes (i)·(ii)의 조사 항목 (a)~(g) 생략 — C-09 소관] + +- **한국어**: (g) Brokers' transactions. 이 법 section 4(4)의 brokers' transactions라는 용어는 본 section의 목적상 다음과 같은 broker에 의한 거래를 포함하는 것으로 본다: (1) 그 계정을 위하여 증권이 판매되는 자의 대리인으로서 매도 주문의 실행 이상을 하지 아니할 것; (2) 통상적·관례적 broker 수수료를 초과하여 받지 아니할 것; (3) 그 거래를 예상하여 또는 그 거래와 관련하여 고객의 매수 주문을 권유하거나 권유를 주선하지 아니할 것. 다만 다음은 이에 저촉되지 아니한다 — (i) 직전 60일 내에 그 증권에 관심을 표시한 다른 broker·dealer에 대한 broker의 문의; (ii) 직전 10영업일 내에 서면으로 자발적·선의의(unsolicited bona fide) 관심을 표시한 자기 고객에 대한 broker의 문의; (iii) inter-dealer quotation system에의 양방향 호가 게시 — 그 호가가 broker 자기계산의 선의의 inter-dealer 시장 유지에 부수하고, 직전 30역일 중 **적어도 12일 각각**(연속 4영업일을 초과하는 양방향 호가 공백 없이) 게시했을 것을 조건으로; 또는 (iv) §242.300에 정의된 alternative trading system에의 양방향 호가 게시 — broker가 그 ATS에 **직전 12영업일 각각** 선의의 양방향 호가를 게시했을 것을 조건으로; 그리고 (4) 합리적 조사(reasonable inquiry) 후에도, 그 계정을 위하여 증권이 판매되는 자가 그 증권의 underwriter라거나 그 거래가 발행인 증권의 distribution의 일부라는 사정을 알지 못할 것. + +- **쉬운 설명**: (f)(1)(i) 갈래의 내용을 채우는 조문이자, **오더북이 계열 매도에 편입될 수 있는 유일한 문언 통로**다. 판독의 축은 주어다 — (1)~(4)의 행위 주체, 특히 (iii)·(iv)의 호가 게시 주체는 전부 **the broker**다. 2007년 채택문도 이 조항을 "broker가 ATS에 호가를 게시하는 것"으로 설명한다(§3.13). 따라서 ① 매도인 본인이 오더북에 주문을 게시하는 현행 구조는 (g)(3)(iv)의 사정 밖이고(주어 불일치), ② broker 자체가 없는 아키텍처에서는 (g) 전체의 전제가 성립하지 않는다. 오더북 편입의 문언 조건을 미리 고정해 두면: 등록 broker가 실행 주체로 서고 + 그 broker가 이 토큰에 대해 ATS에서 **직전 12영업일 각각** 양방향 호가를 게시했어야 한다((iv)) — (iii)의 "30역일 중 12일 이상 + 공백 ≤ 4영업일 연속"과 달리 (iv)는 **연속 12영업일 전부**를 요구하는 더 촘촘한 창이다(부등호·기간 규율: (iii) ≥ 12일/직전 30역일 ∧ 공백 연속 ≤ 4영업일, (iv) = 직전 12영업일 전일). (4)의 reasonable inquiry는 broker의 실질 조사 의무로서 C-09의 본체다 — "brokers rely on third-parties at their own peril"(World Trade Financial, 739 F.3d 1243)의 규율이 여기 얹힌다. + +- **PASS/FAIL 반영**: 조건부 — 현행 아키텍처에서 (f)(1)(i) 갈래 폐쇄의 문언 근거(주어 = broker). 편입 시 (iv)의 12영업일 게시 조건은 플랫폼 호가 로그로 기계 판정 가능한 항목으로 예약해 둔다. + +- **ERC-3643 변환**: 편입 조건 예약 필드(미래): obBrokerPath = {brokerId, atsQuoteLog: 직전 12영업일 양방향 호가 존재 비트맵, twoSidedOnEachDay: bool}; 현행: 미구현 — AFFILIATE_ENGINE_SET에 OB 부재로 표현. (g)(4) 조사·기록은 C-09 인터페이스로 forward. + + +### 3.8 Securities Act §4(a)(7)·§4(d)·§4(e) — 사적 재판매 면제: 경로 overlay의 판정 본체 [uscode.house.gov] + +- **조항**: Securities Act §4(a)(7)·(d)·(e), 15 U.S.C. §77d(a)(7)·(d)·(e) — uscode.house.gov (2026-06-05 시행 법률 기준) + +- **핵심 원문**: (a) The provisions of section 77e of this title shall not apply to— [...] (7) transactions meeting the requirements of subsection (d). [...] (d) Certain accredited investor transactions.—The transactions referred to in subsection (a)(7) are transactions meeting the following requirements: (1) Accredited investor requirement.—Each purchaser is an accredited investor, as that term is defined in section 230.501(a) of title 17, Code of Federal Regulations (or any successor regulation). (2) Prohibition on general solicitation or advertising.—Neither the seller, nor any person acting on the seller's behalf, offers or sells securities by any form of general solicitation or general advertising. [(3) 정보요건, (4) 발행인 요건, (5) bad actor 금지, (6)~(8) 기타 요건 — 각 소관 부품(C-00·A-03·E계열) 인용 생략] (e) Additional requirements.—(1) In general.—With respect to an exempted transaction described under subsection (a)(7): (A) Securities acquired in such transaction shall be deemed to have been acquired in a transaction not involving any public offering. (B) Such transaction shall be deemed not to be a distribution for purposes of section 77b(a)(11) of this title. (C) Securities involved in such transaction shall be deemed to be restricted securities within the meaning of Rule 144 (17 CFR 230.144). (2) Rule of construction.—The exemption provided by subsection (a)(7) shall not be the exclusive means for establishing an exemption from the registration requirements of section 77e of this title. + +- **한국어**: (a) 이 법 §5[77e]의 규정은 다음에 적용되지 아니한다 — [...] (7) subsection (d)의 요건을 충족하는 거래. [...] (d) 일정한 적격투자자 거래. — (a)(7)에서 말하는 거래란 다음 요건을 충족하는 거래를 말한다: (1) 적격투자자 요건. — 각 매수인이 17 C.F.R. §230.501(a)에 정의된 accredited investor일 것. (2) **일반권유·광고 금지. — 매도인도, 매도인을 위하여 행위하는 어느 누구도, 어떤 형태의 general solicitation 또는 general advertising으로도 증권을 청약하거나 판매하지 아니할 것.** [...] (e) 추가 요건. — (1) 일반. — (a)(7)의 면제 거래에 관하여: (A) 그 거래에서 취득된 증권은 공모를 수반하지 아니하는 거래에서 취득된 것으로 본다. (B) 그 거래는 §2(a)(11)[77b(a)(11)]의 목적상 distribution이 아닌 것으로 본다. (C) 그 거래에 관계된 증권은 Rule 144의 의미에서 restricted securities로 본다. (2) 해석 규칙. — (a)(7)의 면제는 §5 등록의무 면제를 확립하는 배타적 수단이 아니다. + +- **쉬운 설명**: 경로 overlay(G④)의 판정 본체다. (d)(2)의 문언 구조를 원자화하면 — 주체는 "매도인 + 매도인을 위해 행위하는 모든 자"(venue·프런트엔드가 매도인을 위해 행위하는 것으로 평가될 여지까지 포함해 보수적으로 읽는다), 금지 대상은 "어떤 형태의(any form of)" 일반권유·일반광고, 시제는 청약·판매 전 과정이다. 엔진에 대입하면: 특정 상대에 대한 표적 견적 요청(RFQ)은 "general"의 반대극이고, 폐쇄 멤버십 전체에 대한 주문 게시(오더북)는 수신자가 전원 사전검증 AI라는 점에서 공개 광고와 다르지만 "불특정 다수에 대한 일반적 노출"이라는 평가 가능성이 남는다 — 이 성격규명은 본 시스템의 선행 법률의견서가 "폐쇄 whitelist·RFQ 구조는 (d)(2)와 양립"으로 정리하며 RFQ까지만 확정한 지점이라, 오더북의 편입은 미확정 항목으로 남긴다(OD-B04-3). 그래서 경로 overlay의 보수 기본값은 NO_GS_ENGINE_SET = {RFQ}다. (e)(1)의 세 의제는 이 경로의 하류 지도다 — 특히 (C) 때문에 §4(a)(7)로 넘어간 물량도 매수인 손에서 restricted로 남는다(B-03의 flag 유지·C-01의 기간 재기산과 정합). 한 가지 대칭 유의: Rule 144 **비계열** 경로에는 무권유 요건이 없다 — (b)(1)의 조건 목록에 방식·권유 축이 아예 없으므로, 비계열 Rule 144 매도의 오더북 체결은 이 축에서 자유다(§7 T6의 쌍). + +- **PASS/FAIL 반영**: 직접 ○ (경로 overlay 본체) — resalePath = SEC4A7 ⇒ txEngine ∈ NO_GS_ENGINE_SET(현행 {RFQ}). 경로 자체의 성립((d)(1)·(3)~(8))은 C-00·A-03 소관. + +- **ERC-3643 변환**: 거버넌스 상수: NO_GS_ENGINE_SET = {RFQ}; 입력: txContext.resalePath (C-00 산출, ∈ {RULE144, SEC4A7, ...}); 판정: resalePath = SEC4A7 ⇒ txEngine ∈ NO_GS_ENGINE_SET. + +### 3.9 Rule 502(c) — general solicitation의 예시적 정의 [ecfr.gov] + +- **조항**: 17 C.F.R. §230.502(c) — ecfr.gov (Title 17, 2026-07-01 기준 현행) + +- **핵심 원문**: (c) Limitation on manner of offering. Except as provided in § 230.504(b)(1) or § 230.506(c), neither the issuer nor any person acting on its behalf shall offer or sell the securities by any form of general solicitation or general advertising, including, but not limited to, the following: (1) Any advertisement, article, notice or other communication published in any newspaper, magazine, or similar media or broadcast over television or radio; and (2) Any seminar or meeting whose attendees have been invited by any general solicitation or general advertising; [Form D 신고·역외 언론 접근에 관한 두 단서(Provided, however / Provided further) 생략] + +- **한국어**: (c) 청약 방식의 제한. §230.504(b)(1) 또는 §230.506(c)에 규정된 경우를 제외하고, 발행인도 발행인을 위하여 행위하는 어느 누구도 어떤 형태의 general solicitation 또는 general advertising으로도 증권을 청약하거나 판매하여서는 아니 된다. 여기에는 다음이 포함되나 이에 한정되지 아니한다: (1) 신문·잡지 그 밖의 유사 매체에 게재되거나 텔레비전·라디오로 방송되는 광고·기사·공지 그 밖의 커뮤니케이션; (2) 참석자가 general solicitation 또는 general advertising으로 초청된 세미나·모임; [...] + +- **쉬운 설명**: §4(d)(2)의 "general solicitation or general advertising"이라는 용어에 내용을 대 주는 기준 조문이다(발행 국면 조문이지만 같은 용어의 해석 원천으로 기능한다). 두 가지 판독. ① 정의가 아니라 **예시 목록**이다 — "including, but not limited to". 그래서 새로운 매체(온체인 오더북·프런트 위젯)가 목록에 없다는 사실은 안전을 주지 않는다. 판단 축은 실무·해석상 "수신자와의 기존 실질 관계(pre-existing substantive relationship) 유무"로 수렴해 왔다 — 무차별 노출이면 general, 관계로 좁혀진 표적 커뮤니케이션이면 아님. Decipher의 멤버십은 전원 KYC·자격 검증을 거친 집합이지만, 검증 절차의 존재가 곧 "실질 관계"로 평가되는지는 확립된 결론이 아니다(체크박스 자기인증만으로 실질 관계가 성립하지 않는다는 선행 정리 — Citizen VC 계열 — 와 같은 결의 문제). ② 주체 문언("any person acting on its behalf")이 §4(d)(2)와 동형이다 — 엔진·프런트가 매도인을 위한 노출 장치로 평가될 가능성을 설계 단계에서 봉쇄하는 것(표적 요청만 허용)이 보수 규범이다. + +- **PASS/FAIL 반영**: 간접 ✕ — B-04가 502(c)를 직접 판정하지 않는다. G④ 경로 overlay의 해석 기준이자, NO_GS_ENGINE_SET 보수 기본값(오더북 제외)의 근거. + +- **ERC-3643 변환**: 직접 필드 없음. 오더북의 NO_GS_ENGINE_SET 편입 심사 시 확인 항목(수신자 집합의 관계 성격 정리)으로만 소비 — 편입은 정정·time-lock 경로(§11). + +### 3.10 Rule 506(c) + §77d(b) — 발행 국면의 일반청약 허용: R1에서 엔진 축이 가벼운 이유 [ecfr.gov · uscode.house.gov] + +- **조항**: 17 C.F.R. §230.506(c) — ecfr.gov; Securities Act §4(b), 15 U.S.C. §77d(b) — uscode.house.gov + +- **핵심 원문**: (c) Conditions to be met in offerings not subject to limitation on manner of offering—(1) General conditions. To qualify for exemption under this section, sales must satisfy all the terms and conditions of §§ 230.501 and 230.502(a) and (d). (2) Specific conditions—(i) Nature of purchasers. All purchasers of securities sold in any offering under paragraph (c) of this section are accredited investors. (ii) Verification of accredited investor status. The issuer shall take reasonable steps to verify that purchasers of securities sold in any offering under paragraph (c) of this section are accredited investors. [검증 방법 목록 생략 — A-03 소관] / (b) Offers and sales exempt under section 230.506 of title 17, Code of Federal Regulations (as revised pursuant to section 201 of the Jumpstart Our Business Startups Act) shall not be deemed public offerings under the Federal securities laws as a result of general advertising or general solicitation. + +- **한국어**: (c) 청약 방식 제한이 없는 offering의 충족 조건 — (1) 일반 조건. 본 조 면제를 받으려면 판매가 §§230.501·230.502(a)·(d)의 모든 조건을 충족하여야 한다[= 502(c) 무권유 제한은 목록에서 빠져 있다]. (2) 특별 조건 — (i) 매수인의 성격. 본 (c)항 offering에서 판매되는 증권의 모든 매수인은 accredited investor일 것. (ii) 적격투자자 지위의 검증. 발행인은 매수인이 accredited investor임을 검증하기 위한 합리적 조치를 취하여야 한다. / (b) [JOBS Act §201에 따라 개정된] 17 C.F.R. §230.506에 의하여 면제되는 청약·판매는 general advertising 또는 general solicitation을 이유로 연방증권법상 공모로 보지 아니한다. + +- **쉬운 설명**: R1(발행 유지) 국면에서 엔진의 권유 성격이 왜 발행 면제를 위협하지 않는지의 근거다. 506(c)는 (1)의 조건 목록에서 502(c)를 의도적으로 뺐고 — 발행인은 일반청약하며 팔 수 있다 — §77d(b)는 그 일반청약이 "public offering" 평가로 번지는 길까지 제정법 차원에서 끊었다(§3(c)(7)의 no-public-offering 조건과의 접점은 A-13 문서 소관). 따라서 발행 국면 자체에는 B-04가 부과할 무권유 overlay가 없다. 그럼에도 R1에 B-04가 필수 부착(●)인 이유는 두 가지다 — ① 기초 게이트: 발행 자산의 모든 거래는 카드가 선언한 엔진 집합 안에서만 돌아야 한다는 선언 집행은 발행 framework 유지 확인의 일부다. ② 비대칭의 관리: 발행은 시끄러워도 되지만 그 물량의 재판매는 §4(d)(2)·144(f)의 조용함을 요구한다 — 같은 자산에서 국면별로 다른 엔진 규율이 걸린다는 사실 자체가, 엔진을 자산 상수 하나로 접지 않고 거래 overlay로 이원화한 설계의 근거다. + +- **PASS/FAIL 반영**: 간접 ✕ — 발행 국면 무권유 overlay 부재의 확인(G④가 발행 거래에 활성화되지 않는 근거). 기초 게이트(G①~③)는 R1에서도 동일 작동. + +- **ERC-3643 변환**: facts.issuanceFramework = RegD506c (카드 사실, B-01 관리) — G④의 활성식이 issuance 국면이 아닌 resalePath 태그에만 반응하도록 배선. + +### 3.11 Securities Act §4(c) — 506 증권 플랫폼의 BD 비등록 조건: venue 경계의 제정법 좌표 [uscode.house.gov] + +- **조항**: Securities Act §4(c), 15 U.S.C. §77d(c) — uscode.house.gov (FAST Act 이전 2012 JOBS Act §201(c) 신설 조항) + +- **핵심 원문**: (c)(1) With respect to securities offered and sold in compliance with Rule 506 of Regulation D under this Act, no person who meets the conditions set forth in paragraph (2) shall be subject to registration as a broker or dealer pursuant to section 78o(a)(1) of this title, solely because— (A) that person maintains a platform or mechanism that permits the offer, sale, purchase, or negotiation of or with respect to securities, or permits general solicitations, general advertisements, or similar or related activities by issuers of such securities, whether online, in person, or through any other means; (B) that person or any person associated with that person co-invests in such securities; or (C) that person or any person associated with that person provides ancillary services with respect to such securities. (2) Exemption.—The exemption provided in paragraph (1) applies to any person described in such paragraph if— (A) such person and each person associated with that person receives no compensation in connection with the purchase or sale of such security; (B) such person and each person associated with that person does not have possession of customer funds or securities in connection with the purchase or sale of such security; and (C) such person is not subject to a statutory disqualification as defined in section 78c(a)(39) of this title and does not have any person associated with that person subject to such a statutory disqualification. + +- **한국어**: (c)(1) 이 법상 Regulation D Rule 506에 부합하여 청약·판매되는 증권에 관하여, (2)의 조건을 충족하는 자는 다음 사유만으로는(solely because) §15(a)(1)[78o(a)(1)]에 따른 broker 또는 dealer 등록 대상이 되지 아니한다 — (A) 그 자가 증권의 청약·판매·매수·협상을 가능하게 하는 platform 또는 mechanism을 유지하는 것(온라인·대면 그 밖의 수단 불문), 또는 발행인의 일반권유·일반광고 등을 가능하게 하는 것; (B) 공동투자; (C) 부수 서비스 제공. (2) 면제. — (1)의 면제는 다음의 경우에 적용된다 — (A) 그 자와 그 관계자가 **그 증권의 매매와 관련하여 어떠한 보수도 받지 아니할 것**; (B) 그 자와 그 관계자가 그 매매와 관련하여 고객의 자금 또는 증권을 보유하지 아니할 것; (C) statutory disqualification에 해당하지 아니할 것. + +- **쉬운 설명**: 의회가 "506 증권 플랫폼"이라는 개념을 제정법에 새긴 유일한 자리이며, 엔진 층과 venue 층의 경계를 그어 주는 좌표다. 문언상 매력적으로 보이지만 — (2)(A)의 **무보수 조건** 때문에 거래 수수료를 받는 venue에는 적용되지 않고, (2)(B)의 무보유 조건도 결제 구조에 따라 문제된다. 즉 이 조항은 "수수료 없는 게시판"을 위한 것이지 매칭·체결·과금하는 거래소를 위한 것이 아니다. B-04의 관점에서 이 조문이 하는 일은 하나다: **엔진 게이팅(거래 층)과 venue 지위(운영 층)는 별개의 법 문제**임을 제정법 차원에서 확인해 준다 — B-04가 아무리 정확히 돌아도 venue 층의 BD/ATS 성격규명은 남으며, 그 쟁점은 본 부품 밖(법률의견서 Q1·전문 counsel)이다. + +- **PASS/FAIL 반영**: 간접 ✕ — B-04 판정에 불사용. venue 경계의 Background 좌표. + +- **ERC-3643 변환**: 직접 필드 없음. + +### 3.12 Reg ATS Rule 300(a)·(e) — ATS·Order 정의: (g)(3)(iv)의 참조어와 주문의 규제 문법 [ecfr.gov] + +- **조항**: 17 C.F.R. §242.300(a)·(e) — ecfr.gov (Title 17, 2026-07-06 기준 현행) + +- **핵심 원문**: (a) Alternative trading system means any organization, association, person, group of persons, or system: (1) That constitutes, maintains, or provides a market place or facilities for bringing together purchasers and sellers of securities or for otherwise performing with respect to securities the functions commonly performed by a stock exchange within the meaning of § 240.3b-16 of this chapter; and (2) That does not: (i) Set rules governing the conduct of subscribers other than the conduct of such subscribers' trading on such organization, association, person, group of persons, or system; or (ii) Discipline subscribers other than by exclusion from trading. [...] (e) Order means any firm indication of a willingness to buy or sell a security, as either principal or agent, including any bid or offer quotation, market order, limit order, or other priced order. + +- **한국어**: (a) alternative trading system이란 다음의 모든 조직·단체·자·집단·시스템을 뜻한다: (1) 증권의 매수인과 매도인을 한데 모으는 시장 또는 설비를 구성·유지·제공하거나, 그 밖에 증권에 관하여 §240.3b-16의 의미에서 증권거래소가 통상 수행하는 기능을 수행하는 것; 그리고 (2) 다음을 하지 아니하는 것: (i) 가입자의 그 시스템 내 거래 행위 외의 행위를 규율하는 규칙 제정; (ii) 거래 배제 외의 방법으로 가입자를 징계. [...] (e) order란 principal로서든 agent로서든 증권을 매수 또는 매도할 의사의 확정적 표시(firm indication)를 뜻하며, bid·offer 호가, 시장가 주문, 지정가 주문 그 밖의 가격 지정 주문을 포함한다. + +- **쉬운 설명**: 두 용어가 B-04의 문법을 고정한다. ① (a)는 (g)(3)(iv)가 참조하는 "alternative trading system"의 정의 — 매수인·매도인을 한데 모으는 시스템이라는 기능 기준이라, 오더북형 온체인 venue가 이 기능 기술에 정면으로 들어온다는 사실 자체가 venue 층 쟁점(등록 축)의 출발점이다. B-04는 이 정의를 판정에 쓰지 않고, (g)(3)(iv) 편입 조건의 참조어로만 고정해 둔다. ② (e)는 "주문"의 규제상 의미 — **확정적 매매 의사 표시**. 오더북 게시가 규제 문법에서 단순 정보가 아니라 firm indication으로 읽힌다는 것, 그래서 게시 행위의 권유성 평가(§3.8·§3.9)와 venue의 기능 평가(§3.14)가 모두 이 지점에서 출발한다는 것을 개발·운영이 공유해야 한다. + +- **PASS/FAIL 반영**: 간접 ✕ — 정의 조문. (g)(3)(iv) 편입 조건과 오더북 성격 논의의 용어 기반. + +- **ERC-3643 변환**: 직접 필드 없음. 오더북 주문 객체의 로그 스키마(firm indication으로서의 게시 시각·양방향 여부)가 §3.7 예약 필드의 데이터 원천. + +### 3.13 SEC Release No. 33-8869 (2007-12-06) — 현행 (f)·(g) 구조의 취지와 주체 (Layer 3) [sec.gov] + +- **조항**: Revisions to Rules 144 and 145, Release No. 33-8869 (2007-12-06), 72 FR 71546 — sec.gov (sec.gov/files/rules/final/2007/33-8869.pdf) + +- **핵심 원문**: [gatekeeper 논거] we agree that, as financial intermediaries, brokers serve an important function as gatekeepers for promoting compliance with Rule 144 [...] we are concerned that eliminating the manner of sale requirements for equity securities would lead to abuse. [riskless principal 신설] We believe that these riskless principal transactions are equivalent to agency trades. [ATS 호가 안전항 — 주체] This new provision permits a broker to insert bid and ask quotations for the security in an alternative trading system, as defined in Rule 300 of Regulation ATS [...] provided that the broker has published bona fide bid and ask quotations for the security in the alternative trading system on each of the last 12 business days. [1978년 market maker 갈래의 연혁] the Commission amended Rule 144(f) to permit sales under the rule to be made directly to a market maker in lieu of selling through a broker [n. citing Release No. 33-5979 (Sept. 19, 1978)] + +- **한국어**: [문지기 논거] 금융 중개인으로서 broker는 Rule 144 준수를 촉진하는 gatekeeper로서 중요한 기능을 수행한다는 데 동의한다 [...] 지분증권에서 매도방식 요건을 없애면 남용으로 이어질 것을 우려한다. [riskless principal] 이러한 riskless principal 거래는 대리(agency) 거래와 등가라고 본다. [ATS 호가 — 주체] 이 신설 조항은 **broker가** Reg ATS Rule 300에 정의된 alternative trading system에 그 증권의 양방향 호가를 게시하는 것을 허용한다 — 그 broker가 그 ATS에 직전 12영업일 각각 선의의 양방향 호가를 게시했을 것을 조건으로. [1978 연혁] 위원회는 broker를 통한 매도의 **대안으로** market maker에 대한 직접 매도를 허용하도록 Rule 144(f)를 개정하였다. + +- **쉬운 설명**: 현행 (f)·(g)를 읽는 네 개의 해석 앵커를 준다. ① 방식 요건의 목적은 문지기다 — 계열 지분증권에서만 유지된 것은 "most abuses"가 계열 매도에서 발생한다는 판단 때문이고, 그래서 B-04의 계열 overlay는 요건의 취지 그 자체를 코드화한 것이다. ② riskless principal은 "대리 거래와 등가"라는 논리로 편입됐다 — SRO 보고·수수료 공시라는 등가성 담보 장치가 조건이므로, 그 인프라 없는 환경에서 갈래를 여는 것은 취지 위반이다. ③ (g)(3)(iv)의 게시 주체는 채택문 스스로 broker로 특정한다 — 매도인 게시형 오더북이 이 안전항을 원용할 수 없다는 §3.7 판독의 확정 근거다. ④ market maker 직접 거래 갈래는 1978년부터 "broker 경유의 대안(in lieu of)"으로 설계됐다 — 중간 broker 없는 RFQ-to-MM이 갈래의 원형 그대로라는 뜻이다. + +- **PASS/FAIL 반영**: 간접 ✕ — 판정에 직접 불사용. AFFILIATE_ENGINE_SET = {RFQ}(MM 한정)·오더북 배제·갈래 개폐 조건의 해석 근거. + +- **ERC-3643 변환**: 직접 필드 없음. §11 거버넌스 상수 변경 심사의 인용 기준 문서. + +### 3.14 SEC Staff Statement, File No. 4-894 (2026-04-13) — 비수탁 인터페이스 견해와 venue 층의 분리 (Layer 3 · Background) [sec.gov] + +- **조항**: SEC Division of Trading and Markets, Staff Statement Regarding Broker-Dealer Registration of Certain User Interfaces Utilized to Prepare Transactions in Crypto Asset Securities, File No. 4-894 (2026-04-13) — sec.gov. 본 블록의 배제사유 문언은 선행 법률의견서(BD-ATS reliance memo)가 sec.gov 원문에서 대조·전재한 것을 재인용한다. + +- **핵심 원문**: [배제사유 — 다음에 해당·표방하는 제공자에게는 적용되지 아니함] "executing or settling transactions" · "taking or routing orders" · "processing trade documentation" [및 고객 자금·증권에 대한 접근·보유] + +- **한국어**: [배제사유] 거래를 체결하거나 결제하는 것 · 주문을 접수하거나 라우팅하는 것 · 거래 문서를 처리하는 것 [및 고객 자금·증권 접근·보유]에 해당하거나 이를 표방하는 제공자에게는 본 성명이 적용되지 아니한다. + +- **쉬운 설명**: 이 성명은 self-custodial wallet 사용자의 파라미터를 blockchain 명령으로 변환하는 **순수 프런트엔드**에 한해 §15 broker-dealer 등록을 문제삼지 않겠다는 스태프 견해다 — 규칙이 아니고(no legal force or effect), §15에 한정되며(exchange·ATS 지위는 다루지 않음), 발표일로부터 5년 후 철회 간주다. B-04에 주는 함의는 배제사유의 문언에 있다: 매칭·체결·결제를 수행하는 프로토콜 레이어는 성명 자신의 문언으로 안전항 밖이다. 즉 **어떤 엔진을 고르든 venue 층의 지위 문제는 사라지지 않는다** — RFQ든 오더북이든 체결·결제는 venue의 코드가 수행하기 때문이다. 이 성명이 B-04 설계에 남기는 것은 분리 규율이다: 엔진 게이트는 거래 층의 적법 방식을 보증하는 부품이고, venue 층의 성격규명·relief는 별도 트랙(법률의견서 Q1, SEC engagement)이며, 두 층을 혼동해 "엔진이 합법이니 venue도 합법"으로 서술하는 것은 오류다. + +- **PASS/FAIL 반영**: 간접 ✕ — 판정 불사용. 엔진 층/venue 층 분리의 Background 좌표(§12 OD-B04-6과 연동). + +- **ERC-3643 변환**: 직접 필드 없음. + +### 3.15 Sub-요건 분해 매트릭스 + +위 §3.1~§3.14의 원리를, B-04가 실제로 판정하는 원자적 검증 단위로 분해한다. 각 행은 §5.2의 판정 분기와 1:1 대응한다(채널 표기: V = 상장 시점 카드 검사, G = per-tx 게이트, GOV = 거버넌스 평면 전제). deemed-PASS 같은 우회 경로는 존재하지 않는다. + +| Sub-ID | 원자 검증 단위 | 근거 원리 | 채널 | PASS 조건 | FAIL 코드 | +| --- | --- | --- | --- | --- | --- | +| B04-V1 | 선언 존재 — supportedEngines 비영 | §5 fail-closed(§3.1)·카드 완비 규율 | V | supportedEngines ≠ ∅ (bitset ≠ 0) | FAIL_ENGINE_DECL_MISSING | +| B04-V2 | 선언 유효 — 유효 집합 소속 | 유효 enum 규율(미지 비트 금지) | V | supportedEngines ⊆ VALID_ENGINES = {RFQ, OB, AMM} | FAIL_ENGINE_DECL_INVALID | +| B04-V3a | 구조 전제 — AMM 선언 시 venue pool 실재 | ERC-3643 whitelist 구조(pool의 IR 등재) | V | AMM ∈ supportedEngines ⇒ 등록된 venue pool 존재(B-02·Factory 공급) | FAIL_ENGINE_VENUE_UNREGISTERED | +| B04-V3b | 자산 성격 심사 — 펀드형 + AMM 결합 | §3(c)(7) 취득자 식별 미확정(§3.0.1) | V | fundRecipeId ≠ 0 ∧ AMM ∈ supportedEngines ⇒ 승인 보류·REVIEW (차단 아닌 상장 심사 항목) | REVIEW_ENGINE_FUND_AMM | +| B04-G1 | 카드 재확인 — 런타임 스냅샷의 V1·V2 동형 검사 | 결정론 방어층(정정 사이 표류 차단) | G① | V1·V2와 동일식 (SLOAD 재검) | 동일 코드 | +| B04-G2 | 엔진 식별 — txEngine의 결정론 산출 | 호출 경로 = 엔진(§5.4) | G② | txEngine ∈ VALID_ENGINES (Router 라우팅 컨텍스트) | FAIL_ENGINE_UNKNOWN | +| B04-G3 | 선언 소속 — txEngine ∈ supportedEngines | 카드 선언의 집행(§3.0.1) | G③ | bit(txEngine) AND supportedEngines ≠ 0 | FAIL_ENGINE_NOT_SUPPORTED | +| B04-G4 | 경로 정합 — §4(a)(7) 경로의 무권유 부합 엔진 | §77d(d)(2)(§3.8)·502(c)(§3.9) | G④ | resalePath = SEC4A7 ⇒ txEngine ∈ NO_GS_ENGINE_SET (현행 {RFQ}) | FAIL_ENGINE_PATH_INCOMPATIBLE | +| B04-G5a | 계열 정합 — affiliate 매도의 (f) 부합 엔진 | 144(b)(2)(§3.3)·(f)(1)(§3.4) | G⑤ | affiliateOverlayActive ⇒ txEngine ∈ AFFILIATE_ENGINE_SET (현행 {RFQ}) | FAIL_ENGINE_AFFILIATE_INCOMPATIBLE | +| B04-G5b | 상대방 자격 — 계열 RFQ 매수인의 MM claim | 144(f)(1)(ii)(§3.4)·§3(a)(38)(§3.6) | G⑤ | affiliateOverlayActive ∧ txEngine = RFQ ⇒ hasValidClaim(buyer, MARKET_MAKER_STATUS) (만료는 A-11 소관) | FAIL_ENGINE_MM_CLAIM_MISSING | +| B04-GOV | 상수 규율 — VALID·AFFILIATE·NO_GS 집합의 변경은 거버넌스 경로만 | (g)(3)(iv) 편입 조건(§3.7)·33-8869 취지(§3.13) | GOV | 게이트가 아닌 전제 — 완화 방향(집합 확대) 변경은 다중서명·time-lock + 법적 근거 등록 필수(§11) | (우회 시도는 B-01 버전 검사로 표면화) | + +**두 가지 판독 규칙.** ① 모든 overlay는 **좁히는 방향으로만** 작동한다 — G④·G⑤는 선언 집합의 부분집합을 요구할 뿐, 선언에 없는 엔진을 열어 주지 못한다(G③이 항상 선행). "affiliate가 아니니 AMM 허용" 같은 역방향 완화 추론은 존재하지 않는다 — 비계열이라도 G③(선언 소속)은 그대로 걸린다. ② overlay 간은 **교집합**이다 — 한 거래에 G④·G⑤가 동시에 활성이면(계열 매도가 §4(a)(7) 경로) txEngine은 두 집합 모두에 속해야 한다. 현행 두 상수가 모두 {RFQ}라 결과가 같지만, 집합이 분화되는 미래(오더북의 일부 편입 등)에 합집합으로 구현하는 오류를 회귀로 고정한다(§7 T6). + +### 3.16 ERC-3643 변환·엔진 선언 필드 총정리 + +§3.1~§3.14에 흩어진 변환을 한곳에 모은 것이다. B-04의 필드는 세 층으로 나뉜다 — 자산 레벨 상수(ManifestCore), 거버넌스 평면 상수(플랫폼 공통), 거래 컨텍스트(Router 공급). 사람 claim(MM claim)만 ONCHAINID 층에 산다. + +| 층 | 필드 | 값·형식 | 근거 조문 | 소비·비고 | +| --- | --- | --- | --- | --- | +| 자산 카드 (ManifestCore) | facts.supportedEngines | uint8 bitset — bit0 = RFQ, bit1 = OB, bit2 = AMM | 카드 선언 규율(§3.0.1) | G①·G③; 무결·변경 통제는 B-01(정정 버전·승인 사슬) | +| 자산 카드 | facts.securityType | {EQUITY, DEBT, ...} | 144(f)(3)(ii)(§3.4) | DEBT ⇒ 계열 overlay 비활성; 분류 자체는 B-01·B-03 소관 | +| 자산 카드 | facts.fundRecipeId | uint16 (0 = none) | §3(c)(7) 결합 심사(§3.0.1) | V3b REVIEW 트리거 | +| 거버넌스 상수 | VALID_ENGINES | {RFQ, OB, AMM} | 유효 enum 규율 | V2·G2; 확장은 신규 엔진 심사 후 | +| 거버넌스 상수 | AFFILIATE_ENGINE_SET | {RFQ} (현행) | 144(f)(1)(ii)(§3.4)·§3(a)(38)(§3.6) | G⑤a; 확대 조건: (i) 갈래는 brokerIntegrated + (g) 체계(§3.5·§3.7), (iii) 갈래는 SRO 보고 체계 | +| 거버넌스 상수 | NO_GS_ENGINE_SET | {RFQ} (현행) | §77d(d)(2)(§3.8)·502(c)(§3.9) | G④; 오더북 편입은 OD-B04-3 해소 후 | +| 거버넌스 사실 | platform.brokerIntegrated | bool = false (현행) | §4(a)(4)(§3.5)·(g)(§3.7) | (i)·(iii) 갈래 개폐의 전제 사실 | +| 거래 컨텍스트 | txContext.txEngine | enum ∈ VALID_ENGINES | 호출 경로 결정론(§5.4) | G②·G③; Router가 라우팅에서 산출 | +| 거래 컨텍스트 | txContext.sellerIsAffiliate · sellsForAffiliateAccount | bool (90일 tail 포함) | 144(b)(2)(§3.3) | G⑤ 활성식; 산출은 A-06 | +| 거래 컨텍스트 | txContext.resalePath | enum {RULE144, SEC4A7, ...} | §77d(a)(7)(§3.8) | G④ 활성식; 산출은 C-00 | +| ONCHAINID claim | topic = MARKET_MAKER_STATUS | data = {bdRegistrationRef, securityScope = tokenId, quotingEvidenceRef} | §3(a)(38)·(a)(5)(§3.6) | G⑤b; 발급 L2 Trusted Issuer, 만료 A-11 | +| 기록·서약 | noSolicitationAttestation · noSidePaymentAttestation | 매도 주문 첨부 기록 | 144(f)(2)(§3.4) | 게이트 아닌 기록 — 실질 감시는 C-09·F-02 | +| 이벤트 | B04Check | {tokenId, cardVersion, txEngine, overlays 활성·결과, 집합 상수 버전 해시} | 보존·재구성 규율 | 감독 검사 시 "그 거래가 어느 엔진·어느 상수로 판정됐나"의 바이트 단위 재구성(§11) | +| 예약 필드 (미래) | obBrokerPath | {brokerId, atsQuoteLog(직전 12영업일 양방향 비트맵)} | (g)(3)(iv)(§3.7)·33-8869(§3.13) | BD 통합 시 (i) 갈래 편입용 — 현행 미구현 | + + +## §4. ② 입력 사실 — 판정에 필요한 데이터 + +### 4.1 본 부품이 판정하려면 어떤 증거가 필요한가 + +B-04의 입력은 세 층에서 온다. ① **자산 카드 상수** — 이 자산이 열어 둔 엔진 집합(supportedEngines)과, overlay 적용 여부를 가르는 자산 성격(securityType·fundRecipeId). 전부 상장 시점에 봉인되고 정정 버전으로만 바뀐다(B-01 규율). ② **거버넌스 평면 상수** — 법이 허용하는 엔진의 플랫폼 공통 지도(VALID_ENGINES·AFFILIATE_ENGINE_SET·NO_GS_ENGINE_SET·brokerIntegrated). 자산이 아니라 법 상태의 함수라서 카드 밖에 산다 — 조문·해석이 바뀌면 자산 전부를 정정하는 대신 상수 한 곳을 거버넌스 경로로 바꾼다. ③ **거래 컨텍스트** — 이 거래가 어느 엔진을 타는지(txEngine, Router가 라우팅에서 산출), 매도인이 계열인지(A-06 산출), 어느 재판매 경로인지(C-00 산출), 그리고 계열 RFQ에서만 필요한 상대방 MM claim(ONCHAINID 층). B-04 스스로 만들어내는 사실은 없다 — 전부 다른 부품·층이 확정한 값의 소비자이며, 그래서 판정이 순수 결정론으로 남는다. + +### 4.2 Data field — DEX가 실제로 읽는 항목 + +| 필드 | 층 | 형식 | 공급자 | 읽는 검사 | +| --- | --- | --- | --- | --- | +| facts.supportedEngines | 자산 카드 | uint8 bitset (bit0 RFQ · bit1 OB · bit2 AMM) | 발행자 선언 + 상장 심사 | V1·V2·G①·G③ | +| facts.securityType | 자산 카드 | enum {EQUITY, DEBT, ...} | 발행자 선언 + B-01·B-03 정합 | G⑤ 예외 분기((f)(3)(ii)) | +| facts.fundRecipeId | 자산 카드 | uint16 (0 = none) | 발행자 선언 | V3b REVIEW 트리거 | +| VALID_ENGINES | 거버넌스 상수 | bitset = {RFQ, OB, AMM} | Operator 거버넌스 | V2·G② | +| AFFILIATE_ENGINE_SET | 거버넌스 상수 | bitset = {RFQ} (현행) | Operator 거버넌스(§11) | G⑤a | +| NO_GS_ENGINE_SET | 거버넌스 상수 | bitset = {RFQ} (현행) | Operator 거버넌스(§11) | G④ | +| platform.brokerIntegrated | 거버넌스 사실 | bool = false (현행) | Operator 거버넌스 | 상수 확대 심사의 전제(게이트 불사용) | +| txContext.txEngine | 거래 컨텍스트 | enum | Router (호출 경로에서 결정론 산출, §5.4) | G②·G③·G④·G⑤ | +| txContext.sellerIsAffiliate / sellsForAffiliateAccount | 거래 컨텍스트 | bool (90일 tail 포함) | A-06 | G⑤ 활성식 | +| txContext.resalePath | 거래 컨텍스트 | enum {RULE144, SEC4A7, ...} | C-00 | G④ 활성식 | +| buyer claim: MARKET_MAKER_STATUS | ONCHAINID | claim {bdRegistrationRef, securityScope, quotingEvidenceRef} | Trusted Issuer (L2) | G⑤b (존재·서명·미만료 — 만료는 A-11) | +| venuePoolRegistered(tokenId) | 배선 사실 | bool | B-02·Factory (CREATE2 사전 등록) | V3a | + +### 4.3 수집 경로 — 5단계 흐름 + +① **상장 신청** — 발행자가 카드에 supportedEngines를 선언한다. 선언은 법적 자기구속이다: "이 자산의 거래는 이 방식 안에서만 돈다"는 발행자·counsel의 판단을 카드에 봉인하는 행위. ② **상장 심사(V 채널)** — Operator가 V1~V3을 돌린다: 비영·유효집합·AMM 구조 전제, 그리고 펀드형 + AMM 결합의 REVIEW(§11.1). 통과분만 발효 버전이 된다. ③ **거버넌스 상수** — 플랫폼 공통 집합 셋은 본 문서 §3의 조문 대조가 확정한 현행값({RFQ} 둘, VALID 셋)으로 배포되고, 변경은 다중서명 + time-lock + 법적 근거 등록으로만 이뤄진다(§11.2). ④ **런타임 컨텍스트** — 거래가 들어오면 Router가 호출 경로에서 txEngine을 산출하고, union 상류의 A-06·C-00 산출(flag·path)을 컨텍스트에 싣는다. ⑤ **MM claim** — 계열 RFQ의 상대방이 되려는 참여자는 사전에 Trusted Issuer로부터 MARKET_MAKER_STATUS claim을 발급받아 둔다(발급 기준: 등록 BD 확인 + 이 토큰에 대한 호가 규칙성 — §10·§11.3, 정량 기준 OD-B04-2). + +### 4.4 조건별 필수 확인 항목 전체 표 + +아래는 예시가 아니라 각 판정 국면의 **필수 확인 항목 전체**다 — 공통 행 + 국면별 항목. + +| 국면 | 공통 확인 (모든 국면) | 국면별 필수 항목 | +| --- | --- | --- | +| 기본 게이트 (모든 거래) | 카드 버전 유효(B-01 선행 PASS) · supportedEngines 비영·유효 | ① txEngine 식별값 존재 ② bit(txEngine) AND supportedEngines ≠ 0 | +| 경로 overlay (resalePath = SEC4A7) | 상동 + C-00의 경로 태그 확정 | ① txEngine ∈ NO_GS_ENGINE_SET ② (기록) 표적 요청 로그 — 요청 수신자 목록의 특정성 | +| 계열 overlay (affiliate 매도) | 상동 + A-06 flag(90일 tail 포함) 확정 | ① facts.securityType ≠ DEBT 확인((f)(3)(ii) 예외 분기) ② txEngine ∈ AFFILIATE_ENGINE_SET ③ txEngine = RFQ면 buyer의 MARKET_MAKER_STATUS claim — 서명 유효·미만료(A-11)·securityScope = 이 토큰 ④ (기록) 매도 주문의 (f)(2) 서약 플래그(무권유·무측면지급) ⑤ (기록) RFQ 요청 수신자가 MM claim 보유자로 한정됐는지의 엔진 설정 스냅샷 | +| AMM 거래 (txEngine = AMM인 자산) | 상동 | ① AMM ∈ supportedEngines(V3 통과 자산만 도달 가능) ② pool 주소의 venue 등재(B-02가 배선 층에서 보증 — B-04는 상장 시점 V3a로만 확인) | + +## §5. ③ 판정 로직 — 어떻게 PASS/FAIL이 결정되는가 + +### 5.0 판정 흐름 플로우차트 + +![](B-04_fig50.png) + +*그림 5.0 — 판정 로직 흐름: 상장 채널 V1~V3과 거래 채널 G①~G⑤ (개발자용)* + +### 5.1 전체 흐름 (사람 말로) + +판정은 두 채널이다. **상장 채널**에서는 카드가 발효되기 전에 선언 자체를 검사한다 — 엔진 칸이 비어 있지 않은가(V1), 미지의 값이 섞이지 않았는가(V2), AMM을 선언했다면 그 구조 전제(venue pool 등재)가 실재하고 자산 성격(펀드형)과 충돌하지 않는가(V3). **거래 채널**에서는 거래마다 다섯 걸음을 걷는다 — 카드 스냅샷 재확인(G①), 이 거래가 어느 엔진을 타는지 식별(G②), 그 엔진이 선언 집합에 속하는지(G③), §4(a)(7) 경로면 무권유 부합 엔진인지(G④), 계열 매도면 (f) 부합 엔진 + 상대방 MM claim인지(G⑤). 다섯 걸음 전부 조회·비트 연산·존재 확인이라 재량이 끼어들 틈이 없고, 하나라도 걸리면 그 자리에서 사유 코드와 함께 선다. + +### 5.2 Pseudocode + 단계별 해설 + +``` +// ── 상장 채널 (Listing-time V-checks) ────────────────────────── +function validateEngineDeclaration(card): + se = card.facts.supportedEngines + if se == 0: return FAIL_ENGINE_DECL_MISSING // V1 + if se & ~VALID_ENGINES: return FAIL_ENGINE_DECL_INVALID // V2 + if AMM ∈ se: + if !venuePoolRegistered(card.tokenId): + return FAIL_ENGINE_VENUE_UNREGISTERED // V3a + if card.facts.fundRecipeId != 0: + queue(REVIEW_ENGINE_FUND_AMM); hold() // V3b + return LISTING_OK + +// ── 거래 채널 (Per-tx G-checks) ──────────────────────────────── +function checkB04(tx, card, gov): + // G① 카드 재확인 — 정정 사이 표류 차단 (SLOAD 1회 + 비트 연산) + se = card.facts.supportedEngines + if se == 0: return FAIL_ENGINE_DECL_MISSING + if se & ~gov.VALID_ENGINES: return FAIL_ENGINE_DECL_INVALID + + // G② 엔진 식별 — Router 라우팅 컨텍스트 (호출 경로 = 엔진, §5.4) + e = tx.txEngine + if e ∉ gov.VALID_ENGINES: return FAIL_ENGINE_UNKNOWN + + // G③ 선언 소속 — 카드 선언의 집행 + if (bit(e) & se) == 0: return FAIL_ENGINE_NOT_SUPPORTED + + // G④ 경로 overlay — §4(a)(7) ⇒ 무권유 부합 엔진 (§77d(d)(2)) + if tx.resalePath == SEC4A7 ∧ e ∉ gov.NO_GS_ENGINE_SET: + return FAIL_ENGINE_PATH_INCOMPATIBLE + + // G⑤ 계열 overlay — 144(b)(2)·(f) + if tx.sellerIsAffiliate ∨ tx.sellsForAffiliateAccount: + if card.facts.securityType != DEBT: // (f)(3)(ii) 예외 + if e ∉ gov.AFFILIATE_ENGINE_SET: + return FAIL_ENGINE_AFFILIATE_INCOMPATIBLE + if e == RFQ ∧ !hasValidClaim(tx.buyer, MARKET_MAKER_STATUS): + return FAIL_ENGINE_MM_CLAIM_MISSING + + emit B04Check(tokenId, cardVersion, e, overlayResults, govSetVersionHash) + return PASS +``` + +**단계별 해설.** G①은 상장 채널의 V1·V2를 거래 시점 스냅샷에서 동형으로 재확인한다 — 정정 버전 교체 사이의 표류·부분 반영을 잡는 방어층이고, 비용은 SLOAD 한 번과 비트 연산이라 사실상 공짜다. G②의 UNKNOWN 코드는 현행 구조에서 발생 불가에 가깝지만(호출 경로가 곧 엔진이므로, §5.4), 신규 엔진 배포가 상수 갱신보다 앞서는 배포 순서 사고를 잡는 안전핀으로 존치한다. G③이 본체의 첫 문이고, G④·G⑤는 **좁히는 overlay**다 — 순서는 싼 검사 우선 원칙을 따른다: G④는 flag 비교 하나, G⑤는 flag 비교 + 유일한 외부 조회(claim 존재)라서 맨 뒤다. G⑤ 안의 DEBT 분기는 (f)(3)(ii)의 문언 예외를 옮긴 것으로, 이 분기를 빼먹으면 채무증권 계열 매도까지 막는 과잉 차단이 된다. emit되는 이벤트에는 판정에 쓰인 거버넌스 상수의 버전 해시가 실린다 — "그 거래가 어느 법 지도로 판정됐는가"를 사후에 재구성하기 위해서다(§11.5). + +### 5.3 Threshold·방향 매트릭스 + +B-04에는 크기 비교(>, ≥)가 없다 — 모든 검사가 **비영 · 집합 소속 · 함의 · 존재** 넷 중 하나다. 그래서 경계값 표 대신 문법·방향 표를 고정한다. + +| 검사 | 문법 | 통과 조건 | 자주 틀리는 지점 | +| --- | --- | --- | --- | +| V1/G① 존재 | 비영 | se ≠ ∅ | "미기재 = 전 엔진 허용" 디코더 기본값 — 결측은 개방이 아니라 결측이며, fail-closed가 유일한 안전 방향 | +| V2/G① 유효 | 집합 소속 | se ⊆ VALID_ENGINES | 미지 비트를 조용히 마스킹(AND로 지움)하고 통과 — 미지 비트의 존재 자체가 카드 오류이고 코드가 다르다 | +| G③ 소속 | 집합 소속 | bit(e) AND se ≠ 0 | 선언을 프런트 UX 필터로만 쓰고 온체인 게이트를 생략 — 직접 컨트랙트 호출 우회가 열린다 | +| G④ 경로 | 함의(비대칭) | SEC4A7 ⇒ e ∈ NO_GS_SET | 역방향 과잉: RULE144 경로에 RFQ를 강제 — 비계열 Rule 144에는 방식·권유 축이 없다(§3.8 대칭 유의) | +| G⑤a 계열 | 함의(비대칭) | AFF ⇒ e ∈ AFF_SET | ① 90일 tail 누락("사임했으니 자유") ② DEBT 예외 누락(과잉 차단) — 둘 다 회귀 고정(§7 T8·§3.4) | +| G⑤b 상대방 | 존재(+scope) | AFF ∧ RFQ ⇒ MM claim 유효 | claim의 "존재"만 보고 securityScope(이 토큰)·만료를 무시 — scope는 발급 기준서(§11.3), 만료는 A-11이 각각 지탱하며 셋 중 하나라도 빠지면 구멍 | +| overlay 결합 | 교집합 | 동시 활성 시 두 집합 모두 소속 | 합집합 구현 — 현행 두 상수가 같아 증상이 숨는다; 집합 분화 시점에 터지므로 T6 교집합 케이스를 지금 회귀에 고정 | + +### 5.4 엔진 식별의 결정성 — Router는 txEngine을 어떻게 아는가 + +txEngine은 사용자가 적어 내는 메타데이터가 아니다. **호출 경로가 곧 엔진이다** — RFQ 체결·오더북 매칭·pool swap은 각각 다른 진입 함수·다른 결제 위상을 타고, Router는 자신이 어느 경로를 실행 중인지를 구조적으로 안다. 그래서 txEngine은 위조 불가능한 결정론 산출값이고, "엔진을 속여서 게이트를 통과"하는 공격면이 원천적으로 없다. 위상의 차이는 B-02와의 협응 지점이기도 하다 — RFQ·오더북은 매도인→매수인 1-hop, AMM은 매도인→pool·pool→매수인 2-hop이며, B-02의 이전가능성 프로브는 실제 결제 홉과 동일 위상으로 호출되어야 한다(OD-B02-2와 병합 확정 대상). B-04 관점의 요점: 엔진 식별(G②)은 프로브 위상 결정보다 **상류**에서 확정되고, 그 값이 B-02·본 부품·기록 계층에 일관되게 공급되어야 한다 — 식별과 위상이 어긋나면 프로브의 fail-fast가 거짓 보증이 된다. + +### 5.5 비결정성을 결정성으로 — 본 부품 구현의 본질 + +매도 방식 요건의 원문은 비결정 판단으로 가득하다 — "권유"인가, "market maker"인가, "usual and customary"인가. B-04는 이 판단들을 세 자리로 밀어내고 게이트에는 집합 연산만 남긴다. ① **입법·해석 판단 → 거버넌스 상수**: 어떤 엔진이 어떤 갈래에 부합하는가는 본 문서 §3의 조문 대조가 확정했고, 그 결과가 세 집합 상수로 봉인된다 — 법이 바뀌면 상수가 바뀌지 게이트 코드가 바뀌지 않는다. ② **자산 판단 → 카드 선언**: 이 자산에 어떤 엔진을 열지는 발행자·counsel의 상장 시점 판단이고, 카드에 봉인된다. ③ **자격 판단 → claim**: 상대방이 market maker인지는 검증기관의 off-chain 실사이고, 서명 claim으로 봉인된다. 게이트에 남는 것은 "봉인된 값들의 집합 관계"뿐이다. B-04에 남는 유일한 비결정성은 봉인 자체의 진실성인데 — 상수는 §11의 변경 규율이, 선언은 상장 심사·발행자 보증·A-12가, claim은 발급 기준서·A-11이 각각 격리한다. 이 격리가 유지되는 한 B-04는 reasonable belief도 manual review도 없는 순수 기계 게이트로 남는다 — 단 하나의 예외(V3b 상장 REVIEW)는 거래 차단이 아닌 상장 심사 항목이다. + +## §6. ④ 거절·예외 처리 — 검사에 실패하면 어떻게 되는가 + +### 6.1 전체 흐름 (사람 말로) + +B-04의 FAIL은 원인의 주소가 둘로 갈린다 — 이 구분이 처리 흐름을 가른다. **카드·상수의 문제**(V1·V2·V3a·G①)는 자산 쪽 사정이다: 당사자가 고칠 수 있는 것이 아니므로 즉시 거절하고, 같은 카드 버전을 딛는 그 자산의 모든 후속 거래가 같은 코드로 막히며, 해소는 정정 버전뿐이다(B-03과 같은 문법). **거래 조건의 문제**(G③·G④·G⑤)는 이 거래의 구성이 법 지도와 안 맞는 것이다: 자산도 당사자 자격도 멀쩡하고, **다른 엔진(또는 다른 상대방)으로 같은 거래를 다시 구성하면 통과할 수 있다.** 그래서 거절이되 막다른 거절이 아니고, 안내가 행동 가능해야 한다(§6.4). 두 경우 모두 런타임에 사람이 "이번만 통과" 시킬 문은 없다 — 예외는 상수·카드·claim의 사전 등록 경로로만 들어온다. + +### 6.2 Failure codes 7종 + REVIEW 1종 + +| 코드 | 관문 | 의미 | 해소 경로 | 기록 항목 | +| --- | --- | --- | --- | --- | +| FAIL_ENGINE_DECL_MISSING | V1/G① | supportedEngines 결측·∅ — 엔진 칸이 비어 있다 | 정정 버전으로 선언 기재(상장 pre-flight 누락의 사후 발견) | 카드 버전 | +| FAIL_ENGINE_DECL_INVALID | V2/G① | 유효 집합 밖 비트 — 미지 엔진 선언 | 정정 버전으로 법정 집합 내 값 교정 | 무효 비트·유효 집합 버전 | +| FAIL_ENGINE_VENUE_UNREGISTERED | V3a | AMM 선언인데 venue pool 미등재 | Factory 사전 등록 절차 완료 후 재심사 | tokenId·pool 예정 주소 | +| FAIL_ENGINE_UNKNOWN | G② | 라우팅 컨텍스트의 엔진 식별값이 유효 집합 밖 | 배포 순서 사고 — 상수 갱신·라우팅 점검(운영 사건) | txEngine 원시값·상수 버전 | +| FAIL_ENGINE_NOT_SUPPORTED | G③ | 이 자산이 열지 않은 엔진 | 지원 엔진으로 재시도(당사자) 또는 정정 버전으로 선언 확장(발행자·심사) | txEngine·supportedEngines | +| FAIL_ENGINE_PATH_INCOMPATIBLE | G④ | §4(a)(7) 경로인데 무권유 부합 집합 밖 엔진 | RFQ로 재시도, 또는 C-00이 다른 경로 성립 시 그 경로로 | resalePath·txEngine | +| FAIL_ENGINE_AFFILIATE_INCOMPATIBLE | G⑤a | 계열 매도인데 (f) 부합 집합 밖 엔진 | RFQ(대상: MM claim 보유자)로 재시도 | affiliate flag 출처·txEngine | +| FAIL_ENGINE_MM_CLAIM_MISSING | G⑤b | 계열 RFQ인데 상대방 MM claim 부재·무효 | MM claim 보유 상대방 선택; 상대방은 L2 발급 절차로 claim 취득 가능 | buyer ONCHAINID·claim 조회 결과 | +| REVIEW_ENGINE_FUND_AMM | V3b | 펀드형 자산의 AMM 선언 — 취득자 식별 미확정 | 상장 승인 보류 — 변호사 확인(OD-B04-4) 또는 AMM 제외 선언으로 재제출 | fundRecipeId·선언 스냅샷 | + +### 6.3 Manual Review — 있는 곳과 없는 곳 + +거래 채널에는 manual review가 없다 — G①~⑤ 전부 결정론 FAIL이고 사람의 재량 통과가 불가능하다. 사람이 등장하는 자리는 셋뿐이며 모두 체결 경로 밖이다: ① **상장 REVIEW(V3b)** — 펀드형 + AMM 결합의 승인 보류 큐. 해소는 법적 확인 또는 선언 축소이지, 조건부 통과가 아니다. ② **거버넌스 상수 변경 워크플로**(§11.2) — 집합 확대(완화)의 유일한 문. ③ **MM claim 발급**(§11.3) — G⑤b의 해소가 이 절차를 경유한다. 셋 모두 심사·서명·기록을 남기며, 게이트는 그 결과값만 읽는다. + +### 6.4 Error message — 노출용 vs 내부 기록용 분리 + +원인의 주소가 둘이므로 노출 문구도 둘로 설계한다. **카드·상수 계열**(DECL_MISSING·DECL_INVALID·VENUE_UNREGISTERED·UNKNOWN)은 당사자가 취할 행동이 없고 세부는 우회 지도만 되므로 한 문장으로 통일한다: "이 자산은 현재 컴플라이언스 설정 점검 중으로 거래가 일시 제한됩니다. (코드: B04-ASSET)". **거래 조건 계열**은 행동 가능한 최소 정보만 준다 — G③: "이 자산에서 지원되지 않는 체결 방식입니다. 자산 페이지의 지원 방식을 확인해 주세요. (코드: B04-ENGINE)"(지원 집합은 자산 페이지의 공개 정보라 노출 무해); G④·G⑤a: "이 거래는 견적요청(RFQ) 방식으로만 체결할 수 있습니다. (코드: B04-TX)" — 계열 때문인지 경로 때문인지는 노출하지 않는다(계열 지위의 대외 신호화 방지); G⑤b: "선택하신 상대방과는 이 거래를 체결할 수 없습니다. 지정 유동성 공급자 목록에서 상대방을 선택해 주세요. (코드: B04-CP)". 내부 기록용은 §6.2의 코드·기록 항목 전부에 카드 버전·거버넌스 상수 버전 해시를 붙여 남긴다 — 정정 워크플로·감독 대응·C-09 후속 조사의 입력이 된다. + +## §7. ⑤ 테스트 케이스 — 스펙이 제대로 작동하는지 검증 + +### 7.1 Test 1 — Pass (기본 통과: 비계열 오더북) + +BUIDL-like 카드(supportedEngines = {RFQ, OB}), 비계열 매도인, resalePath = RULE144, txEngine = OB. 기대: G③ 소속 통과, G④ 비활성(경로 ≠ SEC4A7), G⑤ 비활성(비계열) → **PASS** + B04Check emit. 확인 포인트: 비계열 Rule 144 매도에 방식·권유 축이 걸리지 않는다는 §3.8의 대칭이 코드에 그대로 있는지 — 오더북이라는 이유만으로 막으면 과잉 차단이다. + +### 7.2 Test 2 — Fail (선언 집행: 미선언 엔진) + +같은 카드, 임의 매도인, txEngine = AMM. 기대: G③에서 **FAIL_ENGINE_NOT_SUPPORTED** — G④·⑤까지 가지 않는다(선행 차단). 확인 포인트: 프런트가 AMM 버튼을 숨기더라도 컨트랙트 직접 호출 경로에서 이 FAIL이 동일하게 나야 한다(§5.3 ③행의 우회 차단). + +### 7.3 Test 3 — Fail (계열 + 오더북: 선언돼 있어도 이 매도인에게 닫힘) + +같은 카드, 김 부장(BlackRock 임원, A-06 flag = true), resalePath = RULE144, txEngine = OB. 기대: G③ 통과(OB는 선언 집합 소속) 후 **G⑤a에서 FAIL_ENGINE_AFFILIATE_INCOMPATIBLE**. 이 케이스가 부품의 핵심 명제를 고정한다 — "선언된 엔진"과 "이 거래에 허용된 엔진"은 다른 물음이며, overlay는 선언 집합을 좁히기만 한다. + +### 7.4 Test 4 — Pass (김 부장 시나리오: 계열 + RFQ + MM claim) + +같은 카드, 김 부장, resalePath = RULE144, txEngine = RFQ, 상대방 = MARKET_MAKER_STATUS claim 보유 기관(유효·미만료·securityScope = 이 토큰). 기대: G⑤a·⑤b 통과 → **PASS** + B04Check emit(overlay 활성·결과 기록 포함). 확인 포인트: PASS가 뜻하는 범위 — 엔진 층위의 (f)(1)(ii) 부합까지이며, 방식의 실체 축(수수료 성격·조사 의무 등)은 C-09 forward임이 이벤트·문서에 명시되는지. + +### 7.5 Test 5 — Fail (계열 RFQ, 상대방 claim 부재) + +Test 4와 동일하되 상대방에 MM claim 없음(또는 만료 — 만료는 A-11이 선행 차단하므로 여기서는 부재 케이스). 기대: **G⑤b에서 FAIL_ENGINE_MM_CLAIM_MISSING**. 확인 포인트: claim "존재"만이 아니라 securityScope 불일치(다른 토큰 대상 claim)도 같은 코드로 떨어지는지 — scope 무시가 ⑤b의 대표 오구현이다(§5.3). + +### 7.6 Test 6 — Boundary/방향 (경로 쌍 + overlay 교집합) + +케이스 A: 비계열, resalePath = SEC4A7, txEngine = OB. 기대: **G④에서 FAIL_ENGINE_PATH_INCOMPATIBLE** — §4(d)(2) 무권유 축. 케이스 B(대조): 비계열, resalePath = RULE144, txEngine = OB. 기대: **PASS** — 경로별 비대칭의 회귀 고정(케이스 A를 막는 로직이 케이스 B까지 막으면 과잉). 케이스 C(교집합): 계열 + resalePath = SEC4A7 + txEngine = RFQ(MM claim 유효). 기대: **PASS** — G④·G⑤ 동시 활성 시 두 집합의 교집합 소속으로 판정됨을 고정(합집합 구현이면 집합 분화 시점에 구멍, §5.3 마지막 행). + +### 7.7 Test 7 — 카드 회귀 (결측·미지 비트 — B-01과의 분업 확인) + +케이스 A: supportedEngines = ∅. 기대: V1(상장 시) 또는 G①(정정 사고 시)에서 **FAIL_ENGINE_DECL_MISSING** — B-01의 구조·타입 무결 검사는 ∅ bitset을 통과시키므로(형식상 유효한 uint8), 비영·유효집합은 B-04의 몫이라는 분업을 고정한다. 케이스 B: bit3(미정의) 세팅. 기대: **FAIL_ENGINE_DECL_INVALID** — 미지 비트를 AND 마스킹으로 지우고 통과시키는 관용 구현 금지(§5.3 ②행). + +### 7.8 Test 8 — Cascade/tail (사임 임원의 90일 창 + 펀드형 AMM 상장) + +케이스 A: 21일 전 이사직 사임자(A-06가 90일 tail로 flag = true 유지), txEngine = OB. 기대: **G⑤a FAIL** — "사임했으니 자유 매도" 구현이 (b)(2)의 "at any time during the 90 days" 문언을 놓치는 대표 오류(§3.3). tail 만료 후 동일 거래는 PASS로 전환됨을 쌍으로 고정. 케이스 B: 펀드형 자산(fundRecipeId ≠ 0)이 supportedEngines = {RFQ, OB, AMM}으로 상장 신청. 기대: V3b에서 **REVIEW_ENGINE_FUND_AMM — 승인 보류**, 런타임 도달 전 차단. 해소 경로 두 가지(법적 확인 등록 / AMM 제외 재제출)가 모두 기록을 남기는지 확인. + + +## §8. (α) 기계 판정형 패턴 — 참조 구현 + +### 8.1 패턴 판별 + +B-04는 **Pattern A(기계 판정형)** 부품이다. 판정의 전 항목이 이미 확정된 값들의 결정론 연산 — 비영 검사, 비트 AND, 집합 소속, claim 존재 — 이고, 게이트 안에서 새로 수집하거나 평가하는 사실이 없다. STATELESS다: 거래 간에 누적되는 카운터·창이 없고(그건 C-08·D-01의 문법), 같은 입력이면 언제나 같은 출력이다. pre-trade다: 체결 이전에 revert로 서고, 사후 교정에 기대지 않는다. + +단 한 곳, G⑤b의 상대방 자격 확인은 **Pattern B(증명서형)의 국소 차용**이다 — A-03(AI 증명서)·A-13(QP 증명서)과 동일한 문법으로, 비결정 판단(이 상대방이 §3(a)(38) market maker인가)을 L2 검증기관의 off-chain 실사로 밀어내고, 게이트는 서명된 claim의 존재·유효만 읽는다. 차용이 국소라는 점이 중요하다: 증명서가 필요한 것은 계열 RFQ의 매수인 한 자리뿐이고, 나머지 판정 축은 전부 카드·상수·컨텍스트의 순수 기계 연산이다. + +### 8.2 패턴의 함의 + +Pattern A라는 사실에서 세 가지가 따라온다. ① **reasonable belief 부재** — B-04의 PASS는 "합리적으로 믿었다"가 아니라 "집합 관계가 성립했다"이다. 믿음·조사의 규율이 필요한 축(방식의 실체, MM claim의 실질)은 부품 밖(C-09·L2)에 있고, 그쪽의 부실이 게이트 PASS로 세탁되지 않도록 경계를 문서화한다(§9·§10). ② **성능 특성** — per-tx 비용이 SLOAD 1회 + 비트 연산 + (계열 RFQ에 한해) claim 조회 1회다. Router의 cumulative AND 사슬에서 가장 싼 축에 속하므로 순서상 앞쪽 배치가 자연스럽다(전체 순서는 Recipe union의 소관). ③ **회귀 안정성** — 법 상태의 변화가 게이트 코드가 아닌 거버넌스 상수에 흡수되므로, 테스트 스위트(§7)는 상수를 파라미터로 받아 현행값·미래값 양쪽에서 돌릴 수 있어야 한다. + +### 8.3 다른 부품과의 패턴 대비 + +| 비교 축 | B-04 (엔진 선택) | A-03/A-13 (자격 증명서) | C-08 (물량 한도) | C-09 (방식 실체, forward) | +| --- | --- | --- | --- | --- | +| 패턴 | A (국소 B 차용) | B | A (STATEFUL 창 집계) | B/C 성격 — 행위·실사 | +| 상태 | STATELESS | STATELESS | STATEFUL (3역월 창) | 사후 감시·기록 | +| 판정 시점 | pre-trade | pre-trade | pre-trade | post-trade 중심 | +| 비결정성의 자리 | 거버넌스 상수·카드 선언·MM claim 발급 | L2 검증기관 실사 | 앵커·집계 정의(OD) | reasonable inquiry 그 자체 | + +### 8.4 부착 좌표 — R1·R2 ● / R3·R4 — + +B-04는 R1(Reg D 506(c) 발행)·R2(재판매)에 필수(●)로 부착되고, R3(ICA §3(c)(7))·R4(시장행위)에는 부착되지 않는다(—). R3 비부착의 논리는 B-02 §8.4와 평행하다: 펀드형 자산의 거래도 반드시 발행(R1) 또는 재판매(R2) Recipe를 **경유해서** 도달하므로, R1·R2 부착만으로 모든 거래가 엔진 게이트를 통과한다 — R3에 중복 부착하면 같은 검사가 두 번 돌 뿐이다. 펀드 성격이 엔진 판정에 미치는 영향(V3b의 fund + AMM 심사)은 R3 부착이 아니라 **카드 사실(fundRecipeId)의 소비**로 구현된다 — Recipe 좌표와 사실 좌표를 혼동하지 않는 것이 이 행의 요점이다. R4 비부착은 소관 분리다: 시장행위 Recipe는 조작·감시의 축(F계열)이고, 엔진의 적법성은 거래 성립 축이다. + +## §9. (β) Coordination — 다른 부품과의 협응 + +### 9.1 협응 표 + +| 상대 | 방향 | 주고받는 것 | 경계 규칙 | +| --- | --- | --- | --- | +| A-06 (계열 판정) | A-06 → B-04 | sellerIsAffiliate·sellsForAffiliateAccount flag (90일 tail 반영) | affiliate의 실체 판정·tail 계산은 전부 A-06. B-04는 flag 소비만 — flag 재계산·보정 금지. 상시 양방향 호가와 dealer 지위의 미해결 쟁점은 OD-B04-6로 병합 | +| C-00 (경로 성립) | C-00 → B-04 | resalePath 태그 (RULE144 / SEC4A7 / ...) | 경로의 성립 요건 판정은 C-00. B-04는 태그별 엔진 집합만 겹친다. 태그 미확정 거래는 B-04에 도달하기 전에 C-00에서 선다 | +| C-09 (방식 실체, forward) | B-04 → C-09 | B04Check 이벤트·(f)(2) 서약 기록·계열 RFQ 체결 명세 | **경계의 핵심**: B-04 PASS = 엔진 층위 부합까지. (f)(2) 금지행위의 사실 감시, (g)(1)·(2)·(4)의 broker 행위·수수료·reasonable inquiry, riskless principal의 SRO 요건은 C-09. B-04 문서·이벤트에 이 한계를 명시해 PASS의 과대 해석을 차단 | +| C-08 (물량 한도) | 병렬 + 앵커 공유 | (e)(1)(ii)의 시점 앵커 문언 — "the date of receipt of the order to execute the transaction by the broker or the date of execution of the transaction directly with a market maker" | 물량 집계는 C-08. 단 앵커 문언이 **방식**(broker 주문 접수 / MM 직접 체결)을 기준일로 쓰므로, 엔진별로 그 시각이 온체인 어느 사건인지(견적 수락 vs 체결 tx)의 확정이 필요 — OD-B04-7로 등록, C-08과 공동 해소 | +| E-06 (Form 144) | B-04 → E-06 (신호) | 계열 매도 PASS 신호 + 체결 방식·시각 | (h)(3)은 통지가 "MM와의 직접 체결과 동시에(concurrently)" 전송될 것을 요구 — 계열 RFQ PASS가 E-06 워크플로의 트리거가 되고, 동시성의 기준 시각은 OD-B04-7의 앵커 확정에 종속 | +| B-01 (카드 무결) | B-01 → B-04 | 유효 카드 버전·구조 무결 보증 | B-01은 supportedEngines 필드의 존재·타입·버전 무결까지; **비영·유효집합·의미 검증은 B-04** (§7 T7의 분업). 거버넌스 상수 버전 해시의 무결도 B-01 계열 규율에 편승 | +| B-02 (토큰 표준·프로브) | 상호 | txEngine ↔ 프로브 위상(1-hop RFQ·OB / 2-hop AMM); AMM pool의 venue 등재 사실 | 프로브가 실제 결제 홉과 동일 위상으로 호출되어야 한다는 요건은 OD-B02-2와 병합 관리. pool의 IR 사전 등재(CREATE2)는 B-02·Factory 소관 — B-04는 V3a에서 등재 사실만 확인 | +| B-03 (제한 메타) | 병렬 | restricted flag·legalClassId | §4(a)(7) 경로 체결분의 restricted 의제((e)(1)(C))가 B-03 flag 유지와 정합해야 함. securityType(DEBT 분기)의 원천 분류는 B-01·B-03 | +| A-03 / A-13 (자격) | 병렬 (+ 미래 접점) | — | 매수인 자격은 두 부품 소관. AMM 편입 논의 시 "pool 매도의 취득자가 누구인가"가 두 부품의 검사 대상 특정 문제로 전이 — OD-B04-4 | +| A-01 / A-02 (KYC·제재) | 선행 | — | 모든 엔진 공통의 최전방 게이트. B-04는 이들의 PASS를 전제로 뒤에 선다(Recipe union 순서) | +| A-11 (claim 신선도) | A-11 → B-04 | MM claim의 미만료 보증 | claim 만료·재검증 주기는 A-11의 보편 규율에 편승 — B-04가 자체 만료 로직을 갖지 않는다 | +| A-12 (red flag) | 상호 | 엔진 회피 패턴(오더북 차단 직후 동일 물량 RFQ 분할 등) 인지 시 신뢰 차단 신호 | A-12의 부정 게이트가 발동하면 B-04 PASS에도 불구하고 거래·계정이 정지될 수 있다 — PASS는 red flag 부재를 보증하지 않는다 | +| F-01 / F-02 (행위 감시) | B-04 → F계열 | (f)(2) 서약 기록·RFQ 요청 수신자 로그 | 무권유·무측면지급의 **실질** 감시는 F계열·C-09. B-04는 기록 생산자 | +| Router / Factory (배선) | Router → B-04 | txEngine 결정론 산출·거래 컨텍스트 공급; Factory의 pool 사전 등록 | 산출 로직의 무결은 배선 층 감사 소관. B-04는 산출값의 유효 집합 소속만 검사(G②) | + +### 9.2 책임 경계 요약 + +한 문장씩으로 접으면 — 계열인지는 A-06가, 어느 경로인지는 C-00이, 그 경로·그 신분에 **어느 엔진이 허용되는지는 B-04가**, 그 엔진 안에서 방식의 실체가 지켜졌는지는 C-09가, 얼마나 팔 수 있는지는 C-08이, 신고했는지는 E-06가 책임진다. B-04의 PASS는 "이 거래가 법이 허용한 방식의 **틀 안에** 있다"는 보증이며, 틀 안에서의 행위 품질은 뒤 부품들의 몫이다. 이 경계를 문서·이벤트·노출 문구에 일관되게 새기는 것이 협응의 전부다. + +## §10. (γ) 3-Layer 구조 — 판정·발급·운영의 분리 + +### 10.1 세 층의 배치 + +**L1 (온체인 게이트)** — §5.2의 두 채널. 카드 상수·거버넌스 상수·거래 컨텍스트·claim 존재를 읽어 결정론 판정하고, B04Check 이벤트를 남긴다. 재량 없음, 상태 없음. + +**L2 (Trusted Issuer — MM claim 발급)** — 계열 RFQ의 상대방 자격이라는 유일한 비결정 판단을 담당한다. 발급 실사는 두 축이다: ① **지위 축** — 상대방이 §3(a)(5) dealer로서 등록 broker-dealer인지(CRD·SEC 등록 대조; §3(a)(38)의 전제어 충족). ② **표방 축** — "with respect to a security": **이 토큰에 관하여** 정기적·계속적 양방향 호가로 서 있는지(플랫폼 호가 로그 attestation — 기간·빈도의 정량 기준은 OD-B04-2 확정 전까지 보수 기준 운영). 발급물은 ONCHAINID claim {bdRegistrationRef, securityScope = tokenId, quotingEvidenceRef}이고, 갱신·만료는 A-11 규율에 편승한다. + +**L3 (Operator — 거버넌스·심사·기록)** — 상장 V 채널 심사(§11.1), 거버넌스 상수의 변경 규율(§11.2), MM claim 발급 기준서의 유지(§11.3), 대시보드·보존·감독 대응(§11.4~11.5)을 맡는다. L3은 개별 거래에 개입하지 않는다 — 개입 지점은 전부 사전(상수·기준서·심사)이거나 사후(기록·정정)다. + +### 10.2 책임 분배 표 + +| 실패 유형 | 1차 책임 | B-04 게이트의 위치 | 비고 | +| --- | --- | --- | --- | +| 게이트 로직 버그 (집합 연산 오류·overlay 합집합 구현 등) | L1 구현·감사 | 게이트 자신 — §7 회귀로 방지 | T6·T7이 대표 회귀 | +| MM claim 부실 발급 (비-dealer에 발급, scope 남용) | L2 검증기관 | 게이트는 서명·존재만 읽으므로 통과 — 방어는 발급 기준서·감사·claim 취소 | World Trade Financial의 규율이 시사하듯, 제3자 확인에 기대는 쪽의 부담은 남는다 — 기준서·감사 기록이 그 부담의 방어 자료 | +| 거버넌스 상수 오설정 (근거 없는 집합 확대) | L3 | 게이트는 상수를 따르므로 통과 — 방어는 §11.2의 변경 규율·이력 | 이벤트의 상수 버전 해시로 사후 특정 가능 | +| 카드 선언 허위·부적정 (자산 성격과 모순되는 선언) | 발행자 (+ 상장 심사) | V 채널·V3b가 1차 필터 | 발행자 보증·A-12 red flag와 연동 | +| 방식 실체 위반 ((f)(2) 권유·측면지급 등) | 매도인 (+ C-09 감시) | **게이트 소관 밖** — PASS가 면책이 아님을 문서화 | §9.1 C-09 행 | + +## §11. (δ) Operator 운영 절차 + +### 11.1 상장 심사 — V 채널 운영 + +상장 신청 접수 시 V1~V3을 자동 실행하고, 결과를 심사 기록에 남긴다. V1·V2·V3a FAIL은 반려(사유 코드 통지, 재제출 안내). **V3b REVIEW**는 보류 큐로: 펀드형 자산(fundRecipeId ≠ 0)이 AMM을 선언한 경우, ① 발행자에게 취득자 식별 구조에 대한 법률 확인(counsel opinion) 제출을 요구하거나 ② AMM 제외 선언으로 재제출을 안내한다. 어느 쪽이든 결정·근거를 심사 기록에 남기고, ①의 확인이 등록되기 전에는 발효시키지 않는다(OD-B04-4 해소 전 기본값: ② 유도). 심사 통과분만 발효 버전이 되며, supportedEngines의 사후 변경은 전부 정정 버전 절차(B-01)를 탄다. + +### 11.2 거버넌스 상수 변경 규율 + +세 집합 상수(VALID·AFFILIATE·NO_GS)와 brokerIntegrated 사실의 변경은 방향에 따라 규율이 다르다. **완화(집합 확대·true 전환)** — 다중서명 승인 + time-lock 경과 + **법적 근거 문서의 사전 등록**(어느 조문·해석·relief에 근거해 확대하는지: 예컨대 오더북의 AFFILIATE_ENGINE_SET 편입이라면 (g)(3)(iv) 요건 충족 체계의 증빙)이 전부 갖춰져야 발효된다. **강화(집합 축소)** — 위험 축소 방향이므로 신속 경로를 허용하되, 발효 시점에 **잔존 주문 처리 규칙**을 함께 집행한다: 축소로 부적합해진 기존 오더북 게시 주문은 발효 블록부터 체결 불가(게이트가 자동 차단)이며, Operator는 게시자에게 취소 안내를 발송하고 유예 기간 내 미취소분을 일괄 취소 처리한다 — "게시 시점에 적법했다"는 주문이 체결 시점 게이트를 통과하는 일이 없도록. 모든 변경은 버전 해시 이력으로 남고, 이벤트의 govSetVersionHash와 연결된다. + +### 11.3 MM claim 발급 기준서 + +L2 검증기관이 따를 기준서를 Operator가 유지한다(정량 기준은 OD-B04-2 확정 전 보수 운영). 최소 구성: ① 지위 확인 — SEC/FINRA 등록 broker-dealer 대조(CRD 번호·등록 상태·statutory disqualification 부재), ② 표방 확인 — 신청 토큰(securityScope)에 대한 호가 활동 로그(플랫폼 RFQ 응답·호가 게시 이력)의 attestation; 최초 발급 시 활동 이력이 없는 경우 **조건부 발급 + 초회 갱신 시 로그 충족 확인**의 2단 구조, ③ 유효기간·갱신 — A-11 주기 규율 편승, ④ 취소 사유 — 등록 말소·징계·호가 활동의 실질 중단·부정 발급 발견, ⑤ 기록 — 발급·갱신·취소의 근거 문서 보존. RFQ 엔진 설정에서 **계열 매도 건의 요청 수신 대상을 claim 보유자로 한정**하는 스위치를 기본 ON으로 운영한다(§3.4 (f)(2)(i) 보수 규범; 강제 수준의 법적 확정은 OD-B04-5). + +### 11.4 대시보드·지표 + +운영 대시보드에 최소 다음을 상시 표시한다 — FAIL 코드 분포(특히 NOT_SUPPORTED·AFFILIATE_INCOMPATIBLE의 급증은 프런트 안내 부실 또는 회피 시도 신호), 계열 매도 중 RFQ 체결 비중(항상 100%여야 정상 — 예외 발생은 즉시 사고), 자산별 MM claim 커버리지(활성 claim 보유자 수 — 0인 자산은 계열 매도가 사실상 불가능한 상태이므로 발행자 고지), V3b 큐 체류 건수·기간, FAIL_ENGINE_UNKNOWN 발생(0이 정상 — 1건이라도 발생 시 §11.6 런북). + +### 11.5 보존·export·신고 연동 + +B04Check 이벤트(카드 버전·상수 버전 해시 포함), 거버넌스 상수 변경 이력, 상장 심사 기록, MM claim 발급·취소 기록을 보존 대상으로 묶는다 — 온체인 해시 + 오프체인 원본의 이중 구조로, 감독 검사 시 "특정 거래가 어느 선언·어느 상수·어느 claim으로 판정되었는가"를 바이트 단위로 재구성·제출할 수 있어야 한다(17a-4 audit-trail 대안 구조와 정합; 보존 연한은 플랫폼 공통 정책 — 6년 권고 — 에 편승). **E-06 연동**: 계열 매도 PASS 이벤트는 Form 144 워크플로의 트리거 신호로 전달된다 — (h)(3)의 동시 전송 요건 때문에 신호는 체결과 실시간으로 흘러야 하며, "체결"의 기준 시각 확정은 OD-B04-7에 종속된다. + +### 11.6 사고 대응 런북 (요지) + +UNKNOWN 발생 — 신규 엔진 배포와 상수 갱신의 순서 사고가 유력: 해당 라우팅 경로 일시 정지 → 상수·배포 이력 대조 → 정합 회복 후 재개, 전 과정 기록. 상수-이벤트 해시 불일치 — B-01 계열 무결 사고로 격상 처리. MM claim 부정 발급 인지 — 즉시 claim 취소 + 해당 claim으로 통과한 체결 목록 추출(이벤트 조회) + C-09·법무 인계. + +## §12. Open Issues — 미해결 쟁점 등록부 + +각 항목은 보수적 기본값으로 현행 스펙에 반영되어 있으며, 해소 시 §11.2의 규율로 상수·기준서에 반영한다. + +| ID | 쟁점 | 현행 보수 기본값 | 해소 경로 | 우선순위 | +| --- | --- | --- | --- | --- | +| OD-B04-1 | 오더북의 계열 매도 편입 조건 — 등록 BD의 실행 주체 통합 + (g)(3)(iv) "직전 12영업일 각각" 양방향 호가 체계의 요건 명세; (iii)·(iv) 중 어느 창을 표준으로 삼을지 | AFFILIATE_ENGINE_SET = {RFQ} — OB 불편입 | BD/ATS 통합 로드맵(법률의견서 Q1 트랙)과 병행하여 전문 counsel 확정 | P2 (통합 전 실익 없음) | +| OD-B04-2 | §3(a)(38) "regular or continuous basis" 표방의 정량 기준 — MM claim 발급 기준서의 호가 규칙성 수치(기간·빈도·양방향성) | 조건부 발급 + 초회 갱신 검증(§11.3) — 수치 미확정 | 변호사 확인 + 시장 관행 조사(전통 시장의 MM 의무 규정 참조) 후 기준서 v2 | P1 | +| OD-B04-3 | 폐쇄 멤버십(전원 검증 AI) 대상 오더북 게시가 §4(d)(2) "general solicitation"에 해당하는지 — pre-existing substantive relationship 논리의 적용 가능성 (Citizen VC 결의 연장) | NO_GS_ENGINE_SET = {RFQ} — OB 불편입 | 법률의견서 Q4 후속 자문; 필요 시 SEC no-action 조회 | P1 | +| OD-B04-4 | AMM 편입의 전제 — pool 매도의 "취득자" 특정(pool인가 LP 집합인가), fund형 자산의 QP 전원 확인 구조, fund + AMM 상장 허용 기준 | AMM 선언 자체는 허용하되 fund + AMM은 V3b REVIEW 보류; BUIDL-like는 AMM 미선언 | 변호사 확인(A-03·A-13 소관 쟁점과 공동); 확인 전 fund + AMM 발효 금지 | P2 | +| OD-B04-5 | (f)(2)(ii) "the broker or dealer who executes the order" 해석 — venue 수수료가 금지 지급에 해당하는지; RFQ 요청 수신 대상의 MM-only 한정을 법적 요건으로 격상할지 | 수수료 성격 미확정 상태로 C-09 forward; MM-only 스위치 기본 ON(운영 규범) | 변호사 확인(C-09 쟁점과 공동) — venue의 법적 지위 확정(Q1 트랙)에 부분 종속 | P1 | +| OD-B04-6 | 상시 양방향 호가 행태와 dealer 지위 — AMM pool·LP·플랫폼이 §3(a)(5) dealer로 성격규명될 위험; 2026-04-13 성명의 배제사유("executing or settling transactions")와의 관계 (OD-A06/OD-A08의 관련 미해결 항목 병합) | AMM 미선언(BUIDL-like)·venue 층 쟁점으로 격리 — B-04 판정에 불사용 | 전문 BD/market-structure counsel + SEC engagement (법률의견서 Q1 트랙) | P1 | +| OD-B04-7 | 엔진별 법정 시점 앵커 — (e)(1)(ii)·(h)(3)의 "execution of the transaction directly with a market maker"가 RFQ 흐름의 어느 사건인지(견적 수락 vs 온체인 체결 tx vs 결제 완결); C-08 집계·E-06 동시 전송의 공통 기준 | 온체인 체결 tx 시각을 잠정 앵커로 사용(가장 보수적·재구성 가능한 시점) | C-08·E-06와 공동 확정; A-11 §5.4의 "취득 시점" 쟁점과 같은 계열로 변호사 확인 | P2 | + +## §13. 파일명·카테고리 + +본 문서의 정식 파일명은 **B-04_engine-selection.md** (쌍: 동명 .docx)이다. 카테고리 좌표: + +| 접두 | 카테고리 | 본 부품 | +| --- | --- | --- | +| A | 사람·자격 (identity·eligibility) | — | +| B | **자산·기술 메타 (asset·technical metadata)** | **B-04 — 자산 카드의 엔진 선언과 그 집행** | +| C | 거래·경로 (transaction·path) | — (C-09가 방식 실체의 forward 상대) | +| D | 집계·한도 (aggregate·cap) | — | +| E | 신고·공시 (filing·disclosure) | — | +| F | 행위·운영 (conduct·operations) | — | + +B 소속의 의미: 판정의 뿌리가 **자산 카드의 선언 필드**이고, 거래·사람 축(C·A)은 overlay로만 얹힌다. 같은 이유로 선언의 무결·버전은 B-01, 선언의 배선(프로브·pool)은 B-02, 선언과 나란한 제한 메타는 B-03과 한 가족이다. + +--- + +## 부록 A — 조문·출처 빠른 참조 + +| 근거 | 정확한 좌표 | 출처 | +| --- | --- | --- | +| Securities Act §5 | 15 U.S.C. §77e(a)·(c) | uscode.house.gov | +| Securities Act §2(a)(11) | 15 U.S.C. §77b(a)(11) (인용은 Rule 144 Prelim. Note·33-8869 n.10 전재) | uscode.house.gov · ecfr.gov · sec.gov | +| Securities Act §4(a)(4) | 15 U.S.C. §77d(a)(4) | uscode.house.gov | +| Securities Act §4(a)(7)·(d)·(e) | 15 U.S.C. §77d(a)(7)·(d)·(e) | uscode.house.gov | +| Securities Act §4(b)·§4(c) | 15 U.S.C. §77d(b)·(c) | uscode.house.gov | +| Exchange Act §3(a)(38)·(a)(5) | 15 U.S.C. §78c(a)(38)·(a)(5) | uscode.house.gov | +| Rule 144(b)(1)·(b)(2) | 17 C.F.R. §230.144(b) | ecfr.gov | +| Rule 144(f) | 17 C.F.R. §230.144(f) | ecfr.gov | +| Rule 144(g) | 17 C.F.R. §230.144(g) | ecfr.gov | +| Rule 144(e)(1)(ii)·(h)(3) (앵커 참조) | 17 C.F.R. §230.144(e)·(h) — 본체는 C-08·E-06 소관 | ecfr.gov | +| Rule 502(c) | 17 C.F.R. §230.502(c) | ecfr.gov | +| Rule 506(c) | 17 C.F.R. §230.506(c) | ecfr.gov | +| Reg ATS Rule 300(a)·(e) | 17 C.F.R. §242.300(a)·(e) | ecfr.gov | +| Release 33-8869 | 72 FR 71546 (2007-12-06) — sec.gov/files/rules/final/2007/33-8869.pdf | sec.gov | +| Staff Statement (CUI) | File No. 4-894 (2026-04-13), Division of Trading and Markets | sec.gov | + +**인용 현행성.** 모든 eCFR 인용은 Title 17 현행본(§230 계열: 2026-07-01 기준, §242.300: 2026-07-06 기준)에서, 모든 제정법 인용은 uscode.house.gov 현행본(Title 15 §77d·§77e: 2026-06-05 시행 법률 기준, §78c: 2026-05-29 시행 법률 기준)에서 2026-07-08에 접속·대조했다. Release·Staff Statement는 sec.gov 원문 PDF·게시본 기준이며, CUI 성명의 배제사유 문언은 선행 법률의견서의 원문 대조 전재를 재인용했다. Cornell LII·Justia 등 2차 DB는 사용하지 않았다. + +## 부록 B — BUIDL-like 적용 노트 + +카드 스냅샷: supportedEngines = {RFQ, OB} (bit0·bit1 = 1, bit2 = 0) · securityType = EQUITY(지분형 펀드 지분) · fundRecipeId ≠ 0. AMM 미선언이므로 V3a·V3b는 트리거되지 않는다(V3b는 AMM ∈ se가 전제) — fund형이라는 사실만으로 REVIEW가 걸리지는 않는다는 점에 유의. + +| # | 시나리오 | 활성 overlay | 결과 | +| --- | --- | --- | --- | +| 1 | 비계열 QP → 비계열 QP, RULE144, OB | 없음 | PASS (T1) | +| 2 | 임의 매도인, AMM 호출 | — | FAIL_ENGINE_NOT_SUPPORTED (T2) | +| 3 | 김 부장(계열), RULE144, OB | G⑤ | FAIL_ENGINE_AFFILIATE_INCOMPATIBLE (T3) | +| 4 | 김 부장(계열), RULE144, RFQ → MM claim 보유 기관 | G⑤ | PASS — C-09·C-08·E-06 후속 (T4) | +| 5 | 비계열, SEC4A7, OB | G④ | FAIL_ENGINE_PATH_INCOMPATIBLE (T6-A) | +| 6 | 계열, SEC4A7, RFQ → MM | G④ ∩ G⑤ | PASS — 교집합 판정 (T6-C) | + +## 부록 C — 용어·경계 정정 노트 (구현자 대상 오해 교정) + +1. **선언 ≠ 허용.** supportedEngines는 상한이지 보증이 아니다 — 선언된 엔진도 overlay가 닫을 수 있다(T3). 반대로 overlay가 없어도 미선언 엔진은 열리지 않는다(T2). + +2. **overlay는 좁히기만 한다.** G④·G⑤는 부분집합 요구다. "비계열이니 완화" 같은 역방향 추론은 존재하지 않는다 — 완화 방향의 유일한 문은 §11.2의 거버넌스 경로다. + +3. **동시 overlay는 교집합이다.** 합집합 구현은 현행 상수에서 증상이 숨는 잠복 버그다(T6-C). + +4. **미기재 ≠ 개방.** 결측 bitset을 "전 엔진 허용"으로 읽는 디코더 기본값은 §5 기본값(금지)의 정반대다 — fail-closed(T7-A). + +5. **미지 비트는 지우는 게 아니라 세우는 것이다.** AND 마스킹 관용은 카드 오류를 삼킨다 — DECL_INVALID로 세운다(T7-B). + +6. **90일 tail.** "사임 = 자유"가 아니다 — (b)(2)의 문언은 "at any time during the 90 days immediately before the sale"이다(T8-A). tail 계산은 A-06 소관이고 B-04는 flag를 믿는다. + +7. **DEBT 예외.** (f)(3)(ii)로 채무증권은 방식 요건 밖이다 — 예외 분기 누락은 과잉 차단이다. 분류의 원천은 카드(B-01·B-03)다. + +8. **"market maker"는 행태가 아니라 법정 지위다.** 상시 양방향 호가라는 행태만으로 §3(a)(38)이 되지 않는다 — 전제어 dealer(§3(a)(5))가 필요하고, AMM pool은 그 문턱에서 탈락한다. 같은 이유로 MM claim은 "우리 플랫폼에서 활발히 호가함"의 인증이 아니라 "등록 dealer + 이 토큰 표방"의 인증이다. + +9. **RFQ의 안전은 요청 대상 설계에 있다.** 계열 매도의 견적 요청을 MM claim 보유자로 한정하는 설정이 (f)(2)(i) 권유 금지와의 마찰을 원천 차단한다 — 멤버십 전체 브로드캐스트형 RFQ는 이 부품이 말하는 RFQ가 아니다. + +10. **(g)(3)(iii)와 (iv)의 창은 다르다.** (iii) = 직전 30역일 중 ≥ 12일 + 양방향 공백 연속 ≤ 4영업일; (iv) = **직전 12영업일 전일** 양방향. ATS 편입 논의는 (iv)의 촘촘한 창을 기준으로 한다 — 두 창의 혼용은 C-08의 "four calendar weeks" 혼동과 같은 계열의 오류다. + +11. **엔진 층 ≠ venue 층.** B-04의 PASS는 거래 층의 방식 부합이다 — venue의 BD/ATS 성격규명은 별도 트랙이며, "게이트가 합법이니 플랫폼도 합법"은 성립하지 않는다(§3.11·§3.14). + +12. **PASS의 사정거리.** 계열 RFQ PASS는 (f)(1)(ii)의 엔진 층위 부합까지다 — (f)(2)·(g)의 실체, 물량(C-08), 신고(E-06)는 각자의 부품이 지고, A-12의 red flag는 PASS 위에서도 발동한다. + +## 부록 D — 결론 + +B-04는 "어디서 파느냐가 곧 법적 판단"이라는 명제를 카드 한 필드와 세 개의 거버넌스 상수, 그리고 다섯 걸음의 게이트로 접은 부품이다. 조문 대조의 결론은 명료했다 — 계열 지분증권 매도의 세 갈래 중 현행 아키텍처에서 문언 그대로 열리는 것은 market maker 직접 거래 하나뿐이고(1978년부터 "broker 경유의 대안"으로 설계된 갈래), §4(a)(7) 경로의 무권유 요건은 표적 RFQ까지만 확정적으로 감싼다. 그래서 두 overlay 상수는 모두 {RFQ}에서 출발하며, 오더북·AMM의 편입은 각각 (g)(3)(iv)의 broker 체계와 취득자 식별의 법적 정리라는, 코드가 아니라 법이 열어야 할 문 뒤에 있다. 부품의 미덕은 그 문들을 억지로 열지 않고 — 문이 열리는 조건을 문언 단위로 예약해 두고(brokerIntegrated·obBrokerPath·V3b), 열리는 날 상수 하나의 거버넌스 변경으로 흡수되도록 설계한 데 있다. 판정은 기계에, 판단은 기록된 절차에, 미해결은 등록부에 — 이 분리가 유지되는 한 B-04는 감독 검사 앞에서 "이 거래가 왜 이 방식으로 체결되었는가"를 바이트 단위로 답할 수 있는 부품으로 남는다. + +--- + +*본 문서는 Decipher RWA DEX 컴플라이언스 매트릭스의 B-04 요소 사양서다. 법률 자문이 아니며, §12의 미해결 쟁점은 자격 있는 미국 증권법 변호사의 확인 대상이다. 모든 조문 인용은 2026-07-08 기준 1차 출처 대조본이다.* \ No newline at end of file diff --git a/docs/compliance/elements/C-01.md b/docs/compliance/elements/C-01.md new file mode 100644 index 0000000..801a431 --- /dev/null +++ b/docs/compliance/elements/C-01.md @@ -0,0 +1,1606 @@ +# ELE.C-01_holding-period + +# C-01 Holding Period — 부품 심층 인수인계 문서 (Walkthrough) + +**이 문서는 무엇인가.** Decipher RWA DEX의 컴플라이언스 부품 중 하나인 Holding Period 부품(내부 식별자 C-01)을, 미국 증권법을 처음 보는 사람도 이해할 수 있도록 풀어 쓴 인수인계 문서다. 개발자·법무팀·외부 자문 변호사·학회원이 각자 작업의 base로 그대로 쓸 수 있도록 — ① 이 규제가 어디서 왔고 왜 존재하는지, ② 어떤 사실을 입력받아 ③ 어떤 로직으로 판정하고 ④ 실패하면 어떻게 처리하며 ⑤ 어떤 테스트로 검증하는지를, 기술 요소마다 풀이를 함께 붙여 설명한다. + +**한 줄로 말하면.** C-01은 **이 물량을 지금 팔아도 될 만큼 오래 갖고 있었는가**를 거래 직전에 계산한다. 자격도 신원도 물량도 보지 않는다. 오직 **시간** 하나다. + +**자체완결 원칙.** 이 문서는 다른 내부 문서를 열지 않아도 단독으로 이해되도록 작성했다. 인용은 미국 연방법·연방규칙·SEC 발행문서 등 외부 공식 자료만 사용한다. + +**출처 기준 (Version 1.0, 2026-07-18).** 본 부품의 모든 인용은 아래 1차 출처를 조회일 **2026-07-18**에 직접 대조하여 확정했다. + +| 출처 | 판(edition)·현행성 표기 | 조회처 | +| --- | --- | --- | +| 17 CFR §230.144 (Rule 144 전문) | "up to date as of 7/14/2026" · Title 17 최근 개정 2026-06-25 · 원출처 [37 FR 596, Jan. 14, 1972] | ecfr.gov | +| 15 U.S.C. §77b·§77d·§77e·§77l | prelim 현행본 · §77d 표기 "Text contains those laws in effect on June 5, 2026" | uscode.house.gov | +| SEC Release No. 33-8869 | **72 FR 71546** (면수 71546–71573, 28면) · File No. S7-11-07 · RIN 3235-AH13 · 2007-12-17 게재 · 2008-02-15 시행 | federalregister.gov · 공식 PDF는 govinfo.gov (FR-2007-12-17/07-6013) | +| Corporation Finance Interpretations — Securities Act Rules §128~§138 | 페이지 표기 "June 7, 2021 / Last Update: March 6, 2026" | sec.gov | + +ecfr.gov · uscode.house.gov · sec.gov · govinfo.gov · federalregister.gov 외의 출처는 인용하지 않는다. 영문 원문은 한 글자도 변형하지 않고 보존했다. + +**⚠ 초기 원고 대비 정정 2건**(상세는 §14 변경 로그). ① 33-8869의 시작면을 **71545 → 71546**으로 정정 — federalregister.gov의 Document Citation 및 면수 표기(71546–71573)가 근거다. ② §77d의 prelim 현행성 표기를 **June 13, 2026 → June 5, 2026**으로 정정 — 2026-07-18 조회 표기가 근거다. + +**⚠ 용어·범위 정정 노트 (읽기 전에).** + +- **C-01(보유기간) ≠ A-11(증명 유효기간).** 둘 다 "시간"을 재지만 **대상도 기산점도 다른 별개의 시계**다. C-01의 대상은 *증권 그 자체*이고 시계는 *취득 시점*부터 흐른다(Rule 144(d)). A-11의 대상은 *자격 증명*(AI claim·QP claim)이고 시계는 *증명이 검증된 시점*(verifiedAt)부터 흐른다. C-01이 보는 것은 매도인, A-11이 보는 것은 (통상) 매수인이다. 한 문장으로 — **A-11은 증명서가 상했나, C-01은 증권을 묵혔나**를 본다. + +- **보유기간은 계열/비계열을 가리지 않는다.** 흔한 오해가 "계열(affiliate)이면 더 오래 갖고 있어야 한다"는 것인데, Rule 144(d)의 기간은 **양쪽이 동일**하다(6개월 또는 1년). 계열에게 더해지는 것은 기간이 아니라 *조건의 개수*다 — (c) 공시·(e) 물량·(f)(g) 방식·(h) Form 144가 병행으로 붙는다(각각 E-05·C-08·C-09·E-06 소관). + +- **BUIDL-like 토큰의 기본값은 6개월이 아니라 1년**이다. 6개월은 Exchange Act 보고회사의 증권에만 적용되고(Rule 144(d)(1)(i)), 비보고 발행자는 1년이다(동 (d)(1)(ii)). §3.8·§5.3에서 상술한다. + +- **"헤지하면 시계가 멈춘다"는 규정은 현행 Rule 144에 없다.** SEC는 2007년에 tolling(정지) 조항을 제안했다가 **채택하지 않았다**(Release 33-8869, §3.16). 코드에 tolling 로직을 넣으면 법과 어긋난다. + +**테스트 토큰 전제 (중요).** 본 문서는 실제 BlackRock BUIDL의 발행 표준, transfer architecture, 또는 현재 운영 조건을 단정하지 않는다. 본 프로젝트는 BUIDL-like §3(c)(7) private fund interest를 ERC-3643 테스트 토큰으로 모델링하여, Rule 144(d) 기반 pre-trade transfer restriction을 검증하는 것이다. 이하 'BUIDL'·'ERC-3643' 관련 서술은 모두 이 모델링 전제 하의 것이다. + +## §1. 규제 맥락 — 이 부품이 다루는 규제는 어디서 왔는가 (Context First) + +**왜 맥락부터 읽어야 하나.** "6개월 혹은 1년을 기다려라"는 요건은 그 자체로는 자의적으로 보인다. 왜 하필 시간인가? 왜 하필 6개월인가? 이 질문에 답하지 않으면 구현은 숫자 비교 한 줄로 오그라들고, 정작 중요한 판단 — 시계를 *언제부터* 세는가, *누구의* 시계를 물려받는가, *어느 시점의* 사실로 기간 길이를 정하는가 — 이 전부 빠진다. 실제로 C-01의 난이도는 부등호가 아니라 **기산점**에 있다. 그래서 조문 넉 줄이 사다리처럼 이어지는 구조부터 깐다. + +### 1.1 네 조문이 만든 하나의 사다리 — §5 → §4(a)(1) → §2(a)(11) → Rule 144 + +미국 증권법에서 증권을 파는 행위의 **기본값은 금지**다. 1933년 증권법 §5(15 U.S.C. §77e)가 등록 없는 매도를 막는다. 팔려면 등록하거나, 면제를 찾아야 한다. + +재판매(2차 거래)에서 쓰는 면제가 §4(a)(1)이다. 조문은 짧다 — "**transactions by any person other than an issuer, underwriter, or dealer**"(발행자·인수인·딜러가 아닌 자의 거래). 일반 투자자가 자기 주식을 파는 건 이 면제로 커버된다. 문제는 가운데 단어, **underwriter**다. + +§2(a)(11)이 underwriter를 정의하는데, 그 범위가 직관보다 훨씬 넓다 — "any person who has purchased from an issuer **with a view to** ... the distribution of any security". 투자은행만이 아니라, "발행자한테서 **유통시킬 생각으로** 샀다"면 개인 투자자도 underwriter다. underwriter면 §4(a)(1) 면제가 사라지고, 등록 없이 판 그 거래는 §5 위반이 된다. + +여기서 실무가 무너진다. **"유통시킬 생각"은 사람의 머릿속**이다. 거래 시점에 확인할 방법이 없다. 그래서 Rule 144 채택 전에는 사후 정황 — 얼마나 오래 갖고 있었나, 사정 변경이 있었나 — 으로 되짚었고, 그 결과는 예측 불가능이었다. SEC의 서술을 그대로 옮기면 이렇다. + +> "Since it is difficult to ascertain the mental state of the purchaser at the time of an acquisition of securities, prior to and since the adoption of Rule 144, subsequent acts and circumstances have been considered to determine whether the purchaser took the securities 'with a view to distribution' at the time of the acquisition. Emphasis has been placed on factors such as the length of time the person held the securities and whether there has been an unforeseeable change in circumstances of the holder. Experience has shown, however, that reliance upon such factors alone has led to uncertainty in the application of the registration provisions of the Act." (17 CFR §230.144, Preliminary Note) + +SEC가 1972년에 내놓은 해법이 Rule 144이다 — **내심을 묻는 대신, 내심을 대신 증명해 줄 객관적 사실을 정해두는 것**. 그 객관적 사실 중 첫째가 보유기간이다. + +**쉽게 말하면:** 법은 "너 팔 생각으로 샀지?"를 묻고 싶은데 물어봐야 답을 검증할 수 없다. 그래서 질문을 바꿨다 — "그럼 1년 갖고 있어 봐. 1년을 버텼으면 팔 생각으로 산 게 아니었다고 쳐줄게." C-01은 그 "1년을 버텼는가"를 세는 부품이다. + +| 사다리 | 조문 | 하는 일 | Decipher | +| --- | --- | --- | --- | +| ① 기본값 | §5 · 15 U.S.C. §77e | 등록 없는 매도 금지 | 모든 재판매의 출발 전제 | +| ② 면제 | §4(a)(1) · §77d(a)(1) | issuer·underwriter·dealer가 아니면 면제 | R2 Recipe의 근거 | +| ③ 함정 | §2(a)(11) · §77b(a)(11) | "with a view to distribution"이면 underwriter | 면제를 되돌리는 조항 | +| ④ 사다리 | Rule 144 · 17 CFR §230.144 | 객관 기준 충족 시 underwriter 아님으로 간주 | C-00이 경로 선택, C-01이 (d) 담당 | + +### 1.2 Rule 144는 "면제"가 아니라 "간주"다 — 그리고 배타적이지 않다 + +정확히 해두어야 할 성격이 둘 있다. + +**첫째, Rule 144는 그 자체가 면제가 아니다.** Rule 144는 "당신은 underwriter가 아니라고 **간주**한다"고 말할 뿐이고, 그 간주 덕분에 §4(a)(1) 면제를 쓸 수 있게 되는 구조다. 그래서 Rule 144를 통과했다는 말은 "§5를 면제받았다"가 아니라 "§4(a)(1)을 쓸 자격의 안전항(safe harbor)에 들어갔다"는 뜻이다. + +**둘째, Rule 144는 배타적이지 않다.** Preliminary Note는 "Rule 144 is not an exclusive safe harbor. A person who does not meet all of the applicable conditions of Rule 144 still may claim any other available exemption under the Act for the sale of the securities."라고 명시한다. 보유기간을 못 채웠다고 해서 그 증권을 **영영 못 파는 게 아니다** — §4(a)(7)이나 Rule 144A 같은 다른 통로가 열려 있을 수 있고, 그 통로 선택은 C-01이 아니라 **C-00(전매 경로 선택기)** 소관이다. C-01은 C-00이 이미 `RULE144` 경로를 확정한 뒤에만 켜진다. + +**셋째, 기술적 충족이 끝이 아니다.** 같은 Preliminary Note의 마지막 문장 — "The Rule 144 safe harbor is not available to any person with respect to any transaction or series of transactions that, although in technical compliance with Rule 144, is part of a plan or scheme to evade the registration requirements of the Act." 계산이 맞아도 회피 계획의 일부면 안전항이 사라진다. **C-01의 PASS는 "시간축 조건 충족"이지 "safe harbor 종국 확정"이 아니다.** 이 겸손은 문서 전체에서 반복된다(§6.3·§8.2). + +### 1.3 왜 6개월과 1년으로 갈리나 — 공시 격차가 시계 길이를 정한다 + +Rule 144(d)는 하나의 기간을 두지 않고 둘로 갈린다. 갈림의 기준은 매도인이 아니라 **발행자가 Exchange Act 보고회사인가**이다. + +SEC가 2007년 개정(Release 33-8869)에서 밝힌 논거는 두 문장으로 요약된다. 하나는 기간의 **목적**이고, 하나는 차등의 **이유**다. + +> "The purpose of Rule 144 is to provide objective criteria for determining that the person selling securities to the public has not acquired the securities from the issuer for distribution. A holding period is one criterion established to demonstrate that the selling security holder did not acquire the securities to be sold under Rule 144 with distributive intent. ... we believe that a six-month holding period for securities of reporting issuers provides a reasonable indication that an investor has assumed the economic risk of investment in the securities to be resold under Rule 144." (Release 33-8869, II.B.1) + +> "We believe that different holding periods for reporting and non-reporting issuers are appropriate given that reporting issuers have an obligation to file periodic reports with updated financial information (including audited financial information in annual filings) that are publicly available on EDGAR, the Commission's electronic filing system. Although non-reporting issuers must make some information publicly available before resales can be made under Rule 144, this information typically is much more limited in scope than information included in Exchange Act reports, is not required to include audited financial information, and is not publicly available via EDGAR. For these reasons, we believe that continuing to require security holders of non-reporting issuers to hold their securities for one year is not unduly burdensome and is consistent with investor protection." (Release 33-8869, II.B.1) + +여기서 C-01 설계 전체를 지배하는 개념이 나온다 — **경제적 위험의 인수(assumption of economic risk)**. 보유기간은 날짜 세기가 아니라, "이 사람이 진짜로 이 증권의 위험을 짊어졌는가"를 시간으로 근사(proxy)한 것이다. 이 개념이 왜 중요하냐면, Rule 144(d)의 **거의 모든 예외·승계 규칙이 이 기준 하나로 설명**되기 때문이다. 위험이 그대로 이어지면 시계도 이어지고(tacking), 위험이 새로 생기면 시계도 새로 선다. §5.6에서 이 원리를 로직으로 되돌린다. + +**쉽게 말하면(비유):** 중고차를 되팔 때 "몇 달 탔느냐"를 묻는 이유는 주행거리가 궁금해서가 아니라, **전매업자인지 실사용자인지**를 가리기 위해서다. 그리고 차량 정비이력이 공개된 차(보고회사)는 6개월이면 판단이 서지만, 이력이 깜깜한 차(비보고회사)는 1년은 타 봐야 한다는 것이 SEC의 논리다. + +| | 보고 발행자 | 비보고 발행자 | +| --- | --- | --- | +| 근거 | Rule 144(d)(1)(i) | Rule 144(d)(1)(ii) | +| 기간 | 6개월 | **1년** | +| 조건 | 발행자가 매도 직전 **90일 이상 계속** §13·§15(d) 보고 대상 | 그 밖의 전부 | +| 공시 | EDGAR 정기보고서(감사받은 재무제표 포함) | Exchange Act Rule 15c2-11 수준의 제한적 정보 | +| BUIDL-like | 해당 없음 | **⭐ 해당 — 기본값 1년** | + +### 1.4 Decipher 시스템에서 왜 중요한가 — Existential Risk + +보유기간 계산이 틀리면 무슨 일이 벌어지는가. 두 방향의 오류는 무게가 전혀 다르다. + +**과잉 차단(false FAIL)** — 팔 수 있는 물량을 막는다. 사용자 불만·유동성 저하가 생기지만 법적 사고는 없다. 시간이 지나면 저절로 풀린다. + +**과소 차단(false PASS)** — 기간 미달 물량이 Rule 144 경로로 나간다. 이 경우의 경로는 단계적이다. + + 보유기간 미달 물량이 Rule 144 경로로 매도됨 + → Rule 144의 applicable conditions 미충족 → safe harbor 부적용 + → 매도인은 §2(a)(11) underwriter로 남을 수 있음 → §4(a)(1) 면제 상실 + → 등록 없는 매도 = §5 위반 + → §12(a)(1) 매수인의 취소·손해배상 소권 + SEC enforcement + → 그 매도가 발행 자체와 통합(integration)돼 R1 발행 면제까지 문제 삼힐 위험 + +마지막에서 둘째 줄이 결정적이다. 1933년법 §12(a)(1)(15 U.S.C. §77l(a)(1))은 이렇게 쓴다. + +> "Any person who— (1) offers or sells a security in violation of section 77e of this title, ... shall be liable, subject to subsection (b), to the person purchasing such security from him, who may sue either at law or in equity in any court of competent jurisdiction, to recover the consideration paid for such security with interest thereon, less the amount of any income received thereon, upon the tender of such security, or for damages if he no longer owns the security." + +**여기서 A-13(QP 부품)과의 결정적 대비를 짚어야 한다.** A-13의 §1.4는 투자회사법(ICA) 축의 존립 위험을 다루면서, ICA §47(b)의 **묵시적** 사적 소권이 *FS Credit Opportunities Corp. v. Saba Capital Master Fund, Ltd.*(608 U.S. \_\_\_, No. 24-345, 2026-06-11)로 **부정**되었음을 밝혔다. 그래서 ICA 축의 강제력은 SEC enforcement·계약 집행가능성·상업적 unwind로 옮겨 갔다. + +**증권법 축은 다르다.** §12(a)(1)은 판례가 읽어낸 묵시적 소권이 아니라 **의회가 조문에 직접 새긴 명시적 소권**이다. 매수인이 "consideration paid ... with interest"의 반환을 청구할 수 있다고 조문이 문언으로 말한다. FS Credit의 논리(묵시적 소권 부정)는 여기에 닿지 않는다. 즉 — + +- **ICA 축(A-13):** 사적 소권 ✕ → 강제력은 규제·계약·상업적 경로 +- **증권법 축(C-01·R2):** 사적 소권 ⭐ **명시적으로 존재** → 매수인이 직접 취소를 구할 수 있음 + +이 대비가 R2 Recipe의 설계 온도를 정한다. **재판매 경로에서 시간축을 틀리면, 그 손해를 청구할 사람이 조문상 이미 정해져 있다 — 바로 상대방 매수인이다.** DEX에서는 그 매수인이 익명의 다수이며, 같은 오작동이 반복되면 동일 결함을 공유하는 거래가 무더기로 쌓인다. + +**쉽게 말하면:** A-13이 실수하면 펀드가 위태로워지고, C-01이 실수하면 **거래 상대방 한 명 한 명이 각자 물릴 수 있는 소권을 손에 쥔다**. 그래서 C-01의 기본 자세는 "의심스러우면 막는다"이고, 판정 불가 시의 기본값은 언제나 더 긴 쪽(1년)이다. + +### 1.5 [경계] 이 시스템에는 시계가 여러 개다 — 어느 것이 C-01인가 + +Decipher의 부품 중 "시간"을 다루는 것이 넷이다. 서로 다른 법·다른 대상·다른 기산점이므로 하나로 합치면 반드시 오작동한다. + +| 부품 | 무엇을 재나 | 기산점 | 길이 | 근거 | +| --- | --- | --- | --- | --- | +| **C-01 (본 부품)** | 증권 lot의 보유기간 | 발행자·계열로부터의 취득(+완납) | 6개월 / 1년 | Rule 144(d) | +| A-11 | 자격 증명의 유효기간 | claim.verifiedAt | AI 5년(법정) / QP 1년(정책) | Rule 506(c)(2)(ii)(E) 등 | +| A-06 | 계열 지위의 잔존기간 | 계열 종료 시점 | (b)(1) 3개월 / (b)(2) 90일 | Rule 144(b)(1)·(b)(2) | +| C-08 | 매도 물량의 합산 창 | 매도 시점 소급 | 직전 3개월(달력월) | Rule 144(e)(1) | + +**혼동 주의 3종.** + +- ✕ "C-01의 1년과 A-11의 AI 5년은 같은 축이다" — 다른 법(1933년법 재판매 vs 506(c) 발행 검증), 다른 대상(증권 vs 증명서). +- ✕ "C-08의 3개월과 A-06의 3개월은 같은 것이다" — C-08은 *물량 합산 창*, A-06은 *계열 지위 look-back*. 우연히 숫자가 같을 뿐이며, C-08 문서가 이 혼동을 최대 오구현 위험으로 지목한다. +- ✕ "보유기간을 채우면 자유롭게 거래된다" — 아니다. Rule 144(d)를 채워도 §3(c)(7) 펀드의 QP 게이트(A-13)는 그대로 살아 있다. 증권법 축과 투자회사법 축은 나란히 작동하는 별개 축이다(A-13 §1.3). + + +## §2. 메타 정보 (Internal Identifier Box) + +아래는 Decipher 내부 PM 규약상의 식별자·분류값을 한곳에 모은 박스다. 본문에서는 이 코드들을 단독으로 쓰지 않고, "본 부품"·"보유기간 부품" 같은 자연어로 부른다. 코드는 시스템 추적용으로만 여기 둔다. + +| 항목 | 값 | 한 줄 풀이 | +| --- | --- | --- | +| 부품 이름 | Holding Period (보유기간) | 제한증권 물량의 "묵힌 시간"을 재는 계량기 | +| 검사 대상 | 매도 대상 lot이 제한증권이면, 발행자·계열로부터의 취득(및 완납) 시점부터 매도 시점까지 **6개월(보고 발행자) 또는 1년(비보고 발행자)이 경과했는가** — 승계(tacking) 사유가 있으면 승계된 기산점 기준 | "이 물량을 지금 팔 만큼 오래 갖고 있었나" | +| Internal ID | C-01 (Decipher PM 규약) | 부품 일련번호 | +| 검증 방식 | **직접 계산형(패턴 A)** — 온체인 코드가 timestamp를 직접 비교 | 증명서를 확인하는 게 아니라 날짜를 계산한다. 단 *입력*(취득 사실)의 진실성은 3층 attestation에 의존(§8·§10) | +| Timing | pre-trade(거래 체결 직전) | 거래가 일어나기 전에 막는다 | +| Stateful 여부 | **STATELESS** (Element 한정) | 자체 누적 상태·commit hook 없음. 다만 판정은 **Acquisition Registry(CR-3)** 라는 외부 원장을 read-only로 읽는 데 전적으로 의존한다 — "상태를 갖지 않되 상태에 기댄다"(§8.3) | +| 활성화 조건 | C-00의 확정 경로 == `RULE144` | §4(a)(7)·Rule 144A·Reg S 904 경로에서는 C-01이 켜지지 않는다(각 경로의 요건이 다름) | +| 주 활성화 Recipe | R2 (§4(a)(1)·Rule 144 Resale) | R2 전용 부품 — R1 발행·R3 펀드·R4 시장행위엔 붙지 않는다 | +| Cumulative Recipe | 없음 (R2 exclusive) | 다만 같은 거래에 R3(A-13 QP 게이트)가 병렬로 켜질 수 있다 — 다른 축이므로 AND 결합 | +| Cascade Element | C-00(경로 확정 · 상류) · A-06(계열 판정 → (b)(1)/(b)(2) 분기, **기간 길이엔 무영향**) · B-03(restricted 메타 · 상류) · B-01(manifest 정합) · E-05·C-08·C-09·E-06(병행 조건 · 소관 분리) | 입력을 공급하거나 병행 조건을 나눠 갖는 부품 | +| Pool·Phase | Required 19 / Phase 2 | CR-3(Acquisition Registry) 설계 결정이 blocking — 공동 설계 지점 | +| 성숙도 | ⭐ R2 핵심 (조문 요건 분해 완료 → 본 문서로 확정) | 미결은 §12 표 | +| 파일·위치 | C-01_보유기간.md · 산출물/elements/ | 산출물 경로 | + +**메타 박스에서 가장 중요한 두 줄.** + +- **"활성화 조건 = C-00이 `RULE144`를 확정했을 때"** — C-01은 전매 경로를 고르지 않는다. 경로가 정해진 다음에야 켜지는 하류 부품이다. 이 순서를 뒤집으면(C-01이 먼저 FAIL을 내고 거래를 죽이면), 보유기간을 못 채웠어도 §4(a)(7)로 팔 수 있었을 물량까지 잘못 막힌다(§1.2 "배타적이지 않다"). +- **"STATELESS인데 외부 원장 의존"** — C-08은 자기 원장을 세고 갱신하므로 STATEFUL이지만, C-01은 남이 관리하는 원장을 읽기만 하므로 STATELESS다. 이 구분이 인터페이스를 가른다 — C-01은 `onTransfer` commit hook이 필요 없고, 대신 Registry의 무결성에 자기 정확성 전체를 건다. + +## §3. ① 법적 근거 (Layer 1 → 2 → 3) + +**읽는 법.** 법적 근거는 세 겹이다 — **Layer 1**(조문)은 의회가 만든 법률 텍스트(statute), **Layer 2**(규칙)는 SEC가 그것을 실무 수준으로 구체화한 연방규칙(rule), **Layer 3**(해석)은 SEC 발행문서·Corporation Finance Interpretations가 모호한 부분을 메운 해석이다. 아래 §3.0.2 표 1의 **종류** 칸이 그대로 Layer에 대응한다 — Statute = Layer 1, SEC Rule = Layer 2, SEC Release·SEC Staff = Layer 3. 본 절은 조문이 작동하는 **논리 흐름 순서**로 배열돼 §3.1~§3.19 번호를 유지하며, 각 항목이 어느 Layer인지는 표의 종류 칸으로 확인한다. + +### 3.0 법조문 관계 플로우차트 (개발자용) + +아래 그림은 세 Layer의 조문·규칙이 C-01 판정에서 어떻게 연결되는지를 하나의 흐름으로 정리한 것이다 — §5의 등록 기본값에서 출발해 §4(a)(1) 면제가 §2(a)(11)의 "with a view to distribution" 때문에 불확실해지고(내심 확인 불가), Rule 144가 그 내심을 객관 기준으로 대체하며, 그 기준 중 (d)가 시간축을 걸고, 발행자의 보고 여부에 따라 6개월/1년으로 갈리며, (d)(1)(iii) 완납·(d)(2) 어음·(d)(3) tacking이 기산점을 조정하고, (i) shell이 경로 자체를 봉쇄하는 구조다. 각 조항의 상세는 §3.1~§3.19. + +**범례.** + +- 파랑 = 핵심(Direct: §4(a)(1)·§2(a)(11)·Rule 144(d) 본체·(d)(1)(ii)) + +- 회색 = 분기·판정 노드 · 점선 상자 = Layer 구분 + +- 초록 = PASS + +- 빨강 = FAIL·경로 봉쇄(Rule 144(i)·§12(a)(1) 위험) + +- 주황 노트 = 문제 제기(내심 확인 불가) + +![C-01 fig30 — 법조문 관계 흐름](C-01_fig30.png) + +### 3.0.1 실제 BUIDL-like 토큰은 어떻게 적용되나 + +위 그림을 우리 자산 하나에 대입하면 경로가 매우 짧아진다. BUIDL-like §3(c)(7) 펀드 토큰의 사실관계를 대입해 보자. + +| 사실 | 값 | 귀결 | +| --- | --- | --- | +| 발행 경로 | Reg D Rule 506(c) 사모 (R1) | Rule 144(a)(3)(ii) → **restricted securities** — 시계가 걸린다 | +| 발행자의 Exchange Act 보고 지위 | **비보고**(§13·§15(d) 대상 아님) | Rule 144(d)(1)(ii) → **1년** | +| 통상 매도인 | 기관 QP, 비계열 | Rule 144(b)(1)(ii) → **(d) 단독**이 유일 조건 | +| 계열 매도인 | 운용사 계열·임원 등 (A-06) | Rule 144(b)(2) → (c)(2)·(d)·(e)·(f)(g)·(h) 전부 | +| shell 여부 | 선언상 NON_SHELL (⚠ §3.14·§12) | Rule 144(i) 미해당 전제 | + +**여기서 나오는 결론 하나가 R2 전체를 규정한다.** 비보고 발행자의 **비계열** 매도인에게는, Rule 144의 조건이 **(d) 하나뿐**이다. Rule 144(b)(1)(ii)의 문언이 그렇게 쓰여 있다 — "shall be deemed not to be an underwriter ... if **the condition of paragraph (d)** of this section is met"(단수형 *condition*). 공시도, 물량도, 매도방식도, Form 144도 없다. + +즉 **BUIDL-like 토큰의 일반 보유자에게 Rule 144 재판매란 사실상 C-01 하나를 통과하는 것**이다. R2 Recipe에서 이 부품의 무게가 여기서 나온다. (계열 매도인이면 이야기가 완전히 달라져 다섯 부품이 동시에 붙는다 — §9.3.) + +### 3.0.2 조문 순서·중요성 한눈에 보기 (법 리스트) + +아래 두 표가 §3의 지도다. **표 1**(Authority)은 각 근거가 어떤 종류(=Layer)이고 무슨 내용이며 C-01에 어떻게 닿는지를, **표 2**(순서·중요성)는 §3.1~§3.19 소단원의 읽는 순서(논리 흐름)와 중요성(C-01이 실제로 그걸로 판정하는가)을 보여준다. 순서는 중요도순이 아니라 흐름순이라, 가장 중요한 Rule 144(d)(1)이 중간에 온다. + +**표 1 — Authority(근거 목록)** + +| 종류 | Authority | 내용 | C-01 관련성 | Direct/Supporting | Official URL | +| --- | --- | --- | --- | --- | --- | +| Statute | Securities Act §5 · 15 U.S.C. §77e | 등록 없는 매도 금지(기본값) | 재판매 규제의 출발 전제 | Background | uscode.house.gov | +| Statute | Securities Act §4(a)(1) · §77d(a)(1) | issuer·underwriter·dealer 아닌 자의 거래 면제 | Rule 144가 여는 목적지 면제 | Supporting | uscode.house.gov | +| Statute | Securities Act §2(a)(11) · §77b(a)(11) | underwriter 정의("with a view to ... distribution") | 보유기간 요건이 존재하는 이유 | Supporting | uscode.house.gov | +| Statute | Securities Act §12(a)(1) · §77l(a)(1) | §5 위반 시 매수인의 명시적 취소·손배 소권 | 과소 차단의 결과(§1.4) | Background | uscode.house.gov | +| Statute | Securities Act §4(a)(7)·§4(e)(1)(C) · §77d | AI 재판매 면제 + 취득분 restricted 의제 | SRC_SEC4A7 기산 분기 | **Conditional** | uscode.house.gov | +| SEC Rule | Rule 144 Preliminary Note · 17 CFR §230.144 | safe harbor 성격·비배타성·evasion 단서 | PASS의 의미 한계 설정 | Supporting | ecfr.gov | +| SEC Rule | Rule 144(a)(1)·(a)(2) | affiliate·person(합산 단위) 정의 | (b) 분기의 입력 — A-06·A-04 소관 | Supporting | ecfr.gov | +| SEC Rule | Rule 144(a)(3) | restricted securities 정의 (i)~(viii) | **시계가 걸리는 대상**을 정함 → G1 | **Direct** | ecfr.gov | +| SEC Rule | Rule 144(b)(1)(i)·(ii) | 비계열 매도인의 조건 (보고/비보고) | 비보고 → (d) 단독 → C-01 단일 관문 | **Direct** | ecfr.gov | +| SEC Rule | Rule 144(b)(2) | 계열 매도인 — "all of the conditions" | 병행 조건 배선(Recipe 몫) | Supporting | ecfr.gov | +| SEC Rule | **Rule 144(d)(1)(i)** | 6개월 — 보고 발행자 | required 산출 갈래 A | **Direct** | ecfr.gov | +| SEC Rule | **Rule 144(d)(1)(ii)** | 1년 — 비보고 발행자 | ⭐ BUIDL-like 기본값 | **Direct** | ecfr.gov | +| SEC Rule | **Rule 144(d)(1)(iii)** | 완납 전 시계 미개시 | clockStart 하한 | **Direct** | ecfr.gov | +| SEC Rule | Rule 144(d)(2)(i)~(iii) | 어음·할부는 완납 아님(3요건 예외) | HP_NOTE_TERMS_UNVERIFIED | Conditional | ecfr.gov | +| SEC Rule | Rule 144(d)(3)(i)~(x) | tacking 10종 | 승계형 sourceType 5종의 근거 | **Direct** | ecfr.gov | +| SEC Rule | Rule 144(i)(1)~(3) | shell company 배제·해제 조건 | 경로 자체 봉쇄 → G2 | **Conditional** | ecfr.gov | +| SEC Rule | Rule 144(c)·(e)·(f)·(g)·(h) | 공시·물량·방식·신고 | 병행 조건 — E-05·C-08·C-09·E-06 소관 (forward-ref) | Supporting | ecfr.gov | +| SEC Rule | Rule 502(d) · 17 CFR §230.502(d) | Reg D 재판매 제한 | (a)(3)(ii) 경유 restricted 부여 | Supporting | ecfr.gov | +| SEC Release | **Release No. 33-8869** · 72 FR 71546 (2007-12-17) | 2007 개정 — 6개월 채택·1년 유지·tolling 미채택·staff 해석 성문화 | 기간 논거 + 헤지 tolling **없음** 확인 | **Direct** | sec.gov | +| SEC Staff | CFI Securities Act Rules §132 (144(d)) — Q132.01~132.18 | 기산·tacking staff 해석 | 132.07·132.10·132.14 = 구현 핵심 | **Direct** | sec.gov | +| SEC Staff | CFI Securities Act Rules §128~§131·§133~§137 | 일반·(a)·(b)·(c)·(e)·(f)·(h)·(i) 해석 | 경계·병행 조건 이해 | Supporting | sec.gov | +| SEC Release | Release No. 33-5223 (1972) · Release No. 33-6099 (1979) | Rule 144 원채택·초기 해석 | 연혁(33-8869 인용분으로만 참조) | Background | sec.gov | + +**표 2 — 조문 순서·중요성 한눈에 보기** + +| 순서 | 조문 | 중요성 | C-01이 그걸로 하는 일 | +| --- | --- | --- | --- | +| §3.1 | §4(a)(1) — 재판매 면제 | 보조 | 안 함 — Rule 144가 도달하려는 목적지 | +| §3.2 | §2(a)(11) — underwriter 정의 | 보조 | 안 함 — 보유기간이 존재하는 이유 | +| §3.3 | Rule 144 Preliminary Note | 보조 | PASS의 의미 한계 설정(회피 계획 시 무효) | +| §3.4 | Rule 144(a)(3) — restricted 정의 | 핵심 | G1 — 시계가 걸리는 대상인지 판정(입력은 B-03) | +| §3.5 | Rule 144(b)(1)(i)·(ii) — 비계열 | 핵심 | 비보고 → (d) 단독임을 확정 | +| §3.6 | Rule 144(b)(2) — 계열 | 보조 | 안 함 — 병행 조건은 다른 부품 | +| §3.7 | Rule 144(d)(1)(i) — 6개월 | 핵심 | required = 6개월 (보고 발행자) | +| §3.8 | Rule 144(d)(1)(ii) — 1년 | **핵심(기본값)** | required = 1년 ⭐ BUIDL-like | +| §3.9 | Rule 144(d)(1)(iii) — 완납 | 핵심 | clockStart 하한 = paymentCompleteAt | +| §3.10 | Rule 144(d)(2) — 어음·할부 | 조건부 | 완납 판정의 예외 3요건 | +| §3.11 | Rule 144(d)(3)(i)~(iii) — 배당·전환·조건부 | 핵심(분기) | ⭐ 배당토큰 tacking (BUIDL-like 상시 발생) | +| §3.12 | Rule 144(d)(3)(iv)~(vii) — 질권·증여·신탁·유산 | 조건부 | 승계형 4종 + 유산 카브아웃 | +| §3.13 | Rule 144(d)(3)(viii)~(x) — Rule 145·지주회사·무현금 | — | 안 함 — 현 자산군 해당 없음(N/A) | +| §3.14 | Rule 144(i) — shell 배제 | **조건부(P0)** | G2 — 경로 자체 봉쇄 여부 | +| §3.15 | §4(a)(7)·§4(e)(1)(C) | 조건부 | SRC_SEC4A7 lot의 기산 판단 | +| §3.16 | Release 33-8869 | 핵심(해석) | 기간 논거 + **tolling 미채택** 확인 | +| §3.17 | CFI §128~§137 | 핵심(해석) | 132.07 기산 · 132.10 해당일 · 132.14 시점 | +| §3.18 | Sub-요건 분해 매트릭스 | — | 위 요건을 원자적 검증 단위로 분해 | +| §3.19 | ERC-3643 변환·sourceType 총정리 | — | §3.4~§3.15의 필드 매핑을 한 표로 | + +**경계 — 이 부품이 다루지 않는 것.** 아래는 같은 거래에 작동하지만 C-01이 아니라 다른 부품·레이어가 책임진다. 누락이 아니라 소관 분리이며, C-01 안에 끌어다 구현하지 않는다. + +- **Rule 144(c) 공시 · (e) 물량 · (f)(g) 방식 · (h) Form 144** — 계열 매도인에게 병행으로 붙는 조건. 각각 **E-05 · C-08 · C-09 · E-06** 소관. C-01은 (d)만 담당한다. + +- **Rule 144(a)(1) affiliate 판정 · (a)(2) 합산 단위** — **A-06 · A-04** 소관. C-01은 결과만 소비하며, 그 결과는 C-01의 *기간 길이를 바꾸지 않는다*(§1 정정 노트). + +- **restricted 플래그의 부여·유지** — **B-03**(이전제한 메타) 소관. C-01은 `lot.restricted`를 읽기만 한다. + +- **전매 경로 선택({RULE144, SEC4A7, RULE144A, REGS_904})** — **C-00** 소관. C-01은 `RULE144` 확정 후에만 켜진다. + +- **ICA §3(c)(7) QP 게이트** — **A-13** 소관. 별개 축이며 보유기간 충족으로 해소되지 않는다. + + +### 3.1 Securities Act § 4(a)(1) — 재판매 면제의 목적지 [uscode.house.gov] + +**핵심 원문:** The provisions of section 77e of this title shall not apply to— (1) transactions by any person other than an issuer, underwriter, or dealer. + +**한국어:** 이 편 제77e조의 규정은 다음에 적용되지 아니한다 — (1) 발행자(issuer), 인수인(underwriter) 또는 딜러(dealer) 이외의 자에 의한 거래. + +**쉬운 설명:** "발행자·인수인·딜러가 아닌 사람의 거래는 등록 안 해도 된다." 재판매(2차 거래)가 기대는 유일한 일반 면제다. 세 단어 중 앞뒤 둘(issuer·dealer)은 신원으로 판별되지만, 가운데 underwriter만은 §2(a)(11)이 "생각"으로 정의해 놓아 다툼이 생긴다. + +**PASS/FAIL 반영:** 간접 ✕ — C-01이 이 조문을 직접 판정하지 않는다. Rule 144가 도달하려는 목적지이며, C-01 FAIL의 궁극적 의미는 "이 면제를 쓸 수 없다"이다. + +**ERC-3643 변환:** 온체인 구현 없음 — R2 Recipe의 법적 전제. C-00이 `path = RULE144`를 확정할 때 이 면제를 목표로 삼는다. + +### 3.2 Securities Act § 2(a)(11) — underwriter 정의 [uscode.house.gov] + +**핵심 원문:** The term "underwriter" means any person who has purchased from an issuer with a view to, or offers or sells for an issuer in connection with, the distribution of any security, or participates or has a direct or indirect participation in any such undertaking, or participates or has a participation in the direct or indirect underwriting of any such undertaking; but such term shall not include a person whose interest is limited to a commission from an underwriter or dealer not in excess of the usual and customary distributors' or sellers' commission. As used in this paragraph the term "issuer" shall include, in addition to an issuer, any person directly or indirectly controlling or controlled by the issuer, or any person under direct or indirect common control with the issuer. + +**한국어:** "underwriter"란, 증권의 배포(distribution)를 할 목적으로(with a view to) 발행자로부터 매수한 자, 또는 그러한 배포와 관련하여 발행자를 위하여 청약을 권유하거나 매도하는 자, 또는 그러한 사업에 직접·간접으로 참가하거나 참가지분을 가진 자, 또는 그러한 사업의 직접·간접 인수에 참가하거나 참가지분을 가진 모든 자를 뜻한다. 다만 그 이해관계가 인수인 또는 딜러로부터 받는, 통상적이고 관례적인 배급자 또는 판매자 수수료를 초과하지 아니하는 수수료에 한정되는 자는 이에 포함되지 아니한다. 본 항에서 "issuer"란, 발행자에 더하여, 발행자를 직접 또는 간접으로 지배하거나 발행자에 의하여 직접 또는 간접으로 지배되는 모든 자, 또는 발행자와 직접 또는 간접의 공동지배 하에 있는 모든 자를 포함한다. + +**쉬운 설명:** 핵심은 딱 네 단어, **"with a view to"**(~할 목적으로)다. 이건 사람의 내심이라 거래 시점에 확인할 수가 없다. 그리고 마지막 문장이 조용히 무섭다 — 이 항에서 "issuer"에는 발행자의 지배자·피지배자·공동지배자가 **포함**된다. 그래서 "발행자의 계열(affiliate)로부터 산 사람"도 underwriter 판정 대상이 되고, 계열이 파는 물량(control securities)이 제한증권이 아니어도 Rule 144의 조건을 지게 된다. + +**PASS/FAIL 반영:** 간접 ✕ — C-01이 판정하지 않는다. 다만 이 조문의 "확인 불가능성"이 보유기간 요건의 존재 이유이고, 마지막 문장의 issuer 확장이 A-06(계열 판정)이 필요한 이유다. + +**ERC-3643 변환:** 온체인 구현 없음 — 배경 전제. 계열 확장은 A-06의 `isAffiliate` 판정으로 흡수된다. + +### 3.3 Rule 144 Preliminary Note — safe harbor의 성격 [ecfr.gov] + +**핵심 원문:** The Commission adopted Rule 144 to establish specific criteria for determining whether a person is not engaged in a distribution. Rule 144 creates a safe harbor from the Section 2(a)(11) definition of "underwriter." A person satisfying the applicable conditions of the Rule 144 safe harbor is deemed not to be engaged in a distribution of the securities and therefore not an underwriter of the securities for purposes of Section 2(a)(11). ... Rule 144 is not an exclusive safe harbor. A person who does not meet all of the applicable conditions of Rule 144 still may claim any other available exemption under the Act for the sale of the securities. The Rule 144 safe harbor is not available to any person with respect to any transaction or series of transactions that, although in technical compliance with Rule 144, is part of a plan or scheme to evade the registration requirements of the Act. + +**한국어:** Commission은, 어떤 자가 배포에 종사하고 있지 아니한지를 판단하기 위한 구체적 기준을 정립하기 위하여 Rule 144를 채택하였다. Rule 144는 Section 2(a)(11)의 "underwriter" 정의에 대한 안전항(safe harbor)을 만든다. Rule 144 안전항의 적용 조건들을 충족하는 자는 그 증권의 배포에 종사하지 아니하는 것으로 간주되며, 따라서 Section 2(a)(11)의 목적상 그 증권의 underwriter가 아닌 것으로 간주된다. … Rule 144는 배타적 안전항이 아니다. Rule 144의 적용 조건 전부를 충족하지 못하는 자도 그 증권의 매도에 관하여 이 법상 이용 가능한 다른 면제를 주장할 수 있다. Rule 144 안전항은, Rule 144를 기술적으로 준수하고 있더라도 이 법의 등록 요건을 회피하려는 계획 또는 책략(plan or scheme to evade)의 일부인 거래 또는 일련의 거래에 관하여는 누구에게도 이용될 수 없다. + +**쉬운 설명:** 세 문장이 세 가지를 못 박는다. ① Rule 144는 면제가 아니라 **간주**다 — "너는 underwriter가 아니다"라고 쳐 주는 것. ② **배타적이지 않다** — 못 맞춰도 다른 문(§4(a)(7) 등)이 있다. ③ **기술적 준수만으로는 부족하다** — 계산이 맞아도 회피 계획이면 무효. 세 번째 문장이 C-01의 겸손의 근거다. + +**PASS/FAIL 반영:** 조건부 — 직접 게이트는 아니지만 **PASS의 의미를 한정**한다. C-01 PASS는 "(d) 충족"이지 "safe harbor 확정"이 아니다. 회피 계획 탐지는 A-12(반대정보)·F-02(시장행위 감시)·운영 검토의 몫이다. + +**ERC-3643 변환:** 온체인 구현 없음. Compliance Log의 판정 기록에 `safeHarborScope = "144(d) only"`를 명시해, PASS가 종국 확정으로 오독되지 않게 한다. + +### 3.4 Rule 144(a)(3) — restricted securities 정의 (시계가 걸리는 대상) [ecfr.gov] + +**핵심 원문:** (3) The term *restricted securities* means: (i) Securities acquired directly or indirectly from the issuer, or from an affiliate of the issuer, in a transaction or chain of transactions not involving any public offering; (ii) Securities acquired from the issuer that are subject to the resale limitations of § 230.502(d) under Regulation D or § 230.701(c); (iii) Securities acquired in a transaction or chain of transactions meeting the requirements of § 230.144A; (iv) Securities acquired from the issuer in a transaction subject to the conditions of Regulation CE (§ 230.1001); (v) Equity securities of domestic issuers acquired in a transaction or chain of transactions subject to the conditions of § 230.901 or § 230.903 under Regulation S (§ 230.901 through § 230.905, and Preliminary Notes); (vi) Securities acquired in a transaction made under § 230.801 to the same extent and proportion that the securities held by the security holder of the class with respect to which the rights offering was made were, as of the record date for the rights offering, "restricted securities" within the meaning of this paragraph (a)(3); (vii) Securities acquired in a transaction made under § 230.802 to the same extent and proportion that the securities that were tendered or exchanged in the exchange offer or business combination were "restricted securities" within the meaning of this paragraph (a)(3); and (viii) Securities acquired from the issuer in a transaction subject to an exemption under section 4(5) (15 U.S.C. 77d(5)) of the Act. + +**한국어:** (3) "restricted securities"란 다음을 뜻한다 — (i) 어떠한 공모도 수반하지 아니하는 거래 또는 일련의 거래에서 발행자로부터 또는 발행자의 계열(affiliate)로부터 직접 또는 간접으로 취득한 증권; (ii) Regulation D의 §230.502(d) 또는 §230.701(c)의 재판매 제한을 받는 것으로서 발행자로부터 취득한 증권; (iii) §230.144A의 요건을 충족하는 거래 또는 일련의 거래에서 취득한 증권; (iv) Regulation CE(§230.1001)의 조건을 받는 거래에서 발행자로부터 취득한 증권; (v) Regulation S(§230.901 내지 §230.905 및 Preliminary Notes)의 §230.901 또는 §230.903의 조건을 받는 거래 또는 일련의 거래에서 취득한, 국내 발행자의 지분증권(equity securities); (vi) §230.801에 따라 이루어진 거래에서 취득한 증권으로서, 그 권리공모(rights offering)가 이루어진 class의 증권보유자가 보유하던 증권이 그 권리공모의 기준일(record date) 현재 본 (a)(3)항의 의미상 "restricted securities"였던 것과 동일한 범위 및 비율에 한하는 것; (vii) §230.802에 따라 이루어진 거래에서 취득한 증권으로서, 그 교환공개매수 또는 사업결합에서 제공되거나 교환된 증권이 본 (a)(3)항의 의미상 "restricted securities"였던 것과 동일한 범위 및 비율에 한하는 것; 그리고 (viii) 이 법 section 4(5)(15 U.S.C. 77d(5))의 면제를 받는 거래에서 발행자로부터 취득한 증권. + +**쉬운 설명:** 이 정의가 **C-01의 문지방**이다. Rule 144(d)의 첫 줄이 "If the securities sold are restricted securities"로 시작하므로, restricted가 아니면 (d)는 아예 적용되지 않는다. 우리 자산에 실제로 걸리는 것은 **(i)과 (ii)** 둘이다 — 506(c) 사모로 발행됐으니 (ii)(502(d) 재판매 제한), 그리고 공모 없는 취득 사슬이니 (i)이다. (i)의 "**chain of transactions**"(일련의 거래)와 "**indirectly**"(간접)에 주목하라 — 비계열 중간 보유자를 몇 번 거쳐도 원래 발행자로부터 나온 물량이면 restricted 지위가 따라다닌다. 이것이 §3.15에서 §4(a)(7) 재판매를 다룰 때 결정적으로 작동한다. + +**PASS/FAIL 반영:** 직접 ○ — G1 게이트. `lot.restricted == false`면 (d) 부적용으로 **조기 PASS**한다. 단 restricted 여부의 *판정*은 B-03 소관이고, C-01은 그 플래그를 소비만 한다. + +**ERC-3643 변환:** `lot.restricted` (bool) ← B-03의 transfer-restriction 메타. `lot.sourceType` ∈ 9종(§3.19) — 그중 SRC_ISSUER_PRIVATE = (a)(3)(i), SRC_REGD_506C = (a)(3)(ii), SRC_RULE144A = (a)(3)(iii). (iv)·(vi)·(vii)·(viii)은 현 자산군 해당 없음. + +### 3.5 Rule 144(b)(1)(i)·(ii) — 비계열 매도인의 조건 [ecfr.gov] + +**핵심 원문:** (b) *Conditions to be met.* Subject to paragraph (i) of this section, the following conditions must be met: (1) *Non-affiliates.* (i) If the issuer of the securities is, and has been for a period of at least 90 days immediately before the sale, subject to the reporting requirements of section 13 or 15(d) of the Securities Exchange Act of 1934 (the Exchange Act), any person who is not an affiliate of the issuer at the time of the sale, and has not been an affiliate during the preceding three months, who sells restricted securities of the issuer for his or her own account shall be deemed not to be an underwriter of those securities within the meaning of section 2(a)(11) of the Act if all of the conditions of paragraphs (c)(1) and (d) of this section are met. The requirements of paragraph (c)(1) of this section shall not apply to restricted securities sold for the account of a person who is not an affiliate of the issuer at the time of the sale and has not been an affiliate during the preceding three months, provided a period of one year has elapsed since the later of the date the securities were acquired from the issuer or from an affiliate of the issuer. (ii) If the issuer of the securities is not, or has not been for a period of at least 90 days immediately before the sale, subject to the reporting requirements of section 13 or 15(d) of the Exchange Act, any person who is not an affiliate of the issuer at the time of the sale, and has not been an affiliate during the preceding three months, who sells restricted securities of the issuer for his or her own account shall be deemed not to be an underwriter of those securities within the meaning of section 2(a)(11) of the Act if the condition of paragraph (d) of this section is met. + +**한국어:** (b) 충족되어야 할 조건. 본 조 (i)항의 적용을 받되, 다음 조건들이 충족되어야 한다 — (1) 비계열자. (i) 증권의 발행자가 매도 직전 최소 90일의 기간 동안 1934년 증권거래법(Exchange Act) section 13 또는 15(d)의 보고 요건의 적용을 받고 있고 또 받아 왔던 경우, 매도 시점에 발행자의 계열이 아니고 직전 3개월(preceding three months) 동안에도 계열이 아니었던 자로서 그 발행자의 제한증권을 자기 계산으로 매도하는 자는, 본 조 (c)(1)항 및 (d)항의 조건 **전부**가 충족되면 이 법 section 2(a)(11)의 의미상 그 증권의 underwriter가 아닌 것으로 간주된다. 본 조 (c)(1)항의 요건은, 증권이 발행자로부터 또는 발행자의 계열로부터 취득된 날 중 나중의 날로부터 1년의 기간이 경과한 경우, 매도 시점에 발행자의 계열이 아니고 직전 3개월 동안에도 계열이 아니었던 자의 계산으로 매도되는 제한증권에는 적용되지 아니한다. (ii) 증권의 발행자가 매도 직전 최소 90일의 기간 동안 Exchange Act section 13 또는 15(d)의 보고 요건의 적용을 받고 있지 아니하거나 받아 오지 아니한 경우, 매도 시점에 발행자의 계열이 아니고 직전 3개월 동안에도 계열이 아니었던 자로서 그 발행자의 제한증권을 자기 계산으로 매도하는 자는, 본 조 **(d)항의 조건**(the condition)이 충족되면 이 법 section 2(a)(11)의 의미상 그 증권의 underwriter가 아닌 것으로 간주된다. + +**쉬운 설명:** (i)과 (ii)의 **문법 차이**를 놓치면 안 된다. (i)은 "all of the conditions of paragraphs (c)(1) and (d)"(복수), (ii)는 "the condition of paragraph (d)"(**단수**)라고 쓴다. 즉 비보고 발행자의 비계열 매도인에게는 **(d) 하나만** 요구된다. 그리고 (i)의 둘째 문장이 보고회사용 "1년 evergreen"이다 — 6개월이 지나면 (c)(1) 공시를 붙여서 팔 수 있고, 1년이 지나면 (c)(1)도 떨어진다. 즉 보고회사에는 **시계가 두 개**(6개월 = 매도 개시, 1년 = 공시 조건 해제)다. + +**해설 — BUIDL-like에는 evergreen 시계가 없다.** 우리 발행자는 비보고이므로 (ii)만 탄다. (ii)에는 (c)(1) 자체가 없으니 "1년 후 (c)(1) 해제"라는 두 번째 시계도 없다. 결과적으로 **비보고 + 비계열 = 1년 하나만 세면 끝**이다. 다만 발행자가 장래에 보고회사가 되면 (i)로 갈아타며 두 시계가 생기고, 6개월~1년 구간에서 (c)(1)이 붙어 E-05가 활성화된다(§9.4 경우 3). + +**PASS/FAIL 반영:** 직접 ○(간접적으로) — C-01은 (b)를 판정하지 않지만, (b)(1)(ii)의 단수형 문언이 "**C-01이 유일한 관문**"이라는 R2의 구조를 확정한다. Recipe 배선의 근거 조문이다. + +**ERC-3643 변환:** `issuer.reportingStatus` ∈ {REPORTING, NON_REPORTING, UNKNOWN} (Manifest) · `seller.isAffiliate` ← A-06. Recipe는 (ii) 경로에서 C-01만 attach하고, (i) 경로에서 C-01 + E-05를 attach한다. + +### 3.6 Rule 144(b)(2) — 계열 매도인은 전부 [ecfr.gov] + +**핵심 원문:** (2) *Affiliates or persons selling on behalf of affiliates.* Any affiliate of the issuer, or any person who was an affiliate at any time during the 90 days immediately before the sale, who sells restricted securities, or any person who sells restricted or any other securities for the account of an affiliate of the issuer of such securities, or any person who sells restricted or any other securities for the account of a person who was an affiliate at any time during the 90 days immediately before the sale, shall be deemed not to be an underwriter of those securities within the meaning of section 2(a)(11) of the Act if all of the conditions of this section are met. + +**한국어:** (2) 계열자 또는 계열자를 위하여 매도하는 자. 발행자의 계열, 또는 매도 직전 90일 중 어느 때라도 계열이었던 자로서 제한증권을 매도하는 자, 또는 그 증권 발행자의 계열의 계산으로 제한증권이나 그 밖의 증권을 매도하는 자, 또는 매도 직전 90일 중 어느 때라도 계열이었던 자의 계산으로 제한증권이나 그 밖의 증권을 매도하는 자는, **본 조의 조건 전부**(all of the conditions of this section)가 충족되면 이 법 section 2(a)(11)의 의미상 그 증권의 underwriter가 아닌 것으로 간주된다. + +**쉬운 설명:** 계열이면 "본 조의 조건 전부"다 — (c) 공시, (d) 보유기간, (e) 물량, (f)(g) 방식, (h) Form 144. 여기서 다시 강조 — **(d)의 길이는 (b)(1)과 (b)(2)가 동일하다.** 계열이라고 1년이 2년이 되지 않는다. 계열에게 더해지는 것은 *병행 조건의 개수*이지 *시간*이 아니다. + +**해설 — 90일 vs 3개월 비대칭 주의.** (b)(1)은 "preceding three months", (b)(2)는 "90 days immediately before the sale"이라고 다르게 쓴다. 두 표현을 하나의 숫자로 합치는 것이 이 규칙의 흔한 오구현이며, 그 해소는 **A-06** 소관이다(C-08 문서가 같은 지점을 OD로 남겨 두었다). C-01은 이 분기의 결과만 받는다. + +**PASS/FAIL 반영:** 간접 ✕ — C-01 소관 아님. Recipe가 A-06 결과로 병행 부품을 붙일 뿐이며, C-01의 required·clockStart·비교식은 그대로다. + +**ERC-3643 변환:** C-01 필드 없음. Recipe attach 규칙 — `if A06.isAffiliate → attach {C-01, E-05, C-08, C-09, E-06}` / `else if NON_REPORTING → attach {C-01}`. + +### 3.7 Rule 144(d)(1)(i) — 6개월 (보고 발행자) [ecfr.gov] + +**핵심 원문:** (d) *Holding period for restricted securities.* If the securities sold are restricted securities, the following provisions apply: (1) *General rule.* (i) If the issuer of the securities is, and has been for a period of at least 90 days immediately before the sale, subject to the reporting requirements of section 13 or 15(d) of the Exchange Act, a minimum of six months must elapse between the later of the date of the acquisition of the securities from the issuer, or from an affiliate of the issuer, and any resale of such securities in reliance on this section for the account of either the acquiror or any subsequent holder of those securities. + +**한국어:** (d) 제한증권의 보유기간. 매도되는 증권이 제한증권인 경우, 다음 규정이 적용된다 — (1) 일반원칙. (i) 증권의 발행자가 매도 직전 최소 90일의 기간 동안 Exchange Act section 13 또는 15(d)의 보고 요건의 적용을 받고 있고 또 받아 왔던 경우, **발행자로부터 또는 발행자의 계열로부터 그 증권을 취득한 날 중 나중의 날**(the later of the date of the acquisition)과, 취득자 또는 그 증권의 후속 보유자 중 어느 쪽의 계산으로든 본 조에 의거하여 이루어지는 그 증권의 재판매 사이에, 최소 6개월이 경과하여야 한다. + +**쉬운 설명:** 문장이 길지만 뼈대는 셋이다. ① **두 시점 사이의 간격**을 잰다 — 시작은 취득, 끝은 재판매. ② 시작점은 **발행자로부터 또는 계열로부터**" 취득한 날이다. 이 한정어가 tacking의 뿌리다 — 비계열끼리 주고받은 날짜는 여기 안 걸리므로 시계가 리셋되지 않는다. ③ "either the acquiror **or any subsequent holder**" — 시계는 사람이 아니라 **증권에 붙어 있다**. 물량이 손을 바꿔도(비계열 간) 같은 시계가 계속 돈다. + +**해설 — "the later of"의 정확한 의미.** 이 구절은 흔히 "취득일과 완납일 중 나중"으로 오독된다. 아니다. 문언은 "**the later of the date of the acquisition of the securities from the issuer, or from an affiliate of the issuer**" — 즉 *발행자로부터의 취득일*과 *계열로부터의 취득일* 중 나중이다. 발행자 → 계열 → 나로 내려온 물량이면, 내가 계열에게서 받은 날(나중)이 기산점이다. 완납 요건은 별도로 (d)(1)(iii)이 얹는다. 두 규칙을 합치면 — + + clockStart = max( 가장 최근의 issuer·affiliate로부터의 취득일 , paymentCompleteAt ) + +**PASS/FAIL 반영:** 직접 ○ — G5에서 `reportingStatus == REPORTING`이면 `required = 6개월`. 우리 자산군에서는 기본 발동하지 않는 갈래이나, 발행자 지위 변경 시 즉시 활성화된다(CFI 132.14, §3.17). + +**ERC-3643 변환:** `required = P6M` · `reportingContinuityDays ≥ 90` 확인 필요. `lot.clockStart` (timestamp). + +### 3.8 Rule 144(d)(1)(ii) — 1년 (비보고 발행자) ⭐ BUIDL-like 기본값 [ecfr.gov] + +**핵심 원문:** (ii) If the issuer of the securities is not, or has not been for a period of at least 90 days immediately before the sale, subject to the reporting requirements of section 13 or 15(d) of the Exchange Act, a minimum of one year must elapse between the later of the date of the acquisition of the securities from the issuer, or from an affiliate of the issuer, and any resale of such securities in reliance on this section for the account of either the acquiror or any subsequent holder of those securities. + +**한국어:** (ii) 증권의 발행자가 매도 직전 최소 90일의 기간 동안 Exchange Act section 13 또는 15(d)의 보고 요건의 적용을 받고 있지 아니하거나 받아 오지 아니한 경우, 발행자로부터 또는 발행자의 계열로부터 그 증권을 취득한 날 중 나중의 날과, 취득자 또는 그 증권의 후속 보유자 중 어느 쪽의 계산으로든 본 조에 의거하여 이루어지는 그 증권의 재판매 사이에, **최소 1년**(a minimum of one year)이 경과하여야 한다. + +**쉬운 설명:** (i)과 문장이 똑같고 두 군데만 다르다 — 앞의 "is, and has been"이 "is not, or has not been"으로, 뒤의 "six months"가 "one year"로. **BUIDL-like 토큰의 발행자는 Exchange Act 보고회사가 아니므로 여기 해당한다. 기본값은 1년이다.** + +**해설 — "subject to"의 엄격한 의미 (CFI 132.09).** 발행자가 *자발적으로* Exchange Act 보고서를 제출하더라도 6개월이 되지 않는다. staff의 답은 이렇다 — "A voluntary filer is not 'subject to' Exchange Act Section 13 or 15(d) because it is not obligated to file Exchange Act reports pursuant to either of those provisions. Consequently, the one-year holding period requirement in Rule 144(d)(1)(ii) applies to the restricted securities of a voluntary filer."(CFI 132.09) 즉 **내는가가 아니라 낼 의무가 있는가**가 기준이다. Manifest의 `reportingStatus`는 이 구분을 반영해야 하며, "발행자가 웹사이트에 재무제표를 올린다" 같은 사실은 REPORTING으로 승격시키지 못한다. + +**PASS/FAIL 반영:** 직접 ○ — **C-01의 기본 갈래.** G5에서 `reportingStatus == NON_REPORTING`이면 `required = 1년`. `UNKNOWN`이면 보수적으로 1년을 적용하되 REVIEW를 병기한다(§6.2). + +**ERC-3643 변환:** `required = P1Y` (기본값) · `asset.reportingStatus = NON_REPORTING` (Manifest 선언, B-01이 정합 검증). Manifest에 `reportingObligationBasis` 필드를 두어 "자발적 제출 ≠ 의무"를 기록한다. + +### 3.9 Rule 144(d)(1)(iii) — 완납 전에는 시계가 돌지 않는다 [ecfr.gov] + +**핵심 원문:** (iii) If the acquiror takes the securities by purchase, the holding period shall not begin until the full purchase price or other consideration is paid or given by the person acquiring the securities from the issuer or from an affiliate of the issuer. + +**한국어:** (iii) 취득자가 매수(purchase)로 그 증권을 취득하는 경우, 보유기간은 발행자로부터 또는 발행자의 계열로부터 그 증권을 취득하는 자에 의하여 **매수대금 전액 또는 그 밖의 대가가 지급되거나 제공될 때까지 개시되지 아니한다**. + +**쉬운 설명:** "**shall not begin until**"(~까지 개시되지 아니한다) — 부정형이 중요하다. 이건 clockStart를 *뒤로 미루는* 규칙이지 *새로 세우는* 규칙이 아니다. 그래서 §3.7의 정식화와 결합해 `clockStart = max(취득일, paymentCompleteAt)`이 된다. 논리적 근거는 §1.3의 **경제적 위험**이다 — 돈을 다 내지 않았으면 아직 위험을 온전히 지지 않은 것이고, 그러면 시계를 돌릴 이유가 없다. + +**해설 — 토큰 mint 시각을 clockStart로 쓰면 틀린다.** 이 조항과 CFI 132.07이 결합하면 결정적 구현 결론이 나온다. staff의 답 — "The holding period for restricted securities acquired pursuant to a subscription agreement begins at the time the agreement is accepted by the issuer, rather than the date it is signed by the purchaser or the date the shares are issued, assuming that the full purchase price has been paid."(CFI 132.07) 즉 기산점은 **발행자의 청약 승낙 시점**이며, "**the date the shares are issued**"(증권이 발행된 날)가 **아니다**. ERC-3643/T-REX의 `created` hook은 mint 시점만 잡으므로, 그것을 clockStart로 삼으면 법적 기산점보다 **늦게** 잡혀 과잉 차단이 되고(사용자 불이익), 반대로 승낙은 있었으나 완납이 늦은 사례에서는 **이르게** 잡혀 과소 차단이 된다(법적 사고). 이 불일치가 **Acquisition Registry(CR-3)를 별도로 두어야 하는 근본 이유**다(§8.3). + +**PASS/FAIL 반영:** 직접 ○ — G4 게이트. `paymentCompleteAt`이 없거나 미래이면 `HP_PAYMENT_INCOMPLETE` (FAIL). + +**ERC-3643 변환:** `lot.paymentCompleteAt` (timestamp, TA/Operator attestation) · `lot.acceptedAt` (issuer 승낙 시각) → `clockStart = max(acceptedAt, paymentCompleteAt)`. **`block.timestamp` of mint ≠ clockStart** — 별도 필드로 분리 보관하고 대사(reconciliation) 대상으로 둔다. + +### 3.10 Rule 144(d)(2) — 약속어음·할부계약은 완납이 아니다 [ecfr.gov] + +**핵심 원문:** (2) *Promissory notes, other obligations or installment contracts.* Giving the issuer or affiliate of the issuer from whom the securities were purchased a promissory note or other obligation to pay the purchase price, or entering into an installment purchase contract with such seller, shall not be deemed full payment of the purchase price unless the promissory note, obligation or contract: (i) Provides for full recourse against the purchaser of the securities; (ii) Is secured by collateral, other than the securities purchased, having a fair market value at least equal to the purchase price of the securities purchased; and (iii) Shall have been discharged by payment in full prior to the sale of the securities. + +**한국어:** (2) 약속어음, 그 밖의 채무 또는 할부계약. 증권을 매수한 상대방인 발행자 또는 발행자의 계열에게 매수대금 지급을 위한 약속어음이나 그 밖의 채무를 제공하는 것, 또는 그 매도인과 할부매수계약을 체결하는 것은, 그 약속어음·채무 또는 계약이 다음을 충족하지 아니하는 한 매수대금의 완납으로 간주되지 아니한다 — (i) 증권 매수인에 대한 완전소구(full recourse)를 규정할 것; (ii) 매수한 증권 이외의 담보로서, 매수한 증권의 매수대금 이상의 공정시장가치(fair market value)를 갖는 담보에 의하여 담보될 것; 그리고 (iii) 증권의 매도 전에 전액 지급에 의하여 소멸되었을 것. + +**쉬운 설명:** (d)(1)(iii)의 "완납"을 우회하는 전형적 수법 — "돈은 나중에 낼게, 대신 어음 줄게" — 을 막는 조항이다. 세 요건이 **누적**(AND)이며, 특히 (ii)가 날카롭다: 담보는 **매수한 증권 이외의**" 것이어야 한다. 자기가 산 증권을 담보로 잡는 자기금융 구조는 위험을 지지 않은 것과 같아서 인정되지 않는다. (iii)도 결정적이다 — **매도 전까지 전액 상환이 끝나 있어야** 하므로, 미상환 어음이 남은 채로는 아무리 오래 지나도 (d)를 충족할 수 없다. + +**해설 — Decipher 범위.** 온체인 토큰의 1차 발행에서 어음·할부는 통상 쓰이지 않는다(BUIDL-like는 현금 결제). 그러나 조건부 완납이 개입한 lot이 존재할 가능성을 배제할 수 없어, `paymentInstrument` 필드로 명시 신고를 받고 `INSTALLMENT`·`NOTE`이면 자동 PASS를 주지 않고 REVIEW로 보낸다. 세 요건은 계약서 검토가 필요한 **비결정적 판단**이라 기계가 확정할 수 없다 — C-01이 순수 패턴 A에서 벗어나는 유일한 지점이다(§8.2). + +**PASS/FAIL 반영:** 조건부 — `paymentInstrument ∈ {NOTE, INSTALLMENT}`이고 3요건 attestation이 없으면 `HP_NOTE_TERMS_UNVERIFIED` (REVIEW). 3요건 충족 attestation이 있으면 `paymentCompleteAt = 어음 소멸일`로 확정하고 G4를 통과시킨다. + +**ERC-3643 변환:** `lot.paymentInstrument` ∈ {CASH, NOTE, INSTALLMENT} · `lot.noteTermsAttested` (bool, 3요건 AND) · `lot.noteDischargedAt` (timestamp). `noteDischargedAt > 매도 시점`이면 (iii) 위반 → FAIL. + + +### 3.11 Rule 144(d)(3)(i)~(iii) — 배당·전환·조건부 발행의 승계 [ecfr.gov] + +(d)(3)은 "**Determination of holding period**"라는 표제 아래 열 개의 승계·기산 규칙을 둔다. 두문이 범위를 정한다 — "The following provisions shall apply for the purpose of determining the period securities have been held." 즉 (d)(1)이 *얼마나* 를 정하고, (d)(3)이 *언제부터* 를 정한다. 열 갈래를 셋으로 나눠 §3.11~§3.13에 싣는다. + +**핵심 원문 (i):** *Stock dividends, splits and recapitalizations.* Securities acquired from the issuer as a dividend or pursuant to a stock split, reverse split or recapitalization shall be deemed to have been acquired at the same time as the securities on which the dividend or, if more than one, the initial dividend was paid, the securities involved in the split or reverse split, or the securities surrendered in connection with the recapitalization. + +**한국어 (i):** 주식배당, 분할 및 자본재구성. 발행자로부터 배당으로, 또는 주식분할·역분할이나 자본재구성에 따라 취득한 증권은, 그 배당이 지급된 대상 증권(배당이 둘 이상이면 **최초의 배당**이 지급된 대상 증권), 분할 또는 역분할에 관련된 증권, 또는 자본재구성과 관련하여 제출된 증권과 **동일한 시점에 취득된 것으로 간주된다**. + +**핵심 원문 (ii):** *Conversions and exchanges.* If the securities sold were acquired from the issuer solely in exchange for other securities of the same issuer, the newly acquired securities shall be deemed to have been acquired at the same time as the securities surrendered for conversion or exchange, even if the securities surrendered were not convertible or exchangeable by their terms. + +**한국어 (ii):** 전환 및 교환. 매도되는 증권이 **오로지(solely)** 동일 발행자의 다른 증권과 교환하여 발행자로부터 취득된 것인 경우, 새로 취득된 증권은, 제출된 증권이 그 조건상 전환 또는 교환이 가능하지 아니하였더라도, 전환 또는 교환을 위하여 제출된 증권과 동일한 시점에 취득된 것으로 간주된다. + +**핵심 원문 (iii):** *Contingent issuance of securities.* Securities acquired as a contingent payment of the purchase price of an equity interest in a business, or the assets of a business, sold to the issuer or an affiliate of the issuer shall be deemed to have been acquired at the time of such sale if the issuer or affiliate was then committed to issue the securities subject only to conditions other than the payment of further consideration for such securities. An agreement entered into in connection with any such purchase to remain in the employment of, or not to compete with, the issuer or affiliate or the rendering of services pursuant to such agreement shall not be deemed to be the payment of further consideration for such securities. + +**한국어 (iii):** 조건부 증권 발행. 발행자 또는 발행자의 계열에게 매도된 사업의 지분 또는 사업의 자산에 대한 매매대금의 **조건부 지급**으로 취득한 증권은, 그 발행자 또는 계열이 그 당시 **그 증권에 대한 추가 대가의 지급 외의 조건만을 붙여** 그 증권을 발행할 의무를 부담하고 있었던 경우, 그 매도 시점에 취득된 것으로 간주된다. 그러한 매수와 관련하여 체결된, 발행자 또는 계열에 계속 고용되어 있겠다거나 경업하지 아니하겠다는 약정, 또는 그 약정에 따른 용역의 제공은, 그 증권에 대한 추가 대가의 지급으로 간주되지 아니한다. + +**쉬운 설명:** 세 조항이 한 원리의 세 얼굴이다 — **경제적 위험이 새로 생기지 않았으면 시계도 새로 서지 않는다**(§1.3). ① 배당·분할로 받은 토큰은 새 돈을 넣은 게 아니라 원래 물량이 쪼개지거나 불어난 것뿐이니, 원본의 시계를 그대로 쓴다. ② 같은 발행자의 증권끼리 **오로지** 맞바꾼 것도 새 투자가 아니라 형태 변경이니 시계가 이어진다 — 조문이 "even if the securities surrendered were not convertible ... by their terms"라고 못 박아, *원래 전환권이 없던 증권을 나중에 합의로 바꾼 경우까지* 포섭한다. ③ 사업 매각 대금을 나중에 주식으로 받기로 한 earn-out은, 매각 시점에 이미 발행 의무가 확정돼 있었다면 매각일로 소급한다. + +**해설 — ⭐ 배당 tacking은 BUIDL-like에서 상시 발생한다.** 이 조항이 우리 자산군에서 왜 결정적이냐면, BUIDL-like 국채 MMF 토큰의 수익 분배가 **현금이 아니라 토큰 추가 발행(배당 재투자)** 형태로 이뤄지는 것이 통상이기 때문이다. 매달 배당 토큰이 mint되는데, 그때마다 시계가 리셋된다면 **보유자는 영원히 1년을 채울 수 없다** — 매도 직전 달에 받은 배당분이 항상 미달이기 때문이다. (d)(3)(i)이 그 결과를 막는다. 배당분의 clockStart는 배당일이 아니라 **원본 lot의 clockStart를 승계**한다. 조문의 "if more than one, the initial dividend was paid"에 주의하라 — 배당이 12번 반복돼도 승계 기준은 **최초 배당의 대상 증권**이지, 직전 배당분이 아니다. 즉 승계 사슬은 언제나 **원본 lot 하나로 수렴**하며, 체인처럼 한 단씩 물려 올라가는 구조가 아니다. 구현상 이것이 중요한 이유는, 사슬을 단계별로 따라가면 O(n) 순회가 되지만 원본 직결이면 O(1) 참조이기 때문이다. `lot.lineageRef`는 **직전 부모가 아니라 원본 lot을 가리킨다**(§3.19). + +**해설 — (d)(3)(ii) Note와 CFI 132.13의 대칭.** (ii)에는 Note가 달려 있다. "If the surrendered securities originally did not provide for cashless conversion or exchange by their terms and the holder provided consideration, other than solely securities of the same issuer, in connection with the amendment of the surrendered securities to permit cashless conversion or exchange, then the newly acquired securities shall be deemed to have been acquired at the same time as such amendment to the surrendered securities, so long as, in the conversion or exchange, the securities sold were acquired from the issuer solely in exchange for other securities of the same issuer." 즉 **돈을 얹어서 전환권을 새로 사면**, 승계 기준일이 원본이 아니라 **그 개정일**로 밀린다. 대가를 냈다는 것은 새 위험을 졌다는 뜻이고, 새 위험에는 새 시계가 붙는다. staff는 이 원리를 워런트 쪽에서 더 날카롭게 못 박았다 — "The payment of even a de minimis amount of cash upon a warrant exercise would preclude the holder from tacking the holding period of the common stock to the warrant under Rule 144(d)(3)(x)."(CFI 132.13) **단돈 1달러라도 현금이 들어가면 tacking이 끊긴다.** "solely"는 문언 그대로 순수 배타이며, 구현에서 임계값·허용오차를 두면 안 된다. + +**PASS/FAIL 반영:** 직접 ○ — G3 분기. `sourceType == SRC_DIVIDEND`이면 `clockStart = lineageRef.clockStart` 승계. 승계가 성립하면 배당 lot은 원본과 **같은 날 취득된 것으로 취급**되어 G6 비교에 들어간다. `lineageRef`가 없거나 원본 lot이 Registry에 없으면 `HP_LINEAGE_BROKEN` (REVIEW). + +**ERC-3643 변환:** `lot.sourceType = SRC_DIVIDEND` · `lot.lineageRef` (원본 lotId — 직전 부모 아님) · `lot.considerationPaid` (bool). `considerationPaid == true`이면 승계 차단하고 `clockStart = 자기 취득일`로 재기산한다((d)(3)(ii) Note·CFI 132.13). 배당 mint는 ERC-3643의 `mint` 경로를 타므로 **compliance module bypass 위험 구간**이다 — 배당 mint 시 Acquisition Registry에 `lineageRef`를 함께 기록하지 않으면 그 lot은 영구히 REVIEW로 떨어진다(§12 OD-C01-3). + +### 3.12 Rule 144(d)(3)(iv)~(vii) — 질권·증여·신탁·유산 [ecfr.gov] + +**핵심 원문 (iv):** *Pledged securities.* Securities which are bona-fide pledged by an affiliate of the issuer when sold by the pledgee, or by a purchaser, after a default in the obligation secured by the pledge, shall be deemed to have been acquired when they were acquired by the pledgor, except that if the securities were pledged without recourse they shall be deemed to have been acquired by the pledgee at the time of the pledge or by the purchaser at the time of purchase. + +**한국어 (iv):** 질권 설정 증권. 발행자의 계열이 **진정하게(bona-fide)** 질권을 설정한 증권으로서 질권자에 의하여 또는 매수인에 의하여 그 질권으로 담보된 채무의 불이행(default) 후에 매도되는 것은, **질권설정자(pledgor)가 취득한 때에** 취득된 것으로 간주된다. 다만 그 증권이 **무소구(without recourse)** 로 질권 설정된 경우에는, 질권자가 질권 설정 시점에, 또는 매수인이 매수 시점에 취득한 것으로 간주된다. + +**핵심 원문 (v):** *Gifts of securities.* Securities acquired from an affiliate of the issuer by gift shall be deemed to have been acquired by the donee when they were acquired by the donor. + +**한국어 (v):** 증권의 증여. 발행자의 계열로부터 증여로 취득한 증권은, **증여자(donor)가 취득한 때에** 수증자(donee)가 취득한 것으로 간주된다. + +**핵심 원문 (vi):** *Trusts.* Where a trust settlor is an affiliate of the issuer, securities acquired from the settlor by the trust, or acquired from the trust by the beneficiaries thereof, shall be deemed to have been acquired when such securities were acquired by the settlor. + +**한국어 (vi):** 신탁. 신탁의 위탁자(settlor)가 발행자의 계열인 경우, 그 위탁자로부터 신탁이 취득한 증권, 또는 그 신탁으로부터 수익자가 취득한 증권은, **그 위탁자가 그 증권을 취득한 때에** 취득된 것으로 간주된다. + +**핵심 원문 (vii):** *Estates.* Where a deceased person was an affiliate of the issuer, securities held by the estate of such person or acquired from such estate by the estate beneficiaries shall be deemed to have been acquired when they were acquired by the deceased person, except that no holding period is required if the estate is not an affiliate of the issuer or if the securities are sold by a beneficiary of the estate who is not such an affiliate. + +**한국어 (vii):** 유산. 사망자가 발행자의 계열이었던 경우, 그 자의 유산(estate)이 보유하는 증권 또는 그 유산으로부터 유산 수익자가 취득한 증권은, 그 사망자가 취득한 때에 취득된 것으로 간주된다. **다만 그 유산이 발행자의 계열이 아니거나 그 증권이 그러한 계열이 아닌 유산 수익자에 의하여 매도되는 경우에는 보유기간이 요구되지 아니한다.** + +**쉬운 설명:** 네 조항 모두 **계열의 손에서 나온 물량**"을 다룬다 — 조문의 주어가 전부 `an affiliate of the issuer`·`a trust settlor is an affiliate`·`a deceased person was an affiliate`다. 계열이 질권·증여·신탁·상속으로 물량을 넘겨도 시계는 리셋되지 않고 **원래 주인의 시계를 그대로 물려준다**. 이유는 명백하다 — 리셋된다면 계열이 배우자에게 증여하는 것만으로 보유기간이 새로 시작되는 게 아니라 *끝나* 버리는 우회로가 생기기 때문이다. 실은 반대 방향의 우회를 막는 조항이다. + +**해설 — (iv)의 with/without recourse 반전에 주의.** 소구권이 있으면(with recourse) 질권설정자가 여전히 개인 책임을 지므로 **위험이 아직 그에게 있고**, 따라서 그의 시계를 물려준다. 소구권이 없으면(without recourse) 채무불이행 시 질권자가 증권만 가져갈 뿐 사람에게 더 청구할 수 없으니 **위험이 이미 넘어간 것**이고, 그래서 시계가 질권자 손에서 **새로 선다**. 여기서 방향을 뒤집으면 정확히 반대 결과가 나온다. staff가 "without recourse"의 지시 대상을 좁힌 것도 함께 보아야 한다 — "The phrase 'without recourse' appearing in Rule 144(d)(3)(iv) refers to recourse against the pledgor personally in the usual situation in which the pledgor and borrower are the same person. This interpretation would not apply, however, if the pledgor and borrower were different persons, because Rule 144(d)(3)(iv) requires recourse only against the borrower under the note."(CFI 132.01) 즉 소구 대상은 **차주(borrower)** 이고, 질권설정자와 차주가 다른 사람이면 이 해석이 그대로 적용되지 않는다. + +**해설 — ⭐ (vii)의 카브아웃은 C-01 유일의 "무조건 통과" 경로다.** 조문 후단 "no holding period is required"는 이 문서 전체에서 **보유기간 요건 자체가 소멸하는 유일한 지점**이다. 비계열 유산 또는 비계열 유산수익자가 파는 경우, 기간이 짧아지는 게 아니라 **아예 없다**. 다만 착각하면 안 되는 두 가지가 있다. 첫째, (vii)에 달린 Note가 범위를 좁힌다 — "While there is no holding period or amount limitation for estates and estate beneficiaries which are not affiliates of the issuer, paragraphs (c) and (h) of this section apply to securities sold by such persons in reliance upon this section." 즉 **(d)와 (e)만 면제되고 (c) 공시와 (h) Form 144는 그대로 살아 있다**(E-05·E-06 소관). 둘째, staff가 대상을 한정했다 — "Paragraph (d)(3)(vii) of Rule 144, which provides an exemption from the Rule 144(d) holding period requirement for sales of restricted securities by a non-affiliate estate, applies **only to securities owned by the decedent**. It does not exempt a non-affiliate estate from the holding period requirement in the case of securities acquired by the estate upon the exercise of stock options held by the decedent."(CFI 132.04) 즉 **사망자가 이미 갖고 있던 증권**만 카브아웃이고, 유산이 사망자의 옵션을 행사해서 *새로* 받은 증권은 카브아웃 대상이 아니다. + +**해설 — 비계열 증여자의 역설 (CFI 129.03).** (v)는 "계열로부터의 증여"만 규율한다. 그렇다면 계열이 **공개시장에서 산**(따라서 그의 손에서는 제한증권이 아닌) 주식을 비공개로 증여하면 어떻게 되나. staff의 답이 직관을 뒤집는다 — 수증자의 손에서 그 증권은 "restricted securities"가 된다("acquired directly or indirectly from the issuer, or from an affiliate of the issuer, in a transaction or chain of transactions not involving any public offering"에 해당하므로). 그러나 "As these securities were not subject to any holding period requirement in the affiliate donor's hands, however, the donee need not comply with the holding period requirement in Rule 144(d) for subsequent sales."(CFI 129.03) **제한증권이 되었는데 보유기간은 없다.** 이 조합은 "restricted = 시계 있음"이라는 도식적 구현을 깨뜨린다. C-01은 그래서 `lot.restricted`와 `lot.holdingPeriodRequired`를 **분리된 두 필드**로 두고, G1(제한 여부)과 G3(기산 가능 여부)을 다른 게이트로 나눈다. + +**PASS/FAIL 반영:** 조건부 — G3 승계형 분기. `SRC_PLEDGE`·`SRC_GIFT`·`SRC_TRUST`는 `clockStart = lineageRef.clockStart` 승계, `SRC_ESTATE`는 `estateIsAffiliate == false ∨ sellerIsBeneficiaryNonAffiliate == true`이면 **G4·G5·G6을 건너뛰고 즉시 PASS**(카브아웃). 승계 사슬이 원장에 없으면 `HP_LINEAGE_BROKEN` (REVIEW) — 자동 PASS를 주지 않는다. + +**ERC-3643 변환:** `lot.sourceType ∈ {SRC_PLEDGE, SRC_GIFT, SRC_TRUST, SRC_ESTATE}` · `lot.lineageRef` · `lot.pledgeRecourse` ∈ {WITH_RECOURSE, WITHOUT_RECOURSE} · `lot.estateIsAffiliate` (bool, A-06 연동) · `lot.decedentOwned` (bool — CFI 132.04, 옵션 행사분 배제). `WITHOUT_RECOURSE`이면 승계하지 않고 `clockStart = 질권 설정일 또는 매수일`로 재기산한다. 네 갈래 모두 온체인에서 도출 불가능한 **오프체인 사실**이라 TA/Operator attestation이 유일한 입력 경로다(§10). + +### 3.13 Rule 144(d)(3)(viii)~(x) — Rule 145·지주회사·무현금 행사 [ecfr.gov] + +**핵심 원문 (viii):** *Rule 145(a) transactions.* The holding period for securities acquired in a transaction specified in § 230.145(a) shall be deemed to commence on the date the securities were acquired by the purchaser in such transaction, except as otherwise provided in paragraphs (d)(3)(ii) and (ix) of this section. + +**한국어 (viii):** Rule 145(a) 거래. §230.145(a)에 규정된 거래에서 취득한 증권의 보유기간은, 본 조 (d)(3)(ii) 및 (ix)에 달리 정한 경우를 제외하고, 그 거래에서 매수인이 그 증권을 취득한 날에 개시된 것으로 간주된다. + +**핵심 원문 (ix):** *Holding company formations.* Securities acquired from the issuer in a transaction effected solely for the purpose of forming a holding company shall be deemed to have been acquired at the same time as the securities of the predecessor issuer exchanged in the holding company formation where: (A) The newly formed holding company's securities were issued solely in exchange for the securities of the predecessor company as part of a reorganization of the predecessor company into a holding company structure; (B) Holders received securities of the same class evidencing the same proportional interest in the holding company as they held in the predecessor, and the rights and interests of the holders of such securities are substantially the same as those they possessed as holders of the predecessor company's securities; and (C) Immediately following the transaction, the holding company has no significant assets other than securities of the predecessor company and its existing subsidiaries and has substantially the same assets and liabilities on a consolidated basis as the predecessor company had before the transaction. + +**한국어 (ix):** 지주회사 설립. **오로지 지주회사를 설립할 목적으로** 이루어진 거래에서 발행자로부터 취득한 증권은, 다음의 경우 그 지주회사 설립에서 교환된 전신(predecessor) 발행자의 증권과 동일한 시점에 취득된 것으로 간주된다 — (A) 새로 설립된 지주회사의 증권이 전신 회사를 지주회사 구조로 재편하는 조직재편의 일부로서 **오로지** 전신 회사의 증권과 교환하여 발행되었을 것; (B) 보유자가 전신 회사에서 보유하던 것과 **동일한 비례적 지분**을 표창하는 동일 종류의 증권을 받았고, 그 증권 보유자의 권리와 이익이 전신 회사 증권 보유자로서 가졌던 것과 실질적으로 동일할 것; 그리고 (C) 그 거래 직후 지주회사가 전신 회사 및 그 기존 자회사의 증권 외에 유의미한 자산을 보유하지 아니하고, 연결 기준으로 그 거래 전 전신 회사가 가졌던 것과 실질적으로 동일한 자산과 부채를 가질 것. + +**핵심 원문 (x):** *Cashless exercise of options and warrants.* If the securities sold were acquired from the issuer solely upon cashless exercise of options or warrants issued by the issuer, the newly acquired securities shall be deemed to have been acquired at the same time as the exercised options or warrants, even if the options or warrants exercised originally did not provide for cashless exercise by their terms. + +**한국어 (x):** 옵션 및 워런트의 무현금 행사. 매도되는 증권이 발행자가 발행한 옵션 또는 워런트의 **오로지 무현금 행사(cashless exercise)** 로 발행자로부터 취득된 것인 경우, 새로 취득된 증권은, 행사된 옵션 또는 워런트가 그 조건상 원래 무현금 행사를 규정하지 아니하였더라도, 행사된 옵션 또는 워런트와 동일한 시점에 취득된 것으로 간주된다. + +**쉬운 설명:** 세 갈래 모두 **현 자산군에는 해당 사항이 없다(N/A)**. (viii) Rule 145(a)는 합병·자산양도 등 주주총회 승인이 필요한 기업재편 거래인데, BUIDL-like 펀드 지분에는 그런 사건이 없다. (ix) 지주회사 설립도 같다. (x) 옵션·워런트는 우리 토큰이 발행하지 않는다. 그럼에도 이 절을 채워 두는 이유는 셋이다 — ① 27개 부품 매트릭스의 완결성, ② 향후 자산군 확장 시 재조사 없이 활성화 가능, ③ (viii)이 **tacking을 금지하는 유일한 갈래**라는 대비가 (ii)의 이해를 완성하기 때문이다. + +**해설 — (viii)은 승계가 아니라 절단이다.** 열 갈래 중 아홉이 "동일 시점에 취득된 것으로 간주"(=승계)인데, (viii)만 "shall be deemed to **commence on the date the securities were acquired by the purchaser in such transaction**"(=그 거래일에 개시)이라고 쓴다. 즉 Rule 145(a) 거래는 시계를 **끊고 새로 세운다**. staff가 이를 직접 확인했다 — 질문이 "In determining the Rule 145(d)(2) holding period, can the holding period for restricted securities surrendered in the Rule 145 transaction be tacked to the holding period for the shares received?"였고, 답은 "No. See Rule 144(d)(3)(viii)."(CFI 139.06)이다. 다만 (viii) 자체가 "except as otherwise provided in paragraphs (d)(3)(ii) and (ix)"로 두 개의 탈출구를 남겨 둔다 — 순수 교환이거나 지주회사 설립이면 (viii)의 절단을 뚫고 승계가 살아난다. **구현 순서가 결과를 바꾼다**: (viii)을 먼저 적용하면 절단, (ii)·(ix)를 먼저 보면 승계다. 조문이 명시적으로 (ii)·(ix) 우선을 지시하므로, 판정 순서는 **(ii)·(ix) → (viii)** 이어야 한다. + +**해설 — (x)의 "solely"와 CFI 132.11의 분리.** (x)는 무현금 행사에만 승계를 준다. 그런데 staff는 **직원 스톡옵션**을 여기서 떼어냈다 — "The holding period for restricted securities acquired under an employee stock option always begins on the exercise of the option and full payment to the issuer of the exercise price. The date of the option's grant may never be used for this purpose, even if the exercise involves no payment of cash or other consideration to the issuer. Because the option is issued to the employee without any payment for the grant, the optionee holds no investment risk in the issuer before the exercise."(CFI 132.11) "**may never be used**"라는 절대 부정에 주목하라. 논거는 다시 경제적 위험이다 — 공짜로 받은 옵션에는 위험이 없고, 위험이 없으면 시계를 줄 수 없다. (x)의 Note 2가 같은 취지를 규칙 본문 안에 성문화해 두었다. + +**PASS/FAIL 반영:** 해당 없음 ✕ — 현 자산군에서 `sourceType`이 이 세 갈래로 설정되는 경로가 없다. Manifest에 해당 sourceType이 선언되면 **B-01이 정합성 오류로 차단**한다(자산군과 sourceType의 불일치). 자산군 확장 시 §5.2의 G3 분기에 세 갈래를 추가하고, (viii)은 승계형이 아니라 **기산형**으로 등록해야 한다. + +**ERC-3643 변환:** 현 구현 없음. 예약 상수만 둔다 — `SRC_RULE145`(기산형, (viii)) · `SRC_HOLDCO`(승계형, (ix) 3요건 AND) · `SRC_CASHLESS`(승계형, (x), `cashPaid == 0` 엄격 검사). 세 값 모두 현 Manifest의 `allowedSourceTypes`에서 제외된다. + +### 3.14 Rule 144(i) — shell company 배제 (경로 자체 봉쇄) [ecfr.gov] + +**핵심 원문:** (i) *Unavailability to securities of issuers with no or nominal operations and no or nominal non-cash assets.* (1) This section is not available for the resale of securities initially issued by an issuer defined below: (i) An issuer, other than a business combination related shell company, as defined in § 230.405, or an asset-backed issuer, as defined in Item 1101(b) of Regulation AB (§ 229.1101(b) of this chapter), that has: (A) No or nominal operations; and (B) Either: (*1*) No or nominal assets; (*2*) Assets consisting solely of cash and cash equivalents; or (*3*) Assets consisting of any amount of cash and cash equivalents and nominal other assets; or (ii) An issuer that has been at any time previously an issuer described in paragraph (i)(1)(i). + +**한국어:** (i) 영업이 없거나 명목적이고 비현금자산이 없거나 명목적인 발행자의 증권에 대한 이용 불가. (1) 본 조는 아래에 정의된 발행자가 **최초로 발행한(initially issued)** 증권의 재판매에는 **이용될 수 없다** — (i) §230.405에 정의된 사업결합 관련 shell company 또는 Regulation AB Item 1101(b)에 정의된 자산유동화 발행자를 제외한 발행자로서 다음에 해당하는 자 — (A) 영업이 없거나 명목적일 것; 그리고 (B) 다음 중 어느 하나 — (1) 자산이 없거나 명목적일 것; (2) **자산이 오로지 현금 및 현금성자산으로만 구성**될 것; 또는 (3) 자산이 임의 금액의 현금 및 현금성자산과 명목적인 그 밖의 자산으로 구성될 것; 또는 (ii) **과거 어느 때라도** (i)(1)(i)에 기술된 발행자였던 자. + +**핵심 원문 (i)(2):** Notwithstanding paragraph (i)(1), if the issuer of the securities previously had been an issuer described in paragraph (i)(1)(i) but has ceased to be an issuer described in paragraph (i)(1)(i); is subject to the reporting requirements of section 13 or 15(d) of the Exchange Act; has filed all reports and other materials required to be filed by section 13 or 15(d) of the Exchange Act, as applicable, during the preceding 12 months (or for such shorter period that the issuer was required to file such reports and materials), other than Form 8-K reports (§ 249.308 of this chapter); and has filed current "Form 10 information" with the Commission reflecting its status as an entity that is no longer an issuer described in paragraph (i)(1)(i), then those securities may be sold subject to the requirements of this section after one year has elapsed from the date that the issuer filed "Form 10 information" with the Commission. + +**한국어 (i)(2):** (i)(1)에도 불구하고, 증권의 발행자가 과거 (i)(1)(i)에 기술된 발행자였으나 더 이상 그러한 발행자가 아니게 되었고; Exchange Act section 13 또는 15(d)의 보고 요건의 적용을 받으며; 직전 12개월(또는 보고 의무 기간이 그보다 짧은 경우 그 기간) 동안 Form 8-K 보고서를 제외하고 section 13 또는 15(d)에 의하여 제출이 요구되는 모든 보고서 및 자료를 제출하였고; 더 이상 (i)(1)(i)의 발행자가 아니라는 지위를 반영하는 현재의 "Form 10 information"을 Commission에 제출한 경우, 그 증권은 그 발행자가 Commission에 "Form 10 information"을 제출한 날로부터 **1년이 경과한 후**에 본 조의 요건에 따라 매도될 수 있다. + +**쉬운 설명:** 이 조항은 **기간을 늘리는 게 아니라 경로를 없앤다**. (i)에 걸리면 6개월이든 10년이든 Rule 144를 쓸 수 없다 — "This section is not available." C-01이 이 조항을 G2에 두고 **기산·완납·기간 계산보다 먼저** 보는 이유다. 계산해 봐야 의미가 없기 때문이다. + +**해설 — ⚠ BUIDL-like 토큰은 (i)(1)(i)(B)(*2*)에 문언상 위험하게 가깝다.** 이것이 C-01 최대의 미해결 쟁점이고, 조문을 그대로 읽으면 이유가 드러난다. shell 판정은 **두 요건의 AND**다 — (A) "No or nominal operations" **그리고** (B) 자산 요건. 그런데 (B)의 두 번째 갈래가 "**Assets consisting solely of cash and cash equivalents**"이다. BUIDL-like 국채 MMF 토큰의 기초자산은 **현금·미국 단기국채·환매조건부채권**이다. 국채와 RP가 회계·규제상 "cash equivalents"로 분류되는 국면이 존재하며, 그렇다면 (B)(*2*)는 문언상 충족될 수 있다. 방어선은 (A)에 있다 — 펀드는 실제로 운용·평가·환매·분배라는 **영업을 수행**하므로 "no or nominal operations"가 아니다. 이 논거가 유지되면 AND가 깨져 (i)은 미해당이다. 그러나 이것은 **문언 대조가 아니라 해석**이고, staff가 이 구조를 직접 판단한 공개 자료를 본 조사 범위(sec.gov CFI §137, Release 33-8869 II.F.6)에서 확인하지 못했다. 33-8869의 shell 논의는 blank check·micro-cap 사기 맥락에서 전개되며 등록 펀드형 자산을 상정하지 않는다. 따라서 `shellStatus = NON_SHELL`은 **Manifest 선언값이지 검증된 사실이 아니며**, 그 선언의 법적 근거를 외부 자문으로 확보하는 것이 P0다(§12 OD-C01-1). + +**해설 — (i)(1)(ii)의 "at any time previously"는 소급하고 소멸하지 않는다.** shell이었던 사실은 **영구히 따라다닌다**. 그리고 staff가 그 범위를 넓게 확인했다 — 발행 당시 이미 영업회사였더라도, 발행자가 *과거에* shell이었으면 (i)(2)를 전부 충족하기 전까지 Rule 144를 못 쓴다("Rule 144(i)(1) states that the Rule 144 safe harbor is not available for the resale of securities 'initially issued' by a shell company ... or an issuer that has 'at any time previously' been a shell company ... Consequently, the Rule 144 safe harbor is not available for the resale of such securities unless and until all of the conditions in Rule 144(i)(2) are satisfied at the time of the proposed sale." CFI 137.01). 소급 범위도 무제한이다 — "Does Rule 144(i) apply to securities issued before February 15, 2008, which was the effective date of the amendments to Rule 144 in which the Commission adopted Rule 144(i)? Answer: Yes."(CFI 137.02) 즉 **시행일 이전 발행분에도 적용된다.** + +**해설 — (i)(2)의 탈출구는 비보고 발행자에게 닫혀 있다.** (i)(2)의 요건 사슬을 보라 — shell 탈피 **AND** Exchange Act 보고 대상 **AND** 12개월 보고 완료 **AND** Form 10 information 제출 후 1년 경과. 두 번째 요건이 결정적이다. **비보고 발행자는 (i)(2)를 물리적으로 충족할 수 없다.** BUIDL-like 발행자는 비보고이므로(§3.8), 만약 (i)(1)에 걸린다는 판단이 나오면 **해소 경로가 없다** — 시간이 지나도 풀리지 않고, Rule 144 재판매는 영구히 봉쇄된다. 그 경우 R2는 §4(a)(7)·Rule 144A·Reg S 904로만 열리며, 이는 C-00의 경로 선택 문제(OD-C00-1, Q-B1)와 직결된다. **OD-C01-1이 P0인 실질적 이유가 여기 있다** — 이 하나가 R2 Recipe 전체의 존폐를 가른다. + +**PASS/FAIL 반영:** 조건부(P0) — G2 게이트. `shellStatus == NON_SHELL`이면 통과. `SHELL` 또는 `EX_SHELL`이고 (i)(2) 4요건이 미충족이면 `HP_SHELL_UNAVAILABLE` (FAIL) — **기간과 무관하게 경로 봉쇄**이며, 이 FAIL은 시간 경과로 치유되지 않는다(§6.2). `UNKNOWN`이면 `HP_SHELL_STATUS_UNKNOWN` (REVIEW). + +**ERC-3643 변환:** `asset.shellStatus` ∈ {NON_SHELL, EX_SHELL, SHELL, UNKNOWN} (Manifest 선언, B-01 정합 검증) · `asset.shellBasisRef` (선언의 근거 문서 해시 — 법률의견서 등) · `asset.form10InfoFiledAt` (timestamp, EX_SHELL 전용) · `asset.form10ContinuityOk` (bool, (i)(2) 4요건 AND). `EX_SHELL`이면 `block.timestamp ≥ addPeriod(form10InfoFiledAt, P1Y)` **그리고** `form10ContinuityOk == true`를 함께 요구한다. shell 판정은 결코 온체인에서 도출할 수 없으므로 선언 + 근거문서 해시가 유일한 경로다. + +### 3.15 Securities Act §4(a)(7)·§4(e)(1)(C) — 재판매분의 restricted 의제 [uscode.house.gov] + +**핵심 원문 (a)(7):** The provisions of section 77e of this title shall not apply to— ... (7) transactions meeting the requirements of subsection (d). + +**핵심 원문 (e):** (e) *Additional requirements* (1) *In general.*—With respect to an exempted transaction described under subsection (a)(7): (A) Securities acquired in such transaction shall be deemed to have been acquired in a transaction not involving any public offering. (B) Such transaction shall be deemed not to be a distribution for purposes of section 77b(a)(11) of this title. (C) Securities involved in such transaction shall be deemed to be restricted securities within the meaning of Rule 144 (17 CFR 230.144). (2) *Rule of construction.*—The exemption provided by subsection (a)(7) shall not be the exclusive means for establishing an exemption from the registration requirements of section 77e of this title. + +**한국어:** (a)(7) 이 편 제77e조의 규정은 다음에 적용되지 아니한다 — … (7) (d)항의 요건을 충족하는 거래. / (e) 추가 요건. (1) 일반. (a)(7)항에 기술된 면제 거래에 관하여 — (A) 그러한 거래에서 취득된 증권은 **어떠한 공모도 수반하지 아니하는 거래에서 취득된 것으로 간주된다**. (B) 그러한 거래는 이 편 제77b조(a)(11)의 목적상 배포(distribution)가 **아닌 것으로 간주된다**. (C) 그러한 거래에 관련된 증권은 **Rule 144(17 CFR 230.144)의 의미상 제한증권(restricted securities)인 것으로 간주된다**. (2) 해석 규정. (a)(7)항이 제공하는 면제는 제77e조의 등록 요건으로부터의 면제를 성립시키는 **배타적 수단이 아니다**. + +**쉬운 설명:** §4(a)(7)은 2015년 FAST Act(Pub. L. 114-94 §76001(a))가 신설한 **AI 간 재판매 면제**다. C-01이 이 조문을 봐야 하는 이유는 면제 자체가 아니라 **(e)(1)(C) 한 줄** 때문이다 — §4(a)(7)로 산 사람의 손에서 그 증권은 "Rule 144의 의미상 제한증권"이 된다. 즉 §4(a)(7) 매수인은 깨끗한 증권을 받는 게 아니라 **제한증권을 다시 받는다**. 그러면 그가 나중에 Rule 144로 팔려 할 때 C-01이 다시 켜지고, 질문이 하나 남는다 — **그의 시계는 언제부터 도는가.** + +**해설 — ⭐ (e)(1)(C)는 "restricted 지위"를 주지 "새 기산점"을 주지 않는다.** 이 구분이 §3.15의 전부다. 직관은 "새로 샀으니 새로 센다"이지만, 조문은 그렇게 쓰여 있지 않다. Rule 144(d)(1)(ii)의 문언으로 돌아가 보라 — 기산점은 "the later of the date of the acquisition of the securities **from the issuer, or from an affiliate of the issuer**"다. §4(a)(7) 매도인이 **비계열**이면(그리고 §4(d)(4)가 발행자·자회사를 매도인에서 배제하므로 매도인은 발행자도 아니다), 그 거래는 *발행자로부터의 취득*도 *계열로부터의 취득*도 **아니다**. 그렇다면 "the later of" 집합에 새 날짜가 추가되지 않고, 기산점은 **여전히 원래의 발행자 취득일**이다. 같은 결론이 Rule 144(a)(3)(i)의 "chain of transactions"·"indirectly"와 (d)(1)의 "either the acquiror **or any subsequent holder**"에서도 나온다 — 시계는 사람이 아니라 증권에 붙어 있고(§3.7), 비계열 간 이전은 그 시계를 끊지 않는다. 즉 **§4(a)(7) 재판매는 restricted 지위를 재확인할 뿐 시계를 리셋하지 않는다**는 것이 문언 대조의 결론이다. + +**해설 — 그럼에도 이것을 자동 PASS로 구현하지 않는 이유.** 위 결론은 조문 구조에서 나온 **논리적 귀결**이지, staff가 이 사실관계를 직접 확인한 문언이 아니다. 본 조사에서 CFI §132(144(d) 해석) 전 항목(132.01~132.18)을 대조했으나 §4(a)(7) 취득분의 기산을 다룬 항목은 없다 — §4(a)(7)이 2015년 신설인 데 반해 132번대 항목의 최신 개정일이 2011-03-04(132.18)이기 때문이다. 조문 신설과 staff 해석 사이에 **11년의 공백**이 있고, 그 공백이 아직 메워지지 않았다. 게다가 반대 논거도 성립 가능하다 — (e)(1)(C)가 굳이 "deemed to be restricted securities"라고 선언한 것은 매수인 손에서 *새로운* 제한이 시작된다는 취지라는 독법이다. 이 독법을 취하면 clockStart가 §4(a)(7) 매수일로 재기산되고, 결과가 정반대가 된다. 두 독법의 차이는 **최대 1년의 매도 가능 시점 차이**를 만든다. 그래서 C-01은 승계 독법을 기본값으로 두되 **자동 PASS를 주지 않고**, `SRC_SEC4A7` lot은 lineage가 원본까지 완전히 연결된 경우에만 승계를 인정하고 그렇지 않으면 REVIEW로 보낸다(§12 OD-C01-2). + +**해설 — 506(c)·§4(a)(7)의 권유 비대칭(A-03·C-00 연결).** §4(d)(2)는 "Neither the seller, nor any person acting on the seller's behalf, offers or sells securities by any form of general solicitation or general advertising"라고 **매도인 측 일반청약권유를 금지**한다. 발행 단계의 Rule 506(c)가 일반청약권유를 *허용*받는 것과 방향이 반대다. 즉 발행에서 광고가 허용되었다는 사실이 재판매에서 광고를 허용하지 않는다 — **각 재판매는 자기 면제를 스스로 조달해야 한다**. 이 비대칭은 C-01의 시간축과 무관하지만, C-00이 `SEC4A7` 경로를 열 때 반드시 병행 검사해야 하는 조건이며, DEX의 상시 호가 게시가 "general solicitation"에 해당하는지가 Q-B1의 핵심이다. + +**PASS/FAIL 반영:** 조건부 — G3 분기. `sourceType == SRC_SEC4A7`이고 `lineageRef`가 원본 lot까지 연결되면 `clockStart = lineageRef.clockStart` 승계(기본 독법). lineage가 끊겼거나 미등록이면 `HP_LINEAGE_BROKEN` (REVIEW) — 보수적으로 자동 승계를 주지 않는다. 정책 상수 `SEC4A7_TACKING_ENABLED`(기본 `true`)로 독법을 거버넌스 변경 가능하게 둔다. + +**ERC-3643 변환:** `lot.sourceType = SRC_SEC4A7` · `lot.lineageRef` (원본 lotId) · `lot.sec4a7AcquiredAt` (재판매 취득일 — 승계 실패 시의 대체 기산점) · 거버넌스 상수 `SEC4A7_TACKING_ENABLED` (bool). `false`로 전환되면 `clockStart = sec4a7AcquiredAt`로 즉시 재기산되며, 이는 코드 배포가 아니라 상수 변경 한 건으로 흡수된다(§11.2). + + +### 3.16 SEC Release No. 33-8869 — 2007년 개정의 논거와 ⭐ tolling 미채택 [federalregister.gov · govinfo.gov] + +**서지.** Release No. 33-8869; File No. S7-11-07 · RIN 3235-AH13 · **72 FR 71546** (면수 71546–71573, 28면) · 2007-12-17 게재 · **시행일 2008-02-15**. 시행일 조항이 중요하다 — "The revised holding periods and other amendments that we are adopting are applicable to securities acquired **before or after** February 15, 2008." 즉 개정 보유기간은 시행일 **이전 취득분에도 소급 적용**된다. 현행 Rule 144(d)의 6개월/1년 체계는 전부 이 Release에서 나왔다. + +**핵심 원문 (목적·경제적 위험 — printed page 71549):** The purpose of Rule 144 is to provide objective criteria for determining that the person selling securities to the public has not acquired the securities from the issuer for distribution. A holding period is one criterion established to demonstrate that the selling security holder did not acquire the securities to be sold under Rule 144 with distributive intent. We do not want the holding period to be longer than necessary or impose any unnecessary costs or restrictions on capital formation. After observing the operation of Rule 144 since the 1997 amendments, we believe that a six-month holding period for securities of reporting issuers provides a reasonable indication that an investor has assumed the economic risk of investment in the securities to be resold under Rule 144. + +**한국어:** Rule 144의 목적은, 공중에게 증권을 매도하는 자가 배포 목적으로 발행자로부터 그 증권을 취득한 것이 아님을 판단하기 위한 **객관적 기준**을 제공하는 데 있다. 보유기간은 매도 증권보유자가 Rule 144에 따라 매도될 증권을 **배포 의도(distributive intent)** 로 취득하지 아니하였음을 증명하기 위하여 정립된 하나의 기준이다. 우리는 보유기간이 필요 이상으로 길거나 자본형성에 불필요한 비용 또는 제약을 부과하기를 원하지 아니한다. 1997년 개정 이후 Rule 144의 운용을 관찰한 결과, 우리는 보고 발행자 증권에 대한 6개월의 보유기간이 투자자가 Rule 144에 따라 재판매될 증권에 대한 **투자의 경제적 위험을 인수하였다는 합리적 지표**를 제공한다고 믿는다. + +**핵심 원문 (차등의 이유 — printed page 71549–71550):** We believe that different holding periods for reporting and non-reporting issuers are appropriate given that reporting issuers have an obligation to file periodic reports with updated financial information (including audited financial information in annual filings) that are publicly available on EDGAR, the Commission's electronic filing system. Although non-reporting issuers must make some information publicly available before resales can be made under Rule 144, this information typically is much more limited in scope than information included in Exchange Act reports, is not required to include audited financial information, and is not publicly available via EDGAR. For these reasons, we believe that continuing to require security holders of non-reporting issuers to hold their securities for one year is not unduly burdensome and is consistent with investor protection. + +**한국어:** 우리는, 보고 발행자가 EDGAR에 공개되는, 갱신된 재무정보(연차 보고에는 **감사받은 재무정보** 포함)를 담은 정기보고서를 제출할 의무를 진다는 점에 비추어, 보고 발행자와 비보고 발행자에 대하여 **서로 다른 보유기간**을 두는 것이 적절하다고 믿는다. 비보고 발행자도 Rule 144에 따른 재판매가 이루어지기 전에 일정한 정보를 공개하여야 하지만, 그 정보는 통상 Exchange Act 보고서에 포함되는 정보보다 **범위가 훨씬 제한적**이고, 감사받은 재무정보를 포함할 것이 요구되지 아니하며, EDGAR를 통하여 공개되지도 아니한다. 이러한 이유로 우리는, 비보고 발행자의 증권보유자에게 **1년**의 보유를 계속 요구하는 것이 과도한 부담이 아니며 투자자 보호에 부합한다고 믿는다. + +**핵심 원문 (⭐ tolling 미채택 — printed page 71552):** After considering the comments, we are not adopting the proposed tolling provision and related amendments. We note, in particular, the comments asserting that, in the current environment, the tolling provision would unduly complicate Rule 144 and could require security holders or brokers to incur significant costs to monitor hedging positions for purposes of determining whether they have met the holding period requirement. This would frustrate our primary objectives to streamline Rule 144 and reduce the costs of capital for issuers. We will revisit the issue if we observe abuse relating to the hedging activities of holders of restricted securities. + +**한국어:** 의견을 검토한 결과, 우리는 **제안된 tolling 조항 및 관련 개정을 채택하지 아니한다**. 특히 우리는, 현재의 환경에서 tolling 조항이 Rule 144를 부당하게 복잡하게 만들고, 증권보유자 또는 브로커로 하여금 보유기간 요건 충족 여부를 판단할 목적으로 **헤지 포지션을 감시하는 데 상당한 비용**을 부담하게 할 수 있다는 의견에 주목한다. 이는 Rule 144를 간소화하고 발행자의 자본비용을 낮추려는 우리의 주된 목적을 좌절시킬 것이다. 우리는 제한증권 보유자의 헤지 활동과 관련한 남용을 관찰하게 되면 이 쟁점을 다시 검토할 것이다. + +**쉬운 설명:** SEC는 2007년에 **헤지하면 보유기간 시계를 최대 6개월까지 멈추자**"는 조항을 제안했다가 **채택하지 않았다**. 이유가 흥미롭다 — 원리적으로 틀려서가 아니라 **감시 비용 때문**이다. 위원회 스스로 헤지가 경제적 위험을 이전한다는 우려를 인정했지만(제안 이유), 롱·숏 포지션이 여러 트레이딩 데스크에 흩어져 일중에도 바뀌는 환경에서 그것을 추적하려면 맞춤형 시스템이 필요하고, 그 비용이 6개월 단축의 이익을 잡아먹는다는 의견을 받아들였다. + +**해설 — ⚠ 코드에 tolling을 넣으면 법과 어긋난다.** 이 절이 C-01 구현에 주는 지시는 **부정형**이다. 온체인 시스템은 파생 포지션을 관찰할 수 있으므로 — 33-8869이 tolling을 포기한 바로 그 이유(감시 비용)가 DEX에서는 상당 부분 해소되므로 — "우리는 할 수 있으니 하자"는 유혹이 생긴다. 하면 안 된다. **현행 Rule 144에 tolling 조항은 존재하지 않는다.** 헤지를 이유로 clockStart를 뒤로 미루면, 그것은 법이 요구하지 않는 제약을 얹는 것이고 결과는 **과잉 차단(false FAIL)** 이다. 과잉 차단은 법적 사고는 아니지만(§1.4), C-01은 "법이 요구하는 것만 요구한다"는 원칙을 지킨다 — 임의 가중은 그 자체로 스펙 오류이며, 감독 검사에서 "이 지연의 법적 근거가 무엇인가"에 답할 수 없다. 다만 마지막 문장("We will revisit the issue if we observe abuse")은 **입법 위험**으로 등록한다 — tolling이 부활하면 C-01에 hedging 관찰 축이 새로 생긴다(§12 OD-C01-6). + +**해설 — 33-8869이 성문화한 staff 해석 7종.** 이 Release의 II.F는 그때까지 staff 해석으로만 존재하던 입장들을 **규칙 본문에 박아 넣었다**. C-01에 걸리는 것이 넷이다 — §4(6) 취득분의 restricted 편입(현 (a)(3)(viii)), 지주회사 설립 tacking(현 (d)(3)(ix)), 전환·교환 tacking(현 (d)(3)(ii)), 무현금 행사 tacking(현 (d)(3)(x)). 이 이력이 중요한 이유는, **이 네 갈래에 대해서는 "staff 해석"과 "규칙 문언"이 이제 같은 것**이어서 별도의 CFI 대조 없이 조문만으로 확정할 수 있기 때문이다. 반대로 CFI 132.07(청약승낙 기산)·132.09(자발적 제출자)·132.10(해당일 산정)·132.11(직원 스톡옵션)·132.14(기준 시점)는 **성문화되지 않았다** — 규칙 문언에 없고 오직 staff 해석으로만 존재한다. 이 비대칭이 §10의 3층 신뢰 구조와 §12의 위험 등급을 가른다(§3.17 말미). + +**PASS/FAIL 반영:** 핵심(해석) — 직접 게이트는 아니나 두 가지를 확정한다. ① `required` 값의 **논거**(6개월/1년 차등이 자의가 아니라 EDGAR 공시 격차에 근거함 → 발행자 지위 변경 시 즉시 갈래 전환해야 하는 이유). ② **tolling 로직 부재의 근거** — 코드에 헤지 기반 시계 정지가 없는 것이 누락이 아니라 준수임을 감독 검사에 답하는 근거다. + +**ERC-3643 변환:** 온체인 구현 없음(negative requirement). Compliance Log에 `tollingApplied = false` · `tollingBasis = "33-8869 II.B.3 not adopted"`를 상수로 기록하여, 시계가 멈추지 않은 것이 **의도된 준수**임을 감사 추적에 남긴다. + +### 3.17 CFI Securities Act Rules §128~§137 — 구현을 확정하는 staff 해석 [sec.gov] + +**서지.** Corporation Finance Interpretations, Securities Act Rules · 페이지 표기 "June 7, 2021 / **Last Update: March 6, 2026**". §128(일반)·§129((a) 정의)·§130((b) 조건)·§131((c) 공시)·**§132((d) 보유기간 — 132.01~132.18)**·§133((e) 물량)·§134((f) 방식)·§135 [Reserved]·§136((h) 신고)·§137((i) shell). C-01의 구현 결론 절반이 §132에서 나온다. + +**⚠ 지위 고지.** CFI는 **규칙이 아니라 Division 직원의 해석**이며, 위원회를 구속하지 않는다. 그럼에도 이 문서가 CFI를 "핵심(해석)"으로 다루는 이유는, §132의 항목들이 규칙 문언이 침묵하는 **기산의 구체적 방법**을 유일하게 말해 주기 때문이다. 규칙은 "six months must elapse"라고만 쓸 뿐 *어떻게 세는지*를 말하지 않는다. 아래 셋이 C-01의 산술 전부를 결정한다. + +**핵심 원문 (132.10 — 해당일 산정):** Under Rule 144(d)(1)(i), a minimum of six months must elapse between the date of acquisition of the restricted securities from an issuer or from an affiliate of the issuer, whichever is later, and any resale of such securities under Rule 144. This period covers the six months immediately preceding the date of sale under the rule. For example, on May 15, X acquires restricted securities in a transaction not involving any public offering from an issuer. Assuming that the six-month holding period did not restart at any point since May 15 and that the other applicable conditions of Rule 144 would be met at the time of sale, X may sell the securities under Rule 144 on November 15, provided that the issuer is, and has been for at least the immediately preceding 90 days, subject to the reporting requirements of Exchange Act Section 13 or 15(d) at such time. + +**한국어:** Rule 144(d)(1)(i)에 따라, 발행자로부터 또는 발행자의 계열로부터 제한증권을 취득한 날(둘 중 나중의 날)과 Rule 144에 따른 그 증권의 재판매 사이에 최소 6개월이 경과하여야 한다. 이 기간은 그 규칙에 따른 **매도일 직전 6개월**을 포괄한다. 예컨대 5월 15일에 X가 발행자로부터 어떠한 공모도 수반하지 아니하는 거래에서 제한증권을 취득한다. 5월 15일 이후 어느 시점에도 6개월 보유기간이 재개시되지 아니하였고 매도 시점에 Rule 144의 다른 적용 조건들이 충족될 것이라고 가정하면, X는 **11월 15일에** 그 증권을 Rule 144에 따라 매도할 수 있다. 단 그 시점에 발행자가 최소한 직전 90일 동안 Exchange Act section 13 또는 15(d)의 보고 요건의 적용을 받고 있고 또 받아 왔어야 한다. + +**⭐ 구현 결론 — 부등호는 `≥`이고 당일은 통과다.** staff의 예시가 이 결론을 직접 준다. 5월 15일 취득 → **11월 15일 매도 가능**이다. 11월 16일이 아니다. 즉 산정 방식은 일수 가산(180일)이 아니라 **해당일(corresponding-date) 방식** — 취득일과 같은 날짜의 6개월 후 — 이며, **그 당일이 이미 통과**다. 이것을 잘못 구현하는 두 방식이 흔하다. ① `block.timestamp > addPeriod(clockStart, required)`로 쓰면 11월 15일 매도가 막힌다(하루 과잉 차단). ② `clockStart + 180 days`로 쓰면 5월 15일 + 180일 = 11월 11일이 되어 **나흘 일찍 열린다 — 과소 차단이자 법적 사고**다. 1년 갈래에서는 오차가 더 크다(365일 vs 해당일). C-01의 비교식은 다음 하나뿐이다. + + PASS ⟺ block.timestamp ≥ addPeriod(clockStart, required) + ※ addPeriod는 달력 기반 해당일 가산 (일수 가산 금지) + ※ 부등호는 ≥ — 해당일 당일 통과 (CFI 132.10 예시: 5/15 취득 → 11/15 매도 가능) + +**핵심 원문 (132.07 — 청약승낙 기산):** The holding period for restricted securities acquired pursuant to a subscription agreement begins at the time the agreement is accepted by the issuer, rather than the date it is signed by the purchaser or the date the shares are issued, assuming that the full purchase price has been paid. + +**한국어:** 청약계약(subscription agreement)에 따라 취득한 제한증권의 보유기간은, **매수인이 서명한 날이나 주식이 발행된 날이 아니라, 발행자가 그 계약을 승낙한 때**에 개시된다. 단 매수대금 전액이 지급되었을 것을 전제로 한다. + +**⭐ 구현 결론 — mint 시각은 clockStart가 아니다.** 이미 §3.9에서 짚었으나 여기서 완결한다. staff는 세 후보 시각을 명시적으로 제시하고 그중 하나만 골랐다 — 매수인 서명일 ✕, **발행자 승낙일 ⭐**, 주식 발행일 ✕. ERC-3643/T-REX가 자연히 포착하는 것은 **세 번째**(mint의 `block.timestamp`)이며, 법이 고르라는 것은 **두 번째**다. 둘의 간극이 며칠에서 몇 주다. mint를 기산점으로 쓰면 법적 기산점보다 늦게 잡혀 과잉 차단이 되고, 반대로 승낙은 했으나 완납이 지연된 lot에서는 (d)(1)(iii)이 걸려 이르게 잡히면 과소 차단이 된다. 그래서 clockStart는 **온체인 사건에서 도출할 수 없으며**, 반드시 오프체인 사실(승낙 시각·완납 시각)을 받아 적어야 한다. **Acquisition Registry(CR-3)가 존재해야 하는 근본 이유가 이 한 문장이다**(§8.3). + +**핵심 원문 (132.14 — 기간 길이의 기준 시점):** The applicable length of the Rule 144(d) holding period requirement is determined as of the time of the proposed Rule 144 sale. + +**한국어:** Rule 144(d) 보유기간 요건의 **적용 길이**는 **제안된 Rule 144 매도 시점을 기준으로** 결정된다. + +**⭐ 구현 결론 — required는 매도 시점에 다시 읽는다.** staff의 예시가 양방향을 다 보여 준다. ① 비보고 발행자가 2008-03-05에 사모 → 3주 후 Form 10 제출 → 2008-10-01 매도 시도. 이때 적용 기간은 **6개월**이다(매도 시점에 보고 대상이고 직전 90일 이상 계속했으므로). 취득 시점에 비보고였다는 사실은 무의미하다. ② 반대로 취득 시점에 보고 발행자였으나 매도 시점에 비보고이면 **1년**이 적용되고, 그 예시의 투자자는 "would not have satisfied the Rule 144(d) holding period requirement as of that date"가 된다. 즉 **이미 채웠다고 믿었던 6개월이 사후에 1년으로 늘어난다**. 구현 지시는 명확하다 — `required`를 lot에 **저장하지 말 것**. lot에 굳혀 두면 발행자 지위가 바뀌어도 옛 값이 남아 오작동한다. `required`는 매 판정마다 `issuer.reportingStatus`를 **그 시점에 다시 읽어** 계산하는 파생값이다(§5.2 G5). + +**핵심 원문 (132.09 — 자발적 제출자):** The six-month holding period requirement in Rule 144(d)(1)(i) is applicable only to the restricted securities of an issuer that is, and has been for at least 90 days immediately before the sale, "subject to" the reporting requirements of Exchange Act Section 13 or 15(d). A voluntary filer is not "subject to" Exchange Act Section 13 or 15(d) because it is not obligated to file Exchange Act reports pursuant to either of those provisions. Consequently, the one-year holding period requirement in Rule 144(d)(1)(ii) applies to the restricted securities of a voluntary filer. + +**한국어:** Rule 144(d)(1)(i)의 6개월 보유기간 요건은, 매도 직전 최소 90일 동안 Exchange Act section 13 또는 15(d)의 보고 요건의 적용을 **받고 있고 또 받아 온** 발행자의 제한증권에만 적용된다. **자발적 제출자(voluntary filer)는 그 어느 조항에 의하여도 Exchange Act 보고서를 제출할 의무가 없으므로 "subject to"에 해당하지 아니한다.** 따라서 Rule 144(d)(1)(ii)의 1년 보유기간 요건이 자발적 제출자의 제한증권에 적용된다. + +**구현 결론 — 기준은 "내는가"가 아니라 "낼 의무가 있는가".** Manifest의 `reportingStatus`는 사실 관찰이 아니라 **법적 지위 선언**이며, "발행자가 EDGAR에 자료를 올린다"·"웹사이트에 재무제표를 공개한다"는 사실은 `REPORTING`으로 승격시키지 못한다. 그래서 Manifest에 `reportingObligationBasis` 필드를 따로 둔다(§3.8). 같은 구분이 (c) 공시 축에도 대칭으로 나타난다 — "A voluntary filer is not 'subject to' ... Accordingly, the current public information requirement in Rule 144(c)(2) is applicable to voluntary filers."(CFI 131.07) 즉 자발적 제출자는 (d)에서 1년을 지고 (c)에서는 15c2-11 경로를 탄다. 두 결론이 같은 어법("subject to")에서 나온다. + +**그 밖에 C-01에 걸리는 항목.** 아래는 위 넷보다 좁게 작동하지만 경계에서 결과를 바꾼다. + +| CFI | 요지 | C-01 반영 | +| --- | --- | --- | +| 128.01 | Rule 144는 발행자에게 이용 불가 | 발행자 계정의 매도는 R2 경로 자체가 아님 — C-00 상류 차단 | +| 128.05 | 제한증권은 Rule 144 준수 없이 공개매수에 응모 가능(비배타성) | C-01 FAIL ≠ 매도 불가(§1.2) | +| 129.03 | 계열이 공개시장 취득분을 증여 → 수증자 손에서 restricted이나 **보유기간 없음** | `restricted`와 `holdingPeriodRequired` 필드 분리(§3.12) | +| 130.01 | (b)(1)(i)의 1년 (c)(1) 해제 판단에도 (d)(3) tacking 적용 가능 | 보고 전환 시 E-05 활성 구간 계산에 승계 clockStart 사용(§9.4) | +| 132.02 | 폐쇄회사의 **비례·무대가** 현물분배는 보유기간 불교란 | `SRC_INKIND` 예약 — 현 자산군 N/A | +| 132.03 | *Rubin v. United States*(449 U.S. 424 (1981)) 이후에도 질권 tacking 유지 | (d)(3)(iv) 승계 로직 유효 | +| 132.05 | 개인퇴직계좌(IRA) 이전은 보유기간 불중단 | 동일인 계좌 간 이전은 승계(A-04 동일인 판정 연동) | +| 132.06 | 희석방지권 행사 취득분은 **원 배정일로 소급** | `SRC_ANTIDILUTION` 예약 — 승계형 | +| 132.08 | §3(a)(9) 교환은 성격 승계 + tacking 허용 | (d)(3)(ii)와 동일 처리 | +| 132.12 | 조합·LLC → 주식회사 전환은 **원칙적으로 재기산**, 5요건 충족 시에만 tacking | 법적 형태 변경 시 기본값 재기산 | +| 132.15·132.16 | 비계열 질권자·수증자는 (b)(1) 조건으로 재판매, tacking 가능 | 승계 후 매도인 지위는 A-06이 별도 판정 | +| 132.17 | §4(2) 교환도 (d)(3)(ii) 요건 충족 시 tacking 가능 | 교환 면제 근거를 묻지 않음 | +| 132.18 | 강제교환 사채 → 투자자 **선택권이 없으면** 원 사채 취득일 기산 | `investorElection` 필드 — 선택권 있으면 교환일 기산 | +| 137.01·137.02 | shell 이력은 (i)(2) 전부 충족 전까지 봉쇄 · 2008-02-15 이전 발행분에도 적용 | G2 봉쇄 로직(§3.14) | + +**해설 — 132.18이 드러내는 원리: 결정권이 있으면 새 시계.** 강제교환 사채 사안에서 staff는 하나의 기준으로 두 결과를 낸다 — 교환이 발행자 선택 또는 투자자 통제 밖의 사건으로 일어나면 "the investor has **no subsequent investment decision to make**"이므로 원 사채 취득일로 기산하고, 투자자가 선택해서 교환하면 교환일로 기산한다. **새 투자 판단이 있었는가**가 시계를 가르는 기준이며, 이는 §1.3의 경제적 위험 원리와 정확히 같은 축이다. 이 원리 하나가 (d)(3) 열 갈래·CFI 열여덟 항목을 관통한다 — 위험이 이어지면 시계도 이어지고, 새 판단·새 대가·새 위험이 개입하면 시계가 새로 선다(§5.6). + +**PASS/FAIL 반영:** 핵심(해석) — 132.10이 **비교식과 부등호**를, 132.07이 **clockStart의 정의와 CR-3의 존재 이유**를, 132.14가 **required의 갱신 시점**을, 132.09가 **reportingStatus의 판정 기준**을 각각 확정한다. 이 넷 없이는 C-01을 구현할 수 없다. + +**ERC-3643 변환:** `addPeriod(ts, period)` 달력 해당일 가산 라이브러리(일수 가산 금지) · `required`는 저장 필드가 아닌 **매 호출 파생값** · `asset.reportingObligationBasis` (자발적 제출 ≠ 의무) · `lot.acceptedAt`(승낙 시각) ≠ `lot.mintedAt`(mint 시각) **필드 분리 보관 + 정기 대사**. + +### 3.18 Sub-요건 분해 매트릭스 + +§3.1~§3.17의 요건을 **원자적 검증 단위**로 분해한다. 각 행이 §5.2의 게이트 하나와 1:1로 대응하며, 모든 PASS/FAIL·REVIEW 경로가 빠짐없이 한 행씩 등장한다(승계형 5종·유산 카브아웃·shell 봉쇄 포함). + +| # | 원자 검증 단위 | 근거 조문 | 게이트 | 판정 | 실패 코드 | +| --- | --- | --- | --- | --- | --- | +| 1 | 매도 대상 lot이 취득 원장에 존재하는가 | (d) 두문 전제 | G0 | 존재 → 계속 | HP_LOT_NOT_FOUND (FAIL) | +| 2 | 적격 lot의 합계 수량이 매도 수량 이상인가 | (d) 두문 전제 | G0 | `Σ qty ≥ sellQty` → 계속 | HP_LOT_INSUFFICIENT (FAIL) | +| 3 | lot이 제한증권인가 | (a)(3)(i)~(viii) · (d) 두문 "If the securities sold are restricted securities" | G1 | `false` → **조기 PASS**((d) 부적용) | — | +| 4 | 발행자가 shell 또는 전(前) shell인가 | (i)(1)(i)·(i)(1)(ii) | G2 | `NON_SHELL` → 계속 | HP_SHELL_UNAVAILABLE (FAIL) | +| 5 | 전 shell이면 (i)(2) 4요건 + Form 10 정보 후 1년 경과인가 | (i)(2)·(i)(3) | G2 | 전부 충족 → 계속 | HP_SHELL_UNAVAILABLE (FAIL) | +| 6 | shell 지위가 선언되어 있는가 | (i)(1) 적용 전제 | G2 | `UNKNOWN` → 판정 불가 | HP_SHELL_STATUS_UNKNOWN (REVIEW) | +| 7 | sourceType이 **기산형 4종**인가 | (a)(3)(i)(ii)(iii) · §4(e)(1)(C) | G3 | `clockStart = 자기 취득일` | — | +| 8 | sourceType이 **승계형 5종**인가 | (d)(3)(i)(iv)(v)(vi)(vii) | G3 | `clockStart = lineageRef.clockStart` | — | +| 9 | 승계형인데 lineage 사슬이 원본까지 연결되는가 | (d)(3) 두문 | G3 | 연결 → 계속 | HP_LINEAGE_BROKEN (REVIEW) | +| 10 | 승계 대가가 지급되었는가(전환·교환·워런트) | (d)(3)(ii) Note · (d)(3)(x) Note 1 · CFI 132.13 | G3 | `considerationPaid == true` → **승계 차단·재기산** | — | +| 11 | 유산 카브아웃에 해당하는가 | (d)(3)(vii) 단서 | G3 | 비계열 유산·수익자 → **즉시 PASS**(기간 요건 소멸) | — | +| 12 | 유산 카브아웃 대상이 사망자 소유분인가 | CFI 132.04 | G3 | `decedentOwned == false` → 카브아웃 배제 | — | +| 13 | 매수 취득이면 매수대금이 완납되었는가 | (d)(1)(iii) | G4 | `paymentCompleteAt` 존재 ∧ 과거 | HP_PAYMENT_INCOMPLETE (FAIL) | +| 14 | 어음·할부이면 3요건(소구·별도담보·매도 전 완제)이 확인되었는가 | (d)(2)(i)(ii)(iii) AND | G4 | attestation 있음 → 계속 | HP_NOTE_TERMS_UNVERIFIED (REVIEW) | +| 15 | 어음이 매도 전에 소멸되었는가 | (d)(2)(iii) | G4 | `noteDischargedAt ≤ 매도시점` | HP_NOTE_TERMS_UNVERIFIED (REVIEW) | +| 16 | 발행자가 **매도 시점에** 보고 대상이고 직전 90일 이상 계속했는가 | (d)(1)(i) · CFI 132.14 | G5 | `REPORTING` → `required = P6M` | — | +| 17 | 발행자가 매도 시점에 비보고인가 | (d)(1)(ii) · CFI 132.09 | G5 | `NON_REPORTING` → `required = P1Y` ⭐ 기본값 | — | +| 18 | 보고 지위가 선언되어 있는가 | (d)(1) 적용 전제 | G5 | `UNKNOWN` → 보수적 1년 적용 후 검토 | HP_REPORTING_STATUS_UNKNOWN (REVIEW) | +| 19 | 해당일이 도래했는가 | (d)(1)(i)(ii) · CFI 132.10 | G6 | `block.timestamp ≥ addPeriod(clockStart, required)` → **PASS** | HP_PERIOD_NOT_ELAPSED (FAIL) | + +**부등호 규율 (§5.3과 1:1).** #2는 `≥`(같으면 통과 — 정확히 필요 수량만 있어도 팔 수 있다). #19는 `≥`(해당일 **당일 통과** — CFI 132.10 예시). #15는 `≤`(매도 전 완제 — 같은 날 완제는 통과). #5의 1년도 `≥`(Form 10 정보 제출일의 해당일 당일 통과). **C-01에는 `>` 게이트가 하나도 없다** — 이 점이 C-08과 정반대다. C-08은 "shall not exceed"라 초과만 위반이고 도달은 허용이지만, C-01은 "must elapse"라 도달이 곧 충족이다. 두 부품의 부등호를 같은 헬퍼로 구현하면 반드시 어긋난다. + +**경로 총계.** PASS 3종(#3 조기 · #11 카브아웃 · #19 정상) · FAIL 5종(#1 #2 #4·#5 #13 #19) · REVIEW 4종(#6 #9 #14·#15 #18). 합계 12개 종단 경로이며, §7의 테스트 케이스가 이 전부를 덮는다. + +### 3.19 ERC-3643 변환 총정리 — sourceType 9종과 필드 매핑 + +**⚠ claim.basis 해당 없음.** A-13(QP)·A-03(AI) 같은 **증명서형(패턴 B)** 부품은 자격 갈래를 `claim.basis`로 명명한다(QP_NATURAL·QP_TRUST 등). C-01은 **직접 계산형(패턴 A)** 이라 자격 갈래가 없고, 따라서 `claim.basis` 값을 정의하지 않는다. C-01의 갈래 축은 자격이 아니라 **취득 사유**이며, 같은 명명 규율을 `SRC_<갈래>` 접두로 옮겨 적용한다. + +**sourceType 9종 총정리.** + +| sourceType | 근거 조문 | 유형 | clockStart | 현 자산군 | +| --- | --- | --- | --- | --- | +| `SRC_ISSUER_PRIVATE` | (a)(3)(i) | 기산형 | `max(acceptedAt, paymentCompleteAt)` | ⭐ 활성 | +| `SRC_REGD_506C` | (a)(3)(ii) · Rule 502(d) | 기산형 | `max(acceptedAt, paymentCompleteAt)` | ⭐ 활성 (주 발행 경로) | +| `SRC_RULE144A` | (a)(3)(iii) | 기산형 | `max(acceptedAt, paymentCompleteAt)` | 조건부 (C-00이 144A 경로 확정 시) | +| `SRC_SEC4A7` | §4(e)(1)(C) | 기산형(승계 독법 기본) | `lineageRef.clockStart` ※ `SEC4A7_TACKING_ENABLED == false`이면 `sec4a7AcquiredAt` | 조건부 (OD-C01-2) | +| `SRC_DIVIDEND` | (d)(3)(i) | 승계형 | `lineageRef.clockStart` (원본 직결) | ⭐ 활성 (상시 발생) | +| `SRC_PLEDGE` | (d)(3)(iv) | 승계형 ※ `WITHOUT_RECOURSE`이면 재기산 | `lineageRef.clockStart` | 조건부 | +| `SRC_GIFT` | (d)(3)(v) | 승계형 | `lineageRef.clockStart` | 조건부 | +| `SRC_TRUST` | (d)(3)(vi) | 승계형 | `lineageRef.clockStart` | 조건부 | +| `SRC_ESTATE` | (d)(3)(vii) | 승계형 + **카브아웃** | 비계열이면 요건 소멸 · 계열이면 `lineageRef.clockStart` | 조건부 | + +**예약(현 Manifest `allowedSourceTypes` 제외):** `SRC_RULE145`((d)(3)(viii), 기산형·절단) · `SRC_HOLDCO`((d)(3)(ix), 승계형·3요건 AND) · `SRC_CASHLESS`((d)(3)(x), 승계형·`cashPaid == 0`) · `SRC_INKIND`(CFI 132.02) · `SRC_ANTIDILUTION`(CFI 132.06). + +**lot 스키마 (Acquisition Registry CR-3).** + +| 필드 | 타입 | 출처 | 비고 | +| --- | --- | --- | --- | +| `lotId` | bytes32 | Registry | 원장 키 | +| `holderONCHAINID` | address | Identity Registry | 보유자 | +| `qty` | uint256 | Registry | 잔여 수량(분할·소진 반영) | +| `sourceType` | enum(9+5) | TA attestation | §3.19 표 | +| `clockStart` | uint64 | **파생** | `max(acceptedAt, paymentCompleteAt)` 또는 승계 | +| `acceptedAt` | uint64 | TA attestation | 발행자 승낙 시각 (CFI 132.07) — **mint 시각 아님** | +| `mintedAt` | uint64 | 온체인 | 대사 전용 · clockStart로 사용 금지 | +| `paymentCompleteAt` | uint64 | TA attestation | (d)(1)(iii) | +| `paymentInstrument` | enum{CASH,NOTE,INSTALLMENT} | TA attestation | (d)(2) | +| `noteTermsAttested` | bool | Operator | (d)(2) 3요건 AND | +| `noteDischargedAt` | uint64 | TA attestation | (d)(2)(iii) | +| `restricted` | bool | **B-03** | G1 — C-01은 읽기만 | +| `holdingPeriodRequired` | bool | 파생 | `restricted`와 **분리**(CFI 129.03) | +| `lineageRef` | bytes32 | Registry | **원본 lotId** (직전 부모 아님 — (d)(3)(i)) | +| `considerationPaid` | bool | TA attestation | 승계 차단 트리거 ((d)(3)(ii) Note) | +| `pledgeRecourse` | enum | TA attestation | (d)(3)(iv) | +| `estateIsAffiliate` | bool | **A-06** | (d)(3)(vii) 카브아웃 | +| `decedentOwned` | bool | TA attestation | CFI 132.04 | +| `investorElection` | bool | TA attestation | CFI 132.18 | + +**asset·거버넌스 레벨 (Manifest).** + +| 필드 | 타입 | 근거 | 비고 | +| --- | --- | --- | --- | +| `asset.reportingStatus` | enum{REPORTING, NON_REPORTING, UNKNOWN} | (d)(1)(i)(ii) | **매도 시점에 재조회**(CFI 132.14) — lot에 저장 금지 | +| `asset.reportingObligationBasis` | string | CFI 132.09 | 자발적 제출 ≠ 의무 | +| `asset.reportingContinuityDays` | uint16 | (d)(1)(i) | `≥ 90` 확인 | +| `asset.shellStatus` | enum{NON_SHELL, EX_SHELL, SHELL, UNKNOWN} | (i)(1) | ⚠ 선언값 (OD-C01-1) | +| `asset.shellBasisRef` | bytes32 | (i)(1) | 근거 문서 해시 | +| `asset.form10InfoFiledAt` | uint64 | (i)(2) | EX_SHELL 전용 | +| `asset.form10ContinuityOk` | bool | (i)(2) | 4요건 AND | +| `SEC4A7_TACKING_ENABLED` | bool (거버넌스 상수) | §4(e)(1)(C) | 기본 `true` (§11.2) | +| `LOT_SELECTION_DEFAULT` | enum{FIFO, DESIGNATED} | — | 기본 `FIFO` (§5.4) | + +**Compliance Module 인터페이스.** C-01은 ERC-3643의 `IModule`을 pre-trade 전용으로 구현한다. + + canTransfer(from, to, amount) → (bool, reasonCode) + C-01 구현: HoldingPeriodModule.check(from, asset, amount, lotIds[]) + · 상태 변경 없음 (STATELESS) + · Acquisition Registry(CR-3)를 read-only 조회 + · reasonCode ∈ {HP_LOT_NOT_FOUND, HP_LOT_INSUFFICIENT, HP_SHELL_UNAVAILABLE, + HP_SHELL_STATUS_UNKNOWN, HP_LINEAGE_BROKEN, HP_PAYMENT_INCOMPLETE, + HP_NOTE_TERMS_UNVERIFIED, HP_REPORTING_STATUS_UNKNOWN, + HP_PERIOD_NOT_ELAPSED} + + transferred(from, to, amount) → C-01 구현 없음 (no-op) + lot 소진·분할 기록은 Acquisition Registry 소관 (§8.3) + +**⚠ bypass 경로 2종.** ERC-3643/T-REX에서 compliance module을 우회하는 경로가 둘 있고, 둘 다 C-01에 직접 위험이다. ① `mint` — 배당 토큰 발행이 이 경로를 타므로, mint 시 Registry에 `lineageRef`가 기록되지 않으면 그 배당 lot은 영구 REVIEW가 된다(OD-C01-3). ② `forcedTransfer`·`recovery` — Operator 권한 이전이 C-01을 건너뛰므로, 강제이전으로 넘어간 lot의 clockStart 승계 규칙을 별도로 정의해야 한다. 두 경로 모두 **L4 테스트 벡터로 확인 대상**이며, 코드가 아니라 배선의 문제다. + + +## §4. ② 입력 사실 — 판정에 필요한 데이터 + +### 4.1 본 부품이 판정하려면 어떤 증거가 필요한가 + +C-01의 질문은 하나다 — "**이 lot의 시계가 언제 시작됐고, 지금 얼마나 지났고, 얼마나 지나야 하는가.**" 여기서 필요한 사실은 셋뿐이다. + +| 필요한 사실 | 무엇을 답하나 | 왜 어려운가 | +| --- | --- | --- | +| ① **기산점** (`clockStart`) | 시계가 언제 시작됐나 | ⭐ **온체인에 없다.** 발행자 승낙 시각(CFI 132.07)과 완납 시각((d)(1)(iii))의 나중 — 둘 다 오프체인 사실이다 | +| ② **비교 시점** (`block.timestamp`) | 지금은 언제인가 | 쉽다. 체인이 제공한다 | +| ③ **요구 기간** (`required`) | 얼마나 지나야 하나 | 발행자의 **매도 시점** 보고 지위에 달렸다(CFI 132.14) — 선언값이고, 변한다 | + +셋 중 ②만 온체인에서 나온다. **C-01의 난이도 전부가 ①에 있다.** 그리고 ①은 lot의 `sourceType`에 따라 계산 방식이 갈리므로, sourceType과 그 부속 사실(승계 참조·대가 지급 여부·소구 여부 등)이 전부 입력으로 따라 들어온다. + +**입력이 아닌 것 — 명시적 배제 목록.** 아래는 같은 거래에 존재하지만 C-01이 **읽지 않는다**. 읽으면 오구현이다. + +- **매도인이 계열인가** — 읽지 않는다. (d)의 기간은 계열·비계열이 동일하다(§1 정정 노트·§3.6). A-06 결과는 Recipe가 *병행 부품을 붙일지*를 정할 때 쓰지, C-01의 `required`를 바꾸지 않는다. 유일한 예외가 (d)(3)(vii) 유산 카브아웃의 `estateIsAffiliate`이며, 이는 기간 길이가 아니라 **요건 존부**를 가른다. +- **매수인이 QP·AI인가** — 읽지 않는다. 별개 축(A-13·A-03). +- **매도 물량이 얼마인가** — 읽지 않는다. 물량축은 C-08. C-01은 `qty`를 **lot 충족 여부 확인에만** 쓰고 상한과 비교하지 않는다. +- **매도인이 헤지 중인가** — 읽지 않는다. tolling 조항은 채택되지 않았다(§3.16). +- **증명서가 신선한가** — 읽지 않는다. A-11의 축이다(§1.5). + +### 4.2 Data field — DEX가 실제로 읽는 항목 + +| 필드 | 출처 | 신뢰 층 | 없으면 | +| --- | --- | --- | --- | +| `lot.lotId` · `qty` | Acquisition Registry (CR-3) | L2 | HP_LOT_NOT_FOUND · HP_LOT_INSUFFICIENT (FAIL) | +| `lot.restricted` | **B-03** (이전제한 메타) | L2 | 보수적으로 `true` 가정 후 계속 | +| `lot.sourceType` | TA attestation → Registry | L3 | HP_LINEAGE_BROKEN (REVIEW) | +| `lot.acceptedAt` | **TA attestation** (발행자 승낙 기록) | L3 | HP_PAYMENT_INCOMPLETE (FAIL) | +| `lot.paymentCompleteAt` | **TA attestation** (완납 확인) | L3 | HP_PAYMENT_INCOMPLETE (FAIL) | +| `lot.paymentInstrument` | TA attestation | L3 | 기본 `CASH` 가정 금지 — REVIEW | +| `lot.lineageRef` | Registry (승계형 전용) | L2 | HP_LINEAGE_BROKEN (REVIEW) | +| `lot.considerationPaid` | TA attestation | L3 | 보수적으로 `true` 가정(승계 차단) | +| `lot.estateIsAffiliate` | **A-06** | L3 | 카브아웃 불인정 → 일반 승계 경로 | +| `asset.reportingStatus` | **Manifest** (B-01 정합 검증) | L1 | HP_REPORTING_STATUS_UNKNOWN (REVIEW) + 보수적 1년 | +| `asset.shellStatus` | **Manifest** (B-01 정합 검증) | L1 | HP_SHELL_STATUS_UNKNOWN (REVIEW) | +| `block.timestamp` | 체인 | L1 | — | +| `path == RULE144` | **C-00** | L1 | C-01 미활성 | + +**결측의 기본값 규율.** 표의 "없으면" 칸에 하나의 원칙이 흐른다 — **결측은 통과가 아니다.** 시간축에서 결측을 낙관적으로 메우면 곧바로 과소 차단이 되고, 과소 차단의 상대방은 §12(a)(1) 소권을 가진 매수인이다(§1.4). 그래서 결측은 전부 FAIL 또는 REVIEW이며, 단 하나의 보수적 추정만 허용한다 — `restricted`가 불명이면 **`true`로 가정**한다(시계를 거는 쪽이 안전하므로). 반대로 `paymentInstrument`가 불명일 때 `CASH`로 가정하는 것은 **금지**한다 — 그것은 완납을 낙관하는 추정이기 때문이다. + +### 4.3 수집 경로 — 5단계 흐름 + + ① 발행 (R1) — 매수인이 청약 → 발행자가 승낙(acceptedAt) → 대금 완납(paymentCompleteAt) + ↓ Securitize(TA)가 두 시각을 원장에 기록 · 서명 attestation 발급 + ② 등록 — Acquisition Registry(CR-3)에 lot 생성 + {lotId, holder, qty, sourceType, acceptedAt, paymentCompleteAt, restricted, lineageRef} + ↓ mint의 block.timestamp는 mintedAt에 별도 기록 (clockStart로 쓰지 않음) + ③ 생애 — 배당 mint · 이전 · 분할 시마다 lot 갱신 또는 신규 lot 생성 + ↓ 승계형이면 lineageRef = 원본 lotId (직전 부모 아님) + ④ 매도 시도 — C-00이 path = RULE144 확정 → C-01 활성 + ↓ Registry read-only 조회 → G0~G6 + ⑤ 판정 — PASS → 다음 부품 / FAIL·REVIEW → §6 + +**⭐ 이 흐름의 급소는 ①→②다.** `acceptedAt`과 `paymentCompleteAt`은 **오프체인 사건**이고, 그것이 원장에 들어오는 유일한 통로가 TA attestation이다. 이 통로가 끊기거나 지연되면 lot은 clockStart를 갖지 못하고, C-01은 영원히 FAIL을 낸다. 즉 **C-01의 가용성은 TA 운영의 함수**다. 코드가 아무리 정확해도 ①이 비면 부품이 죽는다 — 이것이 §10 3층 구조와 §12 OD-C01-4(TA 기록 지연의 SLA)의 배경이다. + +### 4.4 게이트별 필수 확인 항목 (전체 표) + +아래는 "예시"가 아니라 **필수 확인 항목의 전체**다. 공통 행 + 게이트별 행으로 나눈다. + +**공통 (모든 판정에서 확인)** + +| 항목 | 확인 내용 | 출처 | +| --- | --- | --- | +| 경로 확정 | `C-00.path == RULE144` | C-00 | +| Manifest 정합 | `asset` 필드가 Manifest 선언과 일치 | B-01 | +| lot 귀속 | `lot.holderONCHAINID == seller` | Identity Registry | +| 원장 무결성 | Registry 조회 응답이 유효 | CR-3 | + +**게이트별** + +| 게이트 | ① 필수 | ② 필수 | ③ 필수 | +| --- | --- | --- | --- | +| **G0** lot 조회 | `lotId[]` 지정 또는 FIFO 선택 규칙 | 적격 lot `Σ qty ≥ sellQty` | lot 상태가 유효(소진·동결 아님) | +| **G1** 제한 여부 | `lot.restricted` (B-03) | `lot.holdingPeriodRequired` (CFI 129.03 분리) | — | +| **G2** shell | `asset.shellStatus` 선언 | `shellBasisRef` 근거 문서 존재 | EX_SHELL이면 `form10InfoFiledAt` + `form10ContinuityOk` | +| **G3** 기산 | `lot.sourceType` ∈ 허용 9종 | 승계형이면 `lineageRef` 원본 연결 | `considerationPaid` · (질권) `pledgeRecourse` · (유산) `estateIsAffiliate` + `decedentOwned` | +| **G4** 완납 | `lot.acceptedAt` (CFI 132.07 — mint 시각 아님) | `lot.paymentCompleteAt` | `paymentInstrument` ≠ CASH이면 `noteTermsAttested` + `noteDischargedAt` | +| **G5** 기간 길이 | `asset.reportingStatus` **매도 시점 재조회** | REPORTING이면 `reportingContinuityDays ≥ 90` | `reportingObligationBasis` (자발적 제출 배제) | +| **G6** 비교 | `clockStart` 확정값 | `required` 파생값 | `block.timestamp` | + +## §5. ③ 판정 로직 — 어떻게 PASS/FAIL이 결정되는가 + +### 5.0 판정 흐름 플로우차트 + +아래 그림은 C-01의 런타임 판정을 G0~G6의 일곱 게이트로 정리한 것이다. 입력(매도인·자산·수량·lot·경로)에서 출발해 lot 확보 → 제한 여부 → shell 봉쇄 → 기산점 확정(sourceType 분기) → 완납 확인 → 기간 길이 결정 → 해당일 비교의 순서로 흐르며, 각 게이트의 이탈 경로가 `HP_*` 코드로 표시된다. post-trade 상태 갱신이 없는 것(STATELESS)이 오른쪽 아래 점선 노트에 명시돼 있다. + +![C-01 fig50 — 런타임 판정 흐름](C-01_fig50.png) + +### 5.1 개념 — STATELESS인데 원장에 기댄다 + +C-01은 자기 상태를 갖지 않는다. 누적 카운터도, 롤링 창도, `transferred` commit hook도 없다. 같은 입력에 같은 답을 내는 **순수 함수**다. 그런데 그 순수 함수의 인자 중 하나(`clockStart`)가 **외부 원장에서만 온다**. 이 조합이 C-01의 성격을 규정한다 — **상태를 갖지 않되 상태에 기댄다.** + +C-08과 대비하면 선명하다. C-08은 자기 원장(직전 3개월 매도 합산)을 스스로 세고 갱신하므로 STATEFUL이고, 그래서 원자성·경쟁조건을 걱정해야 한다. C-01은 남이 관리하는 원장을 읽기만 하므로 STATELESS이고, 경쟁조건이 없다. 대신 **정확성 전부를 그 원장의 무결성에 건다**. 인터페이스가 이 차이를 드러낸다 — C-08은 `canTransfer` + `transferred` 두 훅이 필요하지만, C-01은 `canTransfer` 하나뿐이고 `transferred`는 no-op이다. + +### 5.2 판정 순서 + 단계별 해설 + +**순서 원칙 — 싸고 탈락 잘 되는 검사·선행조건 먼저.** G0(원장 조회)이 맨 앞인 이유는 lot이 없으면 나머지가 전부 무의미하기 때문이고, G2(shell)가 G3~G6보다 앞인 이유는 **경로가 봉쇄되면 기간 계산 자체가 무의미**하기 때문이다. G3(기산)이 G5(기간 길이)보다 앞인 이유는 clockStart가 확정돼야 비교할 대상이 생기기 때문이며, G5가 G6 직전인 이유는 `required`가 **매도 시점 재조회 파생값**이라 최대한 늦게 읽어야 CFI 132.14를 지키기 때문이다. + + function check(seller, asset, sellQty, lotIds[], now) → (verdict, reasonCode) + + # ── 선행: C-00이 경로를 확정했을 때만 호출된다 ───────────── + require(C00.path == RULE144) # 아니면 C-01 미활성 (§1.2) + + # ── G0. lot 확보 ────────────────────────────────────────── + lots = lotIds.isEmpty() + ? Registry.selectFIFO(seller, asset, sellQty) # 기본 FIFO (§5.4) + : Registry.select(seller, asset, lotIds) # 명시 지정 + if lots.isEmpty(): return (FAIL, HP_LOT_NOT_FOUND) + if Σ lots.qty < sellQty: return (FAIL, HP_LOT_INSUFFICIENT) # ≥ 이면 통과 + + # ── lot 단위 판정: 하나라도 실패하면 거래 전체가 실패 ──────── + for lot in lots: + + # ── G1. 제한증권인가 — (d) 두문 ───────────────────────── + if lot.restricted == false: + continue # 조기 PASS — (d) 부적용 + if lot.holdingPeriodRequired == false: + continue # CFI 129.03 (계열의 공개시장 취득분 증여) + + # ── G2. shell 봉쇄 — Rule 144(i) ─────────────────────── + if asset.shellStatus == UNKNOWN: + return (REVIEW, HP_SHELL_STATUS_UNKNOWN) + if asset.shellStatus == SHELL: + return (FAIL, HP_SHELL_UNAVAILABLE) # 기간 무관 · 시간으로 치유 불가 + if asset.shellStatus == EX_SHELL: + if !asset.form10ContinuityOk: + return (FAIL, HP_SHELL_UNAVAILABLE) # (i)(2) 4요건 미충족 + if now < addPeriod(asset.form10InfoFiledAt, P1Y): + return (FAIL, HP_SHELL_UNAVAILABLE) # (i)(2) 1년 미경과 + + # ── G3. clockStart 확정 — sourceType 분기 ────────────── + if lot.sourceType == SRC_ESTATE: + if !lot.decedentOwned: # CFI 132.04 + goto TACK # 카브아웃 배제 → 일반 승계 + if lot.estateIsAffiliate == false: + continue # ⭐ PASS — (d)(3)(vii) "no holding period is required" + + if lot.sourceType ∈ {SRC_ISSUER_PRIVATE, SRC_REGD_506C, SRC_RULE144A}: + base = lot.acceptedAt # CFI 132.07 — mint 시각 아님 + + elif lot.sourceType == SRC_SEC4A7: + base = SEC4A7_TACKING_ENABLED # 거버넌스 상수 (§11.2) + ? tack(lot) # 승계 독법 (기본) + : lot.sec4a7AcquiredAt # 재기산 독법 + + else: # 승계형 5종 + TACK: + if lot.considerationPaid: # (d)(3)(ii) Note · CFI 132.13 + base = lot.acceptedAt # 대가 지급 → 승계 차단 · 재기산 + elif lot.sourceType == SRC_PLEDGE + and lot.pledgeRecourse == WITHOUT_RECOURSE: + base = lot.pledgedAt # (d)(3)(iv) 단서 → 재기산 + else: + origin = Registry.resolveOrigin(lot.lineageRef) # 원본 직결 (d)(3)(i) + if origin == null: + return (REVIEW, HP_LINEAGE_BROKEN) + base = origin.clockStart # 승계 + + # ── G4. 완납 — (d)(1)(iii)·(d)(2) ────────────────────── + if lot.paymentInstrument ∈ {NOTE, INSTALLMENT}: + if !lot.noteTermsAttested: # (d)(2)(i)(ii)(iii) AND + return (REVIEW, HP_NOTE_TERMS_UNVERIFIED) + if lot.noteDischargedAt == null or lot.noteDischargedAt > now: + return (REVIEW, HP_NOTE_TERMS_UNVERIFIED) # (d)(2)(iii) 매도 전 완제 + pay = lot.noteDischargedAt + else: + if lot.paymentCompleteAt == null or lot.paymentCompleteAt > now: + return (FAIL, HP_PAYMENT_INCOMPLETE) # "shall not begin until" + pay = lot.paymentCompleteAt + + clockStart = max(base, pay) # §3.7 + §3.9 + + # ── G5. 기간 길이 — 매도 시점에 재조회 (CFI 132.14) ────── + st = asset.reportingStatus # ⚠ lot에 저장된 값 쓰지 말 것 + if st == REPORTING and asset.reportingContinuityDays ≥ 90: + required = P6M # (d)(1)(i) + elif st == NON_REPORTING: + required = P1Y # (d)(1)(ii) ⭐ 기본값 + else: + required = P1Y # 보수적 1년 + flag(HP_REPORTING_STATUS_UNKNOWN) # REVIEW 병기 (§6.2) + + # ── G6. 해당일 비교 — CFI 132.10 ─────────────────────── + if now < addPeriod(clockStart, required): # 달력 해당일 · 일수 가산 금지 + return (FAIL, HP_PERIOD_NOT_ELAPSED) # 잔여일수 D 내부 기록 + + return (PASS, null) # 시간축 충족 — 다른 축은 별도 부품 + + # ── post-trade: 없음 (STATELESS) ─────────────────────────── + # lot 소진·분할 기록은 Acquisition Registry 소관 + +**단계별 해설.** + +- **G0의 `≥`.** `Σ lots.qty < sellQty`일 때만 실패한다. 정확히 같으면 통과다 — 가진 것을 전부 파는 것을 막을 이유가 없다. +- **G1의 두 겹.** `restricted`와 `holdingPeriodRequired`를 따로 본다. 둘을 하나로 합치면 CFI 129.03 사안(제한증권인데 보유기간 없음)을 표현할 수 없다. +- **G2의 위치.** shell FAIL은 **시간으로 치유되지 않는 유일한 FAIL**이다. 그래서 계산 앞에 둔다 — 뒤에 두면 "1년만 더 기다리면 된다"는 잘못된 잔여일수가 사용자에게 노출된다. +- **G3의 `goto TACK`.** 유산 카브아웃은 `decedentOwned`가 참일 때만 열린다. 거짓이면(유산이 옵션을 행사해 새로 받은 증권) 카브아웃을 건너뛰고 일반 승계 경로로 간다 — CFI 132.04의 문언을 그대로 옮긴 분기다. +- **G3의 `resolveOrigin`.** 승계는 직전 부모가 아니라 **원본**을 가리킨다((d)(3)(i)의 "if more than one, the initial dividend"). 사슬을 한 단씩 오르는 재귀가 아니라 한 번의 참조다. +- **G4의 `max`.** `base`(취득·승낙)와 `pay`(완납) 중 **나중**을 쓴다. (d)(1)(iii)이 "shall not begin until"이라 완납은 시계를 *미루는* 규칙이지 *세우는* 규칙이 아니기 때문이다(§3.9). +- **G5의 재조회.** `asset.reportingStatus`를 **지금** 읽는다. lot 생성 시점의 값을 캐시해 두면 CFI 132.14 위반이며, 발행자가 보고 대상이 된 뒤에도 옛 1년이 적용돼 과잉 차단이 되거나, 반대로 보고 대상에서 벗어난 뒤에도 옛 6개월이 적용돼 **과소 차단**이 된다. +- **G6의 `<`.** 실패 조건이 `now < 해당일`이므로 PASS 조건은 `now ≥ 해당일`이다. 해당일 당일이 통과다. + +### 5.3 Threshold·부등호 매트릭스 + +| 비교 | 식 | 부등호 | 경계에서 | 근거 | +| --- | --- | --- | --- | --- | +| lot 수량 충족 | `Σ lots.qty` vs `sellQty` | **≥** | 같으면 **통과** | (d) 두문 전제 | +| 보고 계속성 | `reportingContinuityDays` vs `90` | **≥** | 정확히 90일이면 **6개월 갈래** | (d)(1)(i) "at least 90 days" | +| 6개월 갈래 | `now` vs `addPeriod(clockStart, P6M)` | **≥** | 해당일 **당일 통과** | CFI 132.10 (5/15 → 11/15) | +| 1년 갈래 | `now` vs `addPeriod(clockStart, P1Y)` | **≥** | 해당일 **당일 통과** | (d)(1)(ii) · CFI 132.10 | +| 어음 완제 | `noteDischargedAt` vs `now` | **≤** | 매도 당일 완제는 **통과** | (d)(2)(iii) "prior to the sale" | +| 완납 | `paymentCompleteAt` vs `now` | **≤** | 매도 당일 완납은 **통과** | (d)(1)(iii) | +| EX_SHELL 해제 | `now` vs `addPeriod(form10InfoFiledAt, P1Y)` | **≥** | 해당일 **당일 통과** | (i)(2) "after one year has elapsed" | + +**⭐ C-01에는 `>` 게이트가 없다.** 일곱 비교 전부가 `≥` 또는 `≤`이며, 경계값은 전부 **통과** 쪽이다. 근거 어법이 일관된다 — Rule 144(d)는 "**must elapse**"(경과하여야 한다)라고 쓸 뿐 "must have exceeded"라고 쓰지 않는다. 도달이 곧 충족이다. + +**⚠ C-08과 반대 방향임에 주의.** C-08의 (e)(1)은 "shall not exceed"라 **초과만 위반**이고 도달은 허용이다(`Σ + qty > cap` → FAIL). 문장은 "경계값 통과"로 같아 보이지만 부등호의 방향과 의미가 다르다 — C-08은 상한 미달을 요구하고, C-01은 하한 도달을 요구한다. 두 부품이 같은 비교 헬퍼를 공유하면 한쪽이 반드시 어긋난다. **각자 자기 헬퍼를 갖는다.** + +### 5.4 시간 산술 — "6개월"·"1년"을 체인 시간으로 어떻게 재나 + +**① 달력 해당일이지 일수가 아니다.** `addPeriod(clockStart, P6M)`은 clockStart의 **같은 날짜의 6개월 후**다. 180일이 아니다. CFI 132.10의 예시(5/15 → 11/15)가 이를 직접 확정한다. 1년 갈래에서 오차가 더 크다 — 365일 가산은 윤년에서 하루가 어긋나고, 그 하루가 과소 차단이면 법적 사고다. + +**② 월말 경계는 보수적으로 다음 달 1일.** 8월 31일 취득 + 6개월 = 2월 31일인데, 그런 날짜는 없다. 두 관행이 있다 — 말일 절사(2월 28/29일)와 익월 이월(3월 1일). C-01은 **익월 1일**을 택한다. 이유는 방향이다 — 절사하면 하루 일찍 열려 과소 차단 위험이 생기고, 이월하면 하루 늦게 열려 과잉 차단이 된다. §1.4의 비대칭(과소 차단만이 §12(a)(1) 소권을 낳는다)에 따라 **늦는 쪽**을 고른다. 이는 조문이 지시한 바가 아니라 **정책 선택**이며, 그 사실을 §6.3에 명시하고 §12에 등록한다(OD-C01-5). + +**③ 타임존은 UTC 고정.** `block.timestamp`는 UTC 초 단위다. 달력 연산도 UTC로 수행한다. 취득 사실은 오프체인에서 현지 시각으로 기록될 수 있으므로, TA attestation은 **UTC로 정규화된 값**을 넣어야 하며 정규화 책임은 Operator에 있다(§11). + +**④ lot 선택 — 기본 FIFO, 명시 지정 허용.** 매도인이 여러 lot을 가질 때 어느 것을 파는가에 따라 결과가 갈린다(오래된 lot은 통과, 최근 lot은 미달). 기본값은 **FIFO**(가장 오래된 lot부터)이며, 매도인이 `lotIds[]`로 **명시 지정**할 수 있다. FIFO를 기본으로 두는 이유는 통과 가능성을 최대화해 과잉 차단을 줄이기 위해서다. 명시 지정을 허용하는 이유는 세무·회계상 특정 lot 지정이 필요한 경우가 있기 때문이며, 지정하면 그 lot으로만 판정한다 — **지정한 lot이 미달이면 다른 lot이 통과 가능해도 FAIL**이다. + +**⚠ AMM 풀은 lot 계보를 파괴한다.** 제한증권 lot을 AMM 풀에 넣는 순간 다른 보유자의 물량과 섞여 `lotId` 단위 추적이 불가능해진다. 풀에서 나온 토큰의 clockStart를 확정할 방법이 없으므로 C-01은 그 물량에 대해 영구히 REVIEW를 낼 수밖에 없다. 따라서 **제한 lot의 유통 채널은 P2P·RFQ로 제한**되어야 하며, 이는 C-01이 아니라 **B-04(엔진 선택)** 가 집행한다. C-01은 이 제약의 *이유*를 제공하고, 집행은 B-04에 위임한다. + +### 5.5 비결정성을 결정성으로 — 본 부품 구현의 본질 + +Rule 144(d)의 요건은 겉보기에 이미 결정적이다 — 날짜 두 개를 빼면 되니까. 그러나 실제로 비결정적인 것이 셋 남아 있고, C-01의 설계는 그 셋을 각각 다른 방식으로 결정성으로 치환한 결과다. + +| 비결정적 요소 | 왜 기계가 못 정하나 | 결정성 치환 | 잔여 위험 | +| --- | --- | --- | --- | +| **기산점** — "발행자가 승낙한 때" | 오프체인 사건. 체인에 흔적이 없다 | **TA attestation → CR-3 원장**에 기록하고 read-only 조회 | TA 기록의 진실성·적시성 (OD-C01-4) | +| **어음 3요건** — 소구·별도담보·매도 전 완제 | 계약서 해석. "fair market value at least equal to"는 평가 판단 | **자동 PASS 금지 → REVIEW**로 사람에게 되돌림 | 없음 (판단을 기계가 하지 않음) | +| **shell 지위** — "no or nominal operations" | 사실판단 + 법적 평가 | **Manifest 선언 + 근거문서 해시** | ⚠ 선언의 법적 근거 (OD-C01-1, **P0**) | + +**패턴이 보인다.** ① 도출 가능하나 체인 밖에 있는 사실 → **원장으로 끌어온다**. ② 판단이 필요한 사실 → **기계가 하지 않고 사람에게 보낸다**. ③ 자산 단위로 한 번 정해지는 법적 지위 → **선언 + 근거로 고정하고 미결로 등록한다**. C-01이 "순수 패턴 A"에서 벗어나는 지점은 ②와 ③ 둘뿐이며, 나머지 전부는 기계 판정이다(§8.2). + +### 5.6 [원리] 경제적 위험 하나로 (d) 전체가 설명된다 + +§1.3에서 예고한 원리를 여기서 로직으로 되돌린다. Release 33-8869은 보유기간의 존재 이유를 "an investor has assumed the **economic risk** of investment"의 지표라고 못 박았고(§3.16), 이 한 축으로 (d)의 규칙 전부가 설명된다. + +| 규칙 | 위험은 어떻게 되었나 | 그래서 시계는 | +| --- | --- | --- | +| (d)(1)(iii) 완납 전 미개시 | 돈을 다 안 냈으면 위험을 온전히 안 졌다 | **개시 안 함** | +| (d)(2) 어음은 완납 아님 | 빚으로 산 것은 위험 이전이 불완전 | **개시 안 함** (3요건 충족 시 예외) | +| (d)(2)(ii) 담보는 산 증권 외의 것 | 산 증권으로 자기금융하면 위험을 안 진 것 | **개시 안 함** | +| (d)(3)(i) 배당·분할 | 새 돈이 안 들어갔다 — 같은 위험이 쪼개졌을 뿐 | **승계** | +| (d)(3)(ii) 순수 교환 | 형태만 바뀌고 위험은 그대로 | **승계** | +| (d)(3)(ii) Note 대가 지급 개정 | 대가를 냈다 = 새 위험을 졌다 | **재기산** | +| (d)(3)(iv) 소구권 있는 질권 | 질권설정자가 여전히 인적 책임 → 위험 잔류 | **승계** | +| (d)(3)(iv) 무소구 질권 | 증권만 넘기면 끝 → 위험 이전 완료 | **재기산** | +| (d)(3)(v)(vi) 증여·신탁 | 무상 이전 — 새 위험 없음 | **승계** | +| (d)(3)(x) 무현금 행사 | 현금 유입 없음 | **승계** | +| CFI 132.11 직원 스톡옵션 | 공짜로 받은 옵션엔 행사 전 위험이 없다 | **행사 시 개시** | +| CFI 132.13 de minimis 현금 | 단돈이라도 냈으면 새 위험 | **재기산** | +| CFI 132.18 투자자 선택 교환 | 새 투자 판단이 있었다 | **교환일 개시** | +| CFI 132.18 강제 교환 | 투자자에게 판단권이 없었다 | **승계** | + +**하나의 문장으로.** *위험이 이어지면 시계도 이어지고, 새 판단·새 대가·새 위험이 개입하면 시계가 새로 선다.* 이 문장이 §3.11~§3.17의 열 갈래와 열여덟 해석을 관통한다. 구현자가 새로운 사실관계를 만났을 때 — 조문에도 CFI에도 없는 경우 — 판단의 출발점은 이 문장이며, 그 결론은 **자동 적용이 아니라 REVIEW**로 보내야 한다. 원리는 방향을 주지 권한을 주지 않는다. + + +## §6. ④ 거절·예외 처리 — 검사에 실패하면 어떻게 되는가 + +### 6.1 전체 흐름 (사람 말로) + +C-01이 막으면 세 갈래 중 하나다. **FAIL**은 "지금은 이 경로로 못 판다"이고, **REVIEW**는 "기계가 판단할 수 없으니 사람이 본다"이며, **PASS**는 "시간축은 충족했다 — 다른 축은 다른 부품이 본다"이다. 셋 다 거래를 끝내지 않는다는 점이 중요하다. C-01의 FAIL은 **그 증권을 영영 못 판다는 뜻이 아니다** — Rule 144는 배타적 안전항이 아니므로(§1.2), §4(a)(7)·Rule 144A·Reg S 904가 열려 있을 수 있고 그 판단은 C-00이 한다. C-01은 자기 경로 하나만 닫는다. + +그리고 C-01의 FAIL에는 **다른 부품에 없는 성질**이 하나 있다 — 대부분이 **시간이 지나면 저절로 풀린다**. A-13의 QP 미달은 자산이 늘어야 풀리고, C-08의 물량 초과는 3개월이 흘러야 headroom이 회복되지만, C-01의 `HP_PERIOD_NOT_ELAPSED`는 **아무것도 하지 않아도 해당일에 자동으로 열린다**. 그래서 사용자에게 돌려줄 답이 명확하다 — "며칠 뒤에 다시 오세요." 예외가 둘 있다. `HP_SHELL_UNAVAILABLE`은 시간으로 치유되지 않고(§3.14), `HP_PAYMENT_INCOMPLETE`는 시간이 아니라 **완납이라는 행위**로만 풀린다. + +### 6.2 Failure codes 9종 + +| 코드 | 판정 | 게이트 | 근거 | 해소 경로 | 시간으로 풀리나 | +| --- | --- | --- | --- | --- | --- | +| `HP_LOT_NOT_FOUND` | FAIL | G0 | (d) 두문 전제 | TA가 취득 원장에 lot 등록 | ✕ (등록 필요) | +| `HP_LOT_INSUFFICIENT` | FAIL | G0 | (d) 두문 전제 | 수량 축소 또는 다른 lot 지정 | ✕ | +| `HP_SHELL_UNAVAILABLE` | FAIL | G2 | Rule 144(i)(1)·(i)(2) | ⚠ **비보고 발행자는 해소 불가**(§3.14) — 경로 전환(C-00) | ✕ **영구** | +| `HP_SHELL_STATUS_UNKNOWN` | REVIEW | G2 | (i)(1) 적용 전제 | Manifest에 shellStatus + 근거문서 선언 | ✕ | +| `HP_LINEAGE_BROKEN` | REVIEW | G3 | (d)(3) 두문 · §4(e)(1)(C) | TA가 `lineageRef` 보정 등록 | ✕ | +| `HP_PAYMENT_INCOMPLETE` | FAIL | G4 | (d)(1)(iii) | **완납** + TA attestation | ✕ (행위 필요) | +| `HP_NOTE_TERMS_UNVERIFIED` | REVIEW | G4 | (d)(2)(i)(ii)(iii) | 계약서 검토 → 3요건 attestation 또는 어음 완제 | △ (완제 시) | +| `HP_REPORTING_STATUS_UNKNOWN` | REVIEW | G5 | (d)(1) 적용 전제 | Manifest에 reportingStatus + obligationBasis 선언 | ✕ | +| `HP_PERIOD_NOT_ELAPSED` | FAIL | G6 | (d)(1)(i)(ii) · CFI 132.10 | **대기** — 해당일에 자동 해소 | ⭐ **자동** | + +**`HP_REPORTING_STATUS_UNKNOWN`의 이중 동작.** 이 코드만 특이하다. REVIEW를 띄우면서도 **판정을 멈추지 않고** 보수적 1년을 적용해 G6까지 진행한다(§5.2). 이유는 두 방향의 실익이다 — 1년이 이미 지났다면 어느 갈래든 PASS이므로 REVIEW를 기다릴 필요가 없고(불필요한 차단 제거), 1년이 안 지났다면 `HP_PERIOD_NOT_ELAPSED`가 먼저 걸려 어차피 막힌다. 즉 REVIEW는 **거래 차단이 아니라 Manifest 보정 요청**으로 작동하며, Operator 큐에 쌓여 B-01의 정합 점검으로 넘어간다. + +**⚠ `HP_SHELL_UNAVAILABLE`의 특수 취급.** 이 코드는 다른 여덟과 성질이 다르다 — 부품의 판정이 아니라 **경로의 부존재**를 보고한다. 그래서 ① 잔여일수를 계산하지 않고(계산하면 "기다리면 된다"는 거짓 정보가 된다), ② 사용자 메시지에 대기 안내를 넣지 않으며, ③ Operator 대시보드에서 **즉시 에스컬레이션**한다. 이 코드가 하나라도 뜬다는 것은 Manifest의 shell 선언이 뒤집혔거나 발행자 지위에 중대한 변화가 있었다는 뜻이고, 그 경우 R2 Recipe 전체를 멈춰야 할 수 있다. + +### 6.3 정책 vs 법정 구분 (중요) + +C-01의 동작 중 일부는 **조문이 요구한 것**이고 일부는 **우리가 고른 것**이다. 감독 검사와 외부 자문에서 이 둘을 섞으면 답할 수 없으므로 여기서 분리한다. + +**법정 (조문·해석이 요구 — 변경 불가)** + +- 6개월/1년 갈래와 그 판정 기준(보고 지위, 직전 90일 계속) — (d)(1)(i)(ii) +- `clockStart = max(취득·승낙, 완납)` — (d)(1)(iii) + CFI 132.07 +- 해당일 방식 · `≥` 부등호 · 당일 통과 — CFI 132.10 +- `required`의 매도 시점 재조회 — CFI 132.14 +- 자발적 제출자 = 1년 — CFI 132.09 +- 승계형 5종의 tacking과 대가 지급 시 차단 — (d)(3) + CFI 132.13 +- 유산 카브아웃(비계열) · 사망자 소유분 한정 — (d)(3)(vii) + CFI 132.04 +- shell 봉쇄와 (i)(2) 해제 요건 — (i) +- **tolling 부재** — 33-8869 II.B.3 + +**정책 (우리가 고름 — 거버넌스로 변경 가능)** + +| 정책 | 선택값 | 왜 이 값인가 | 대안 | +| --- | --- | --- | --- | +| 월말 경계 처리 | **익월 1일**(이월) | 절사는 하루 일찍 열려 과소 차단 위험 | 말일 절사 (OD-C01-5) | +| lot 선택 기본값 | **FIFO** | 통과 가능성 최대화 → 과잉 차단 최소 | LIFO · 지정 강제 | +| `restricted` 결측 시 | **`true` 가정** | 시계를 거는 쪽이 안전 | REVIEW | +| `paymentInstrument` 결측 시 | **REVIEW** (CASH 가정 금지) | 완납 낙관은 과소 차단 | CASH 가정 (✕ 금지) | +| `SEC4A7_TACKING_ENABLED` | **`true`**(승계 독법) | 문언 대조의 귀결(§3.15) | `false` (OD-C01-2) | +| `reportingStatus == UNKNOWN` | **1년 + REVIEW 병기** | 보수적이면서 불필요한 차단 회피 | 즉시 FAIL | +| 어음·할부 lot | **자동 PASS 금지** | 3요건은 계약서 판단 | 자동 판정 (✕ 금지) | + +**⭐ 왜 이 표가 중요한가.** 감독 검사에서 "왜 8월 31일 취득분이 3월 1일에 열렸는가"를 물으면, 답은 "조문이 그렇게 요구해서"가 **아니다**. 정답은 "조문이 침묵하는 구간이고, 과소 차단을 피하는 방향으로 정책을 정했으며, 그 결정은 §6.3에 기록되고 OD-C01-5로 외부 자문에 등록되어 있다"이다. **판정은 기계에, 판단은 기록된 절차에, 미결은 등록부에** — 이 분리가 유지되는 한 C-01은 모든 동작의 근거를 답할 수 있다. + +### 6.4 Error message — 매도인 노출용 vs 내부 기록용 분리 + +두 계층을 다르게 쓴다. **노출용**은 매도인이 다음 행동을 알 수 있을 만큼만, **기록용**은 감사 추적이 판정을 재현할 수 있을 만큼 전부. + +| 코드 | 매도인 노출용 | 내부 기록용 (Compliance Log) | +| --- | --- | --- | +| `HP_PERIOD_NOT_ELAPSED` | "이 물량은 **2026-11-15**부터 이 경로로 매도할 수 있습니다. (잔여 120일)" | `{lotId, clockStart, required, eligibleAt, remainingDays, sourceType, basis:"144(d)(1)(ii)+CFI132.10"}` | +| `HP_PAYMENT_INCOMPLETE` | "취득 대금의 완납 기록이 확인되지 않았습니다. 발행사에 문의하세요." | `{lotId, acceptedAt, paymentCompleteAt:null, instrument, basis:"144(d)(1)(iii)"}` | +| `HP_SHELL_UNAVAILABLE` | "이 자산은 현재 이 경로로 매도할 수 없습니다. 다른 매도 경로를 확인하세요." ※ **대기 안내 금지** | `{asset, shellStatus, form10InfoFiledAt, continuityOk, basis:"144(i)(1)", escalate:true}` | +| `HP_LINEAGE_BROKEN` | "취득 이력 확인이 필요합니다. 검토 후 안내드립니다. (통상 1영업일)" | `{lotId, sourceType, lineageRef, resolveResult:null, basis:"144(d)(3)"}` | +| `HP_NOTE_TERMS_UNVERIFIED` | "취득 조건 검토가 필요합니다. 검토 후 안내드립니다." | `{lotId, instrument, noteTermsAttested, noteDischargedAt, basis:"144(d)(2)(i)(ii)(iii)"}` | +| `HP_LOT_NOT_FOUND` · `HP_LOT_INSUFFICIENT` | "매도 가능한 보유 물량이 확인되지 않습니다." | `{seller, asset, sellQty, lotsFound, ΣqtyEligible}` | +| `HP_SHELL_STATUS_UNKNOWN` · `HP_REPORTING_STATUS_UNKNOWN` | "자산 정보 확인 중입니다. 검토 후 안내드립니다." | `{asset, field, declaredValue:null, appliedDefault:"P1Y", escalate:true, basis:"CFI132.14"}` | + +**노출 규율 셋.** ① **`HP_PERIOD_NOT_ELAPSED`만 날짜를 준다.** 다른 코드에 잔여일수를 붙이면 거짓 기대를 만든다 — 특히 shell은 기다려도 안 열린다. ② **발행자 지위·shell 판단 근거를 노출하지 않는다.** `reportingStatus`·`shellStatus`는 자산 단위 법적 지위이고, 개별 매도인에게 그 판단 근거를 설명하는 것은 부품의 역할이 아니다. ③ **PASS 시에도 범위를 기록한다** — Compliance Log에 `safeHarborScope = "144(d) only"`를 남겨(§3.3), 이 PASS가 safe harbor 종국 확정으로 오독되지 않게 한다. + +## §7. ⑤ 테스트 케이스 — 스펙이 제대로 작동하는지 검증 + +§3.18의 12개 종단 경로를 전부 덮는다. 공통 전제: 발행자는 **비보고**(`reportingStatus = NON_REPORTING`), `shellStatus = NON_SHELL`, `path = RULE144`, 따라서 `required = P1Y`. + +### 7.1 Test 1 — Pass (정상 통과 · 해당일 당일) + +`lot`: `sourceType = SRC_REGD_506C`, `acceptedAt = 2025-05-15`, `paymentCompleteAt = 2025-05-15`, `restricted = true`, `qty = 1000`. 매도 시도 `2026-05-15`, `sellQty = 1000`. + +→ G0 `Σqty(1000) ≥ 1000` 통과 · G1 restricted · G2 NON_SHELL · G3 `base = 2025-05-15` · G4 `pay = 2025-05-15`, `clockStart = 2025-05-15` · G5 `required = P1Y` · G6 `addPeriod(2025-05-15, P1Y) = 2026-05-15`, `now ≥ 해당일` → **PASS**. + +**⭐ 이 케이스가 잡는 것:** 해당일 **당일 통과**(`≥`). `>`로 구현했다면 여기서 FAIL이 나온다. 그리고 수량이 정확히 같아도 통과(`≥`). + +### 7.2 Test 2 — Fail (해당일 하루 전) + +Test 1과 동일, 매도 시도 `2026-05-14`. + +→ G6 `now(2026-05-14) < 2026-05-15` → **FAIL `HP_PERIOD_NOT_ELAPSED`**. 노출: "2026-05-15부터 매도 가능 (잔여 1일)". 내부: `{clockStart:2025-05-15, required:P1Y, eligibleAt:2026-05-15, remainingDays:1}`. + +**이 케이스가 잡는 것:** 경계 직전. Test 1과 쌍으로 부등호 방향을 고정한다. + +### 7.3 Test 3 — Fail (365일 가산 오구현 탐지 · 윤년) + +`acceptedAt = paymentCompleteAt = 2027-03-01`(2028년은 윤년). 매도 시도 `2028-02-29`. + +→ 올바른 구현: `addPeriod(2027-03-01, P1Y) = 2028-03-01`, `now(2028-02-29) < 2028-03-01` → **FAIL**. +→ 오구현(`clockStart + 365 days`): `2027-03-01 + 365d = 2028-02-29` → **PASS** ✕. + +**⭐ 이 케이스가 잡는 것:** 일수 가산 오구현. 하루의 차이지만 방향이 **과소 차단**이므로 법적 사고다(§1.4). 회귀 테스트 필수. + +### 7.4 Test 4 — Fail (완납 지연 → clockStart가 승낙일이 아니다) + +`sourceType = SRC_REGD_506C`, `acceptedAt = 2025-05-15`, **`paymentCompleteAt = 2025-08-20`**(3개월 지연). 매도 시도 `2026-05-15`. + +→ G4 `clockStart = max(2025-05-15, 2025-08-20) = 2025-08-20` · G6 `addPeriod(2025-08-20, P1Y) = 2026-08-20`, `now(2026-05-15) < 2026-08-20` → **FAIL `HP_PERIOD_NOT_ELAPSED`** (잔여 97일). + +**이 케이스가 잡는 것:** (d)(1)(iii)의 `max` 결합. `acceptedAt`만 보는 구현은 여기서 잘못 PASS를 낸다 — **3개월 조기 개방 = 과소 차단**. + +### 7.5 Test 5 — Pass (⭐ 배당 tacking · BUIDL-like 상시 시나리오) + +원본 `lot#1`: `SRC_REGD_506C`, `clockStart = 2025-05-15`, `qty = 1000`. +배당 `lot#2`: `SRC_DIVIDEND`, `mintedAt = 2026-05-01`, `lineageRef = lot#1`, `considerationPaid = false`, `qty = 12`. +매도 시도 `2026-05-20`, `sellQty = 1012` (양쪽 전부). + +→ `lot#1`: `clockStart = 2025-05-15` → 해당일 2026-05-15 → 통과. +→ `lot#2`: G3 승계형 → `resolveOrigin(lot#1)` → `base = 2025-05-15` → 해당일 2026-05-15 → 통과. → **PASS**. + +**⭐ 이 케이스가 잡는 것:** 배당 lot의 승계. 승계가 없으면 `lot#2`의 clockStart가 2026-05-01이 되어 **2027-05-01까지 막히고**, 매달 배당이 나오는 구조에서는 보유자가 **영원히 전량 매도를 못 한다**(§3.11). 이 테스트가 실패하면 BUIDL-like 자산의 R2가 사실상 작동하지 않는다. + +### 7.6 Test 6 — Fail (승계 차단 · de minimis 대가) + +Test 5와 동일하되 `lot#2.considerationPaid = true` (전환권 개정 시 소액 대가 지급). + +→ G3 `considerationPaid` → 승계 차단 → `base = lot#2.acceptedAt = 2026-05-01` → 해당일 2027-05-01 → **FAIL `HP_PERIOD_NOT_ELAPSED`**. + +**이 케이스가 잡는 것:** (d)(3)(ii) Note · CFI 132.13("even a de minimis amount of cash"). 임계값·허용오차를 둔 구현은 여기서 잘못 PASS를 낸다. + +### 7.7 Test 7 — REVIEW (승계 사슬 단절) + +`lot#3`: `SRC_DIVIDEND`, `lineageRef = 0x00` (mint 시 미기록 — ERC-3643 mint bypass). + +→ G3 `resolveOrigin(null)` → **REVIEW `HP_LINEAGE_BROKEN`**. 자동 PASS도, 자동 재기산도 하지 않는다. + +**이 케이스가 잡는 것:** mint 경로의 compliance bypass(§3.19 ⚠). 배당 mint 시 `lineageRef`를 기록하지 않는 배선 결함을 런타임에 드러낸다(OD-C01-3). + +### 7.8 Test 8 — Pass (⭐ 유산 카브아웃 · 보유기간 요건 소멸) + +`lot#4`: `SRC_ESTATE`, `decedentOwned = true`, `estateIsAffiliate = false`, 사망자 취득일 `2026-04-01`(불과 2개월 전). 매도 시도 `2026-06-01`. + +→ G3 `SRC_ESTATE` ∧ `decedentOwned` ∧ `!estateIsAffiliate` → **즉시 PASS** (G4·G5·G6 건너뜀). + +**⭐ 이 케이스가 잡는 것:** (d)(3)(vii) 단서 "no holding period is required". 기간이 짧아지는 게 아니라 **없다**. 카브아웃을 "1년 → 6개월"로 오구현하면 여기서 FAIL이 난다 — **과잉 차단**. + +### 7.9 Test 9 — Fail (유산 카브아웃 배제 · CFI 132.04) + +Test 8과 동일하되 `decedentOwned = false` (유산이 사망자의 옵션을 행사해 취득). + +→ G3 카브아웃 배제 → 일반 승계 경로 → `base = 옵션 행사일 2026-04-01`(CFI 132.11) → 해당일 2027-04-01 → **FAIL `HP_PERIOD_NOT_ELAPSED`**. + +**이 케이스가 잡는 것:** CFI 132.04의 "applies only to securities owned by the decedent". `estateIsAffiliate`만 보고 카브아웃을 여는 구현은 여기서 잘못 PASS를 낸다. + +### 7.10 Test 10 — Fail→Pass (⭐ CFI 132.14 · 발행자 지위 변경으로 required가 바뀐다) + +`lot#5`: `SRC_ISSUER_PRIVATE`, `clockStart = 2025-09-01`. +① 매도 시도 `2026-03-05`, `reportingStatus = NON_REPORTING` → `required = P1Y` → 해당일 2026-09-01 → **FAIL** (잔여 180일). +② 발행자가 Form 10 제출 후 보고 대상이 되고 90일 경과. 매도 재시도 `2026-04-10`, `reportingStatus = REPORTING`, `reportingContinuityDays = 95` → `required = P6M` → 해당일 **2026-03-01** → `now ≥ 해당일` → **PASS**. + +**⭐ 이 케이스가 잡는 것:** `required`를 lot에 저장한 구현은 ②에서 여전히 1년을 적용해 **과잉 차단**한다. 매 판정마다 재조회해야 CFI 132.14를 지킨다. 역방향(보고 → 비보고)도 회귀에 포함하라 — 그 경우 이미 통과했던 lot이 **다시 FAIL로 돌아가며**, staff 예시가 명시적으로 "would not have satisfied ... as of that date"라고 확인한다. + +### 7.11 Test 11 — Fail (⚠ shell 봉쇄 · 시간으로 치유 불가) + +`lot#6`: `clockStart = 2020-01-01`(6년 경과). `asset.shellStatus = SHELL`. 매도 시도 `2026-06-01`. + +→ G2 → **FAIL `HP_SHELL_UNAVAILABLE`**. G3~G6에 도달하지 않는다. 노출 메시지에 **잔여일수·대기 안내 없음**. Operator 즉시 에스컬레이션. + +**이 케이스가 잡는 것:** ① 게이트 순서(G2가 G6보다 앞). shell을 뒤에 두면 6년이 지났으므로 PASS가 나온다 — **경로 봉쇄를 뚫는 치명적 오구현**. ② 잔여일수 미노출. + +### 7.12 Test 12 — REVIEW + 보수적 적용 (reportingStatus 미선언) + +`lot#7`: `clockStart = 2024-01-01`(2년 경과). `asset.reportingStatus = UNKNOWN`. 매도 시도 `2026-06-01`. + +→ G5 `UNKNOWN` → `required = P1Y` + `flag(HP_REPORTING_STATUS_UNKNOWN)` · G6 해당일 2025-01-01, `now ≥ 해당일` → **PASS + REVIEW 병기**. + +**이 케이스가 잡는 것:** `UNKNOWN`을 즉시 FAIL로 처리한 구현은 여기서 불필요하게 차단한다 — 2년이 지났으므로 6개월이든 1년이든 어느 갈래든 통과이기 때문이다. REVIEW는 거래 차단이 아니라 **Manifest 보정 요청**으로 작동해야 한다(§6.2). + +### 7.13 회귀 테스트 요약 + +| # | 잡는 오구현 | 방향 | 심각도 | +| --- | --- | --- | --- | +| T1·T2 | `>` vs `≥` (해당일 당일) | 과잉 차단 | 중간 | +| T3 | 365일/180일 가산 | **과소 차단** | 높음 | +| T4 | `acceptedAt` 단독 사용 (max 누락) | **과소 차단** | 높음 | +| T5 | 배당 tacking 누락 | 과잉 차단 (R2 사실상 마비) | 높음 | +| T6 | de minimis 허용오차 | **과소 차단** | 높음 | +| T7 | mint bypass · lineage 미기록 | 판정 불능 | 중간 | +| T8 | 카브아웃을 기간 단축으로 오해 | 과잉 차단 | 중간 | +| T9 | `decedentOwned` 미확인 | **과소 차단** | 높음 | +| T10 | `required` 캐시 | 양방향 | 높음 | +| T11 | G2 순서 오류 | **경로 봉쇄 우회** | 높음 | +| T12 | UNKNOWN 즉시 FAIL | 과잉 차단 | 낮음 | + +⚠ 6종이 전부 **과소 차단 또는 봉쇄 우회** 방향이다. §1.4의 비대칭 — 과소 차단만이 §12(a)(1)의 매수인 소권을 낳는다 — 이 테스트 우선순위를 그대로 정한다. + + +## §8. (α) 직접 계산형 패턴 — 왜 이 방식인가 + +### 8.1 Decipher의 검증 방식 3패턴 + +| 패턴 | 무엇을 하나 | 신뢰의 근거 | 대표 부품 | +| --- | --- | --- | --- | +| **A. 직접 계산형** | 기계가 값을 직접 비교해 판정 | 계산의 정확성 | **C-01(본 부품)** · B-04 · C-00 | +| **B. 증명서형** | 서명된 claim에 대한 합리적 신뢰 | 발급자의 검증 + reasonable belief 안전항 | A-13 · A-03 · A-06 · A-08 · A-09 | +| **C. 상태추적형** | 누적 상태를 세고 상한과 비교 | 원장의 완전성 | C-08 · D-01 | + +### 8.2 보유기간 판정에 패턴 A가 맞는 이유 — 그리고 벗어나는 두 지점 + +**패턴 A인 이유.** Rule 144(d)의 요건은 **날짜 비교**다. A-13의 QP 판정처럼 "$5M 이상의 investments를 보유하는가"를 묻는 것이 아니라 "이 시각이 저 시각보다 나중인가"를 묻는다. 여기에는 판단이 없고, 따라서 **합리적 신뢰(reasonable belief) 안전항이 필요 없다**. 실제로 Rule 144(d)에는 A-13이 기대는 Rule 2a51-1(h) 같은 신뢰 안전항 조항이 **존재하지 않는다** — 조문이 신뢰를 요구하지 않기 때문이다. 시각이 주어지면 답은 하나로 확정된다. + +**⚠ 그러나 "값이 주어지면"이 전제다.** 여기서 C-01의 진짜 성격이 드러난다. 계산은 결정적인데 **입력이 결정적이지 않다**. `clockStart`의 두 재료(`acceptedAt`·`paymentCompleteAt`)는 오프체인 사실이고, 그것을 원장에 넣는 행위는 TA의 attestation이다. 즉 — + +> **C-01은 판정에서는 패턴 A이지만, 입력에서는 패턴 B에 기댄다.** + +이 이중성이 §10의 3층 구조가 필요한 이유다. 계산 층은 신뢰가 필요 없지만, 그 아래 사실 층은 전적으로 신뢰 위에 서 있다. 그리고 이 구조에는 A-13에 없는 위험이 하나 있다 — **A-13은 Rule 2a51-1(h)라는 성문 안전항으로 신뢰를 보호받지만, C-01의 입력 신뢰를 보호하는 조문은 없다.** TA가 기록한 `acceptedAt`이 틀렸을 때 "우리는 합리적으로 신뢰했다"고 방어할 조문상 근거가 (d)에는 없다. 이것이 §12 OD-C01-4(TA attestation 신뢰의 법적 지위)의 배경이며, 프로젝트 차원의 미결 쟁점(TA attestation reliance)과 같은 축이다. + +**패턴 A에서 벗어나는 두 지점.** C-01이 순수 계산이 아닌 곳은 정확히 둘이며, 둘 다 **기계가 판정하지 않고 사람에게 넘긴다**. + +1. **어음·할부 3요건**((d)(2)) — "secured by collateral ... having a fair market value at least equal to the purchase price"는 평가 판단이다. 자동 판정 금지 → `HP_NOTE_TERMS_UNVERIFIED` (REVIEW). +2. **shell 지위**((i)(1)) — "no or nominal operations"는 사실판단 + 법적 평가다. Manifest 선언 + 근거문서 해시로 고정하되, 그 선언 자체가 미결이다(OD-C01-1, **P0**). + +**⭐ C-01 PASS의 정확한 의미.** 패턴 A라고 해서 PASS가 종국 확정은 아니다. Preliminary Note가 두 겹으로 한정한다 — ① Rule 144는 배타적이지 않으므로 FAIL이 매도 불가를 뜻하지 않고, ② "although in technical compliance with Rule 144, is part of a plan or scheme to evade"이면 기술적 준수에도 안전항이 사라진다. 즉 **C-01의 PASS = "(d) 시간축 조건 충족"이지 "safe harbor 확정"이 아니다.** 회피 계획 탐지는 A-12(반대정보)·F-02(시장행위 감시)·운영 검토의 몫이며, C-01은 Compliance Log에 `safeHarborScope = "144(d) only"`를 남겨 이 한계를 명시한다. + +### 8.3 STATELESS인데 원장에 기댄다 — Acquisition Registry(CR-3) + +**CR-3이 존재해야 하는 이유는 CFI 132.07 한 문장이다.** staff는 기산점을 "the time the agreement is accepted by the issuer"로 확정하면서 "**rather than ... the date the shares are issued**"라고 명시적으로 배제했다. ERC-3643/T-REX가 자연히 갖는 유일한 시각은 mint의 `block.timestamp` — 즉 배제된 그 시각이다. **법이 요구하는 시각이 체인에 없다.** 그래서 별도 원장이 필요하다. 이것은 설계 취향이 아니라 조문 대조의 강제 귀결이다. + +| 축 | C-01 (STATELESS) | C-08 (STATEFUL) | +| --- | --- | --- | +| 자기 상태 | 없음 | 직전 3개월 매도 롤링 원장 | +| `canTransfer` | 필요 | 필요 | +| `transferred` commit | **no-op** | 필수 (매도 기록 적립) | +| 원자성·경쟁조건 | 해당 없음 | 핵심 위험 | +| 외부 원장 의존 | **전면적** (CR-3) | 부분적 (분모는 Manifest) | +| 정확성의 급소 | **원장의 무결성·적시성** | 자기 원장의 완전성 | +| 시간의 역할 | 판정 대상 그 자체 | cure 메커니즘 (창 만료) | + +**CR-3의 책임 경계.** C-01은 CR-3을 **읽기만** 한다. lot 생성·분할·소진·승계 참조 기록은 전부 Registry 소관이며, C-01은 그 결과를 소비한다. 이 분리를 지키는 이유는 셋이다 — ① C-01이 쓰기를 하면 STATEFUL이 되어 경쟁조건이 생기고, ② 같은 원장을 C-08·E-06도 읽어야 하므로 특정 부품의 소유물이 되면 안 되며, ③ 원장 기록의 진실성 책임이 TA에 있는데 C-01이 쓰면 책임 경계가 흐려진다. + +**⚠ CR-3 설계가 blocking이다.** C-01의 성숙도가 "⭐ R2 핵심"인데도 Phase 2에 묶여 있는 이유가 여기 있다. lot 스키마(§3.19)·mint 시 `lineageRef` 기록 배선·TA attestation 인터페이스·`forcedTransfer` 시 승계 규칙이 전부 CR-3 설계 결정에 달려 있고, 그 결정은 C-01 단독으로 내릴 수 없다(C-08·E-06과 공동 설계 지점). + +### 8.4 부착 좌표 — R2 ● / R1·R3·R4 — + +| Recipe | 부착 | 이유 | +| --- | --- | --- | +| **R2** (§4(a)(1)·Rule 144 재판매) | ● **전용** | (d)는 재판매 조건이다. C-00이 `RULE144`를 확정한 뒤에만 켜진다 | +| R1 (506(c) 발행) | — | 발행에는 보유기간이 없다. 오히려 R1이 `clockStart`를 **만든다** | +| R3 (§3(c)(7) 펀드) | — | 별개 축. 보유기간 충족이 QP 게이트를 해소하지 않는다(A-13 §1.3) | +| R4 (시장행위) | — | 시간축과 무관 | + +**글로벌 게이트가 아니다.** A-01(제재)처럼 모든 거래에 붙는 transaction-level 게이트가 아니라 **R2 전용 Recipe 부품**이다. 따라서 `manifest.globalGates`가 아니라 R2의 조건부 attach 목록에 들어간다(§9.3). + +## §9. (β) Cross-Element·Cross-Recipe Coordination — 혼자 움직이지 않는다 + +### 9.1 본 부품의 책임 경계 + +**C-01이 하는 일:** Rule 144(d) 하나. lot의 기산점을 확정하고, 매도 시점의 요구 기간을 산출하고, 해당일이 도래했는지 비교한다. 그것뿐이다. + +**C-01이 하지 않는 일 (누락이 아니라 소관 분리):** + +| 하지 않는 일 | 소관 | 왜 여기가 아닌가 | +| --- | --- | --- | +| 전매 경로 선택 | **C-00** | C-01은 `RULE144` 확정 후 켜지는 하류 부품 | +| `restricted` 부여·유지 | **B-03** | C-01은 플래그를 읽기만 | +| 계열 판정 | **A-06** | 결과를 소비하되 `required`를 바꾸지 않음 | +| 합산 단위(동일인) | **A-04** | lot 귀속 확인에만 사용 | +| (c) 공시 | **E-05** | 병행 조건 | +| (e) 물량 | **C-08** | 병행 조건 | +| (f)(g) 매도방식 | **C-09** | 병행 조건 | +| (h) Form 144 | **E-06** | 병행 조건 | +| QP 게이트 | **A-13** | 별개 축(ICA) | +| 증명 유효기간 | **A-11** | 다른 시계(§1.5) | +| lot 원장 기록 | **CR-3 · TA** | C-01은 read-only | +| 유통 채널 제한 | **B-04** | C-01은 이유를 제공, 집행은 위임(§5.4) | +| 회피 계획 탐지 | **A-12 · F-02 · 운영** | Preliminary Note의 밖(§8.2) | + +### 9.2 Element cascade map + + [상류 — C-01에 입력을 공급] + C-00 전매 경로 확정 ── path == RULE144 ─────► C-01 활성 + B-03 restricted 메타 ── lot.restricted ─────► G1 + B-01 Manifest 정합 ── reportingStatus · shellStatus ─► G2 · G5 + A-06 계열 판정 ── estateIsAffiliate ────────► G3 (카브아웃만) + A-04 동일인 판정 ── lot 귀속 확인 ──────────► G0 + TA/CR-3 취득 원장 ── acceptedAt · paymentCompleteAt · lineageRef ─► G3 · G4 + + [C-01] + Rule 144(d) 시간축 판정 → PASS / FAIL / REVIEW + + [병행 — 같은 거래에 동시 작동 (AND 결합)] + 계열 매도인이면: E-05 (c)공시 · C-08 (e)물량 · C-09 (f)(g)방식 · E-06 (h)신고 + R3 동시 활성이면: A-13 QP 게이트 (별개 축) + 항상: A-01 제재 글로벌 게이트 + + [하류 — C-01의 결과를 소비] + Compliance Log ── safeHarborScope = "144(d) only" + B-04 ── 제한 lot의 유통 채널 제한 근거 + +**⭐ cascade의 특이점 — C-01은 다른 부품을 호출하지 않는다.** A-13·A-09는 look-through로 서로를 재귀 호출하지만(mutual recursion), C-01은 **순수 소비자**다. 상류에서 값을 받아 계산하고 결과를 내놓을 뿐, 어떤 부품도 부르지 않는다. 유일하게 재귀처럼 보이는 것이 G3의 `resolveOrigin(lineageRef)`인데, 이는 부품 호출이 아니라 **같은 원장 내 참조 해석**이며 원본 직결이므로 1단계로 끝난다(§3.11). 이 단순함이 C-01을 STATELESS로 유지시키는 구조적 이유다. + +### 9.3 Recipe orchestration — 매도인 지위가 배선을 바꾼다 + +R2의 부품 배선은 A-06의 결과와 발행자 지위에 따라 셋으로 갈린다. **C-01은 세 경우 모두에 붙지만, 셋 다 동일하게 작동한다** — 기간도, 기산도, 비교식도 바뀌지 않는다. 바뀌는 것은 **옆에 붙는 부품의 수**뿐이다. + +| 경우 | 조건 | attach 부품 | 근거 | +| --- | --- | --- | --- | +| **① 비보고 + 비계열** ⭐ | `NON_REPORTING` ∧ `!isAffiliate` | **{C-01}** 단독 | (b)(1)(ii) "**the condition** of paragraph (d)" (단수) | +| ② 보고 + 비계열 | `REPORTING` ∧ `!isAffiliate` | {C-01, E-05} ※ 1년 경과 후 E-05 해제 | (b)(1)(i) "all of the conditions of paragraphs (c)(1) and (d)" | +| ③ 계열 | `isAffiliate` (또는 직전 90일 내 계열) | {C-01, E-05, C-08, C-09, E-06} | (b)(2) "**all of the conditions** of this section" | + +**⭐ 경우 ①이 R2의 기본값이자 C-01의 무게다.** BUIDL-like 발행자는 비보고이고 통상 보유자는 비계열 기관 QP이므로, 대다수 재판매가 ①에 떨어진다. 그리고 ①에서 Rule 144의 조건은 **(d) 하나뿐**이다 — (b)(1)(ii)가 단수형 "the condition"으로 쓰여 있기 때문이다(§3.0.1·§3.5). 즉 **BUIDL-like 토큰의 일반 보유자에게 Rule 144 재판매란 사실상 C-01 하나를 통과하는 것**이며, C-01이 틀리면 그 거래를 잡아 줄 다른 부품이 없다. 다른 부품들과의 상호 검증이 없는 **단일 실패점(single point of failure)** 이라는 뜻이고, §7의 회귀 테스트가 그만큼 무겁다. + +**경우 ③의 대비.** 계열이면 다섯 부품이 동시에 붙는다. 여기서 반복 강조할 것 — **(d)의 길이는 ①②③이 전부 같다.** 계열이라고 1년이 2년이 되지 않는다(§1 정정 노트·§3.6). 계열에게 더해지는 것은 *조건의 개수*이지 *시간*이 아니다. 이 오해가 흔한 이유는 (b)(2)가 "all of the conditions"라고 써서 마치 (d)도 강화되는 듯 읽히기 때문이나, (d)는 (b)와 독립된 조항이고 그 안에 계열·비계열 구분이 없다. + +### 9.4 Conflict resolution — 세 가지 경우 + +**경우 1 — C-01 PASS + 병행 부품 FAIL.** 결합은 **AND**다. C-01이 통과해도 C-08(물량)이 막으면 거래는 막힌다. C-01의 PASS는 자기 축의 충족일 뿐이며, (b)(2)의 "all of the conditions"가 이를 요구한다. 흔한 오해가 "1년 지났으니 물량 제한 무관"인데, (e)는 "regardless of whether those securities are restricted"라 보유기간과 무관하게 계열에게 걸린다(C-08 부록 C). + +**경우 2 — C-01 FAIL + C-00에 다른 경로 존재.** C-01 FAIL은 **Rule 144 경로만** 닫는다. Preliminary Note가 "Rule 144 is not an exclusive safe harbor"라고 명시하므로, §4(a)(7)·Rule 144A·Reg S 904가 열려 있으면 그 경로로 갈 수 있다. **해소는 C-01이 아니라 C-00이 한다** — C-01이 FAIL을 반환하면 C-00이 대체 경로를 재평가한다. 이 순서를 뒤집어 C-01이 먼저 거래를 죽이면, 팔 수 있었을 물량까지 잘못 막힌다(§2 메타 박스). + +**⭐ 경우 3 — 발행자가 보고회사가 되면 배선이 통째로 바뀐다.** 가장 까다로운 경우다. 발행자가 Form 10을 제출하고 90일이 지나면, **같은 lot에 대해 세 가지가 동시에 바뀐다.** + + 발행자 지위 전환 (NON_REPORTING → REPORTING, 직전 90일 계속) + ① C-01: required = P1Y → P6M (CFI 132.14 — 매도 시점 기준) + ② Recipe: 배선 ① → ② ((b)(1)(ii) → (b)(1)(i)) + ③ E-05 활성: 6개월~1년 구간에 (c)(1) 공시 조건이 붙음 + └ 1년 경과 시 (c)(1) 자동 해제 ((b)(1)(i) 둘째 문장 — "1년 evergreen") + +전환의 방향에 따라 결과가 비대칭이다. **비보고 → 보고**는 기간이 줄어 이미 6개월을 채운 lot이 **즉시 매도 가능**해지지만, 동시에 E-05가 붙어 **다른 조건이 새로 생긴다**. 반대로 **보고 → 비보고**는 기간이 늘어 **이미 통과했던 lot이 다시 FAIL로 돌아간다** — staff 예시가 "the investor would not have satisfied the Rule 144(d) holding period requirement as of that date"라고 명시적으로 확인한 결과다(CFI 132.14). 이 역방향이 위험한 이유는 사용자가 "어제는 팔 수 있었는데 오늘은 안 된다"를 경험하기 때문이며, 그것이 **법적으로 올바른 동작**임을 Operator가 설명할 수 있어야 한다(§11). + +**해소 규칙.** ① `required`를 캐시하지 않는다(§5.2 G5). ② Recipe 배선을 매 거래 재평가한다 — 전환 시점에 일괄 재배선하는 배치 방식은 그 사이 거래를 잘못 처리한다. ③ 전환 사건을 Manifest 변경으로 처리하고 B-01이 정합을 검증하며, 그 순간 R2의 모든 미결 REVIEW를 재평가 큐에 넣는다. + +**경우 4 — R2와 R3 동시 활성.** BUIDL-like 자산의 재판매에서는 R2(증권법 재판매)와 R3(§3(c)(7) 펀드)가 **동시에** 켜진다. 결합은 **AND**이며, 두 축은 서로를 해소하지 않는다 — C-01이 1년을 채워도 매수인이 QP가 아니면 A-13이 막고, 매수인이 QP여도 C-01이 미달이면 C-01이 막는다. 두 축은 근거 법률이 다르므로(1933년법 vs 1940년법) 어느 쪽도 다른 쪽의 충족을 대체하지 못한다(§1.5 혼동 주의 3종). + + +## §10. (γ) 3-Layer Solution — 증거 신뢰를 세 겹으로 + +### 10.1 왜 3겹인가 + +C-01의 계산은 신뢰를 요구하지 않는다. 그러나 그 계산의 입력(`acceptedAt`·`paymentCompleteAt`·`sourceType`·`lineageRef`)은 **전부 오프체인 사실**이고, 오프체인 사실이 온체인 판정에 들어오려면 누군가가 "이것이 사실이다"라고 서명해야 한다(§8.2). 그 서명을 한 겹으로 두면 그 한 겹이 틀렸을 때 판정 전체가 조용히 틀린다 — 그리고 시간축의 조용한 오류는 **과소 차단**, 즉 §12(a)(1) 소권의 재료다(§1.4). 그래서 셋으로 나눈다. + +| 층 | 무엇 | 누가 | C-01에서 하는 일 | 틀리면 | +| --- | --- | --- | --- | --- | +| **L1 — 선언** | 자산 단위 법적 지위 | 발행자 · Operator (Manifest) | `reportingStatus` · `shellStatus` · 근거문서 해시 | 자산 전체가 오작동 — B-01이 정합 검증 | +| **L2 — 원장** | lot 단위 사실의 보관 | Acquisition Registry (CR-3) | `lotId` · `qty` · `lineageRef` · `restricted` | 판정 불능 (REVIEW) | +| **L3 — 증명** | lot 단위 사실의 진위 | **Securitize (TA)** attestation | `acceptedAt` · `paymentCompleteAt` · `sourceType` · `considerationPaid` | ⚠ **조용한 과소 차단** | + +### 10.2 각 층의 법적 토대 — 그리고 L3의 공백 + +**L1.** Rule 144(d)(1)의 갈래 판정이 발행자 지위에 달려 있고((i)(ii)), (i)(1)의 shell 판정도 발행자 단위다. 즉 조문 자체가 **자산 단위 선언**을 요구하는 구조다. CFI 132.09가 그 선언의 기준을 "낼 의무가 있는가"로 못 박았으므로, 선언은 사실 관찰이 아니라 법적 판단의 결과이며 근거문서가 따라야 한다. + +**L2.** 조문이 원장을 요구하지는 않는다. 그러나 CFI 132.07이 기산점을 mint가 아닌 승낙 시각으로 확정한 순간, 체인 밖 시각을 보관할 곳이 **논리적으로 강제된다**(§8.3). CR-3은 규제 요구가 아니라 **규제 준수를 위한 구현 귀결**이다. + +**⚠ L3의 공백 — C-01에는 reasonable belief 안전항이 없다.** 이것이 A-13과 C-01의 결정적 차이다. A-13은 Rule 2a51-1(h)가 "reasonable belief" 안전항을 **조문으로** 제공하므로, 위조된 claim에 속았을 때 방어 근거가 성문화되어 있다. Rule 144(d)에는 **그런 조항이 없다.** 조문은 "a minimum of one year must elapse"라고만 쓸 뿐, "매도인이 합리적으로 신뢰한 취득일 기준으로"라고 쓰지 않는다. 즉 TA가 기록한 `acceptedAt`이 틀렸다면, 실제 기산점 기준으로 기간이 미달이었다는 객관적 사실만 남는다. + +조문에서 신뢰가 등장하는 곳은 (d)가 아니라 **(g)(4)의 브로커 축**이다 — "After reasonable inquiry is not aware of circumstances indicating that the person for whose account the securities are sold is an underwriter." 그리고 그 reasonable inquiry의 항목 첫 번째가 "The length of time the securities have been held by the person for whose account they are to be sold"다(Note (ii)(a)). 즉 **보유기간에 대한 조회 의무는 브로커에게 지워져 있고**, 그 의무는 C-09((f)(g) 매도방식) 소관이다. DEX에 브로커가 없다면 이 조회 의무를 누가 지는가 — 이것이 프로젝트 차원의 BD/ATS 지위 문제와 만나는 지점이며, C-01 단독으로 답할 수 없다(OD-C01-4). + +**⭐ 그래서 L3의 실질적 방어는 조문이 아니라 대사(reconciliation)다.** 신뢰를 조문이 보호해 주지 않으므로, **틀린 입력을 발견하는 능력** 자체가 방어가 된다. `mintedAt`을 clockStart로 쓰지 않으면서도 **버리지 않고 별도 보관**하는 이유가 여기 있다 — `acceptedAt`과 `mintedAt`의 간격이 통상 범위를 벗어나면 그 lot의 attestation을 의심할 근거가 되고, 정기 대사가 그것을 잡는다. 대사는 법적 요구가 아니라 **L3 공백에 대한 보상 통제**다. + +### 10.3 층 간 escalation 규칙 + + L2 결측 (lot 없음 · lineage 끊김) + → HP_LOT_NOT_FOUND (FAIL) · HP_LINEAGE_BROKEN (REVIEW) + → Operator 큐 → TA에 보정 등록 요청 → 재판정 + + L3 결측 (acceptedAt · paymentCompleteAt 없음) + → HP_PAYMENT_INCOMPLETE (FAIL) + → ⚠ 자동 추정 금지 (mintedAt으로 대체 금지) + → TA attestation 재발급 요청 + + L3 판단 불가 (어음 3요건) + → HP_NOTE_TERMS_UNVERIFIED (REVIEW) + → 계약서 검토 (사람) → 3요건 attestation 또는 완제 확인 + + L1 결측 (reportingStatus · shellStatus 미선언) + → HP_REPORTING_STATUS_UNKNOWN (REVIEW + 보수적 1년 적용 후 진행) + → HP_SHELL_STATUS_UNKNOWN (REVIEW + 즉시 차단) + → Manifest 보정 → B-01 정합 검증 + + L1 뒤집힘 (shellStatus: NON_SHELL → SHELL) + → HP_SHELL_UNAVAILABLE (FAIL) · 즉시 에스컬레이션 + → ⚠ R2 Recipe 전체 중단 검토 + +**규율 하나.** 모든 escalation이 **위로만** 간다. 하위 층의 결측을 상위 층이 추정으로 메우지 않는다 — L3가 비었을 때 L2의 `mintedAt`으로 대체하는 것이 가장 흔한 유혹이고, 그것이 정확히 CFI 132.07이 금지한 것이다. + +### 10.4 Liability 분배 — 틀린 취득일로 조기 매도가 일어난 경우 + +TA가 `acceptedAt`을 실제보다 이르게 기록했고, 그 결과 기간 미달 물량이 Rule 144 경로로 나갔다고 하자. 결과는 §1.4의 사슬을 그대로 탄다 — safe harbor 부적용 → underwriter 잔류 가능 → §4(a)(1) 상실 → §5 위반 → **§12(a)(1) 매수인의 명시적 소권**. + +| 행위자 | 지위 | 방어 논거 | 강도 | +| --- | --- | --- | --- | +| **매도인** | §12(a)(1) 피고 | ✕ 거의 없음 — (d)는 객관 요건이고 신뢰 안전항이 없다 | 높음 | +| **TA (Securitize)** | 기록 작성자 | 계약상 책임 · 등록 TA로서의 의무 | 중간 | +| **Decipher (DEX)** | 인프라 제공자 | 판정 로직의 정확성 + 대사 통제의 존재 | 중간 | +| **매수인** | §12(a)(1) 원고 | "consideration paid ... with interest"의 반환 청구 | ⭐ 조문상 명시 | + +**⭐ A-13과의 대비를 다시.** A-13의 위조 KYC 사고에서는 Rule 2a51-1(h)가 "reasonable belief"를 성문 방어로 제공하므로, 발급자·DEX가 합리적으로 신뢰했다면 방어선이 선다. C-01에는 그 조문이 없다. 그래서 방어는 조문이 아니라 **절차의 존재**로 구성된다 — ① 판정 로직이 조문·CFI를 그대로 옮겼음(§3·§5), ② 정책 선택과 그 방향을 기록했음(§6.3), ③ `acceptedAt` vs `mintedAt` 대사 통제를 운영했음(§10.2·§11.4), ④ 미결을 등록하고 자문에 회부했음(§12). 이 넷이 "reasonable inquiry"에 상응하는 사실관계를 만든다. **다만 그것이 법적으로 충분한 방어인지는 확인되지 않았으며**(non-delegable reasonable inquiry 법리와 충돌 가능), 이는 OD-C01-4로 등록한다. + +## §11. (δ) Frontend·Off-chain Operator Layer — 4-Layer로는 안 끝난다 + +### 11.1 이 층이 필요한 이유 + +C-01의 온체인 코드는 짧다. 게이트 일곱 개와 비교식 하나가 전부다. 그런데 그 코드가 작동하려면 **코드 밖에서 벌어져야 하는 일**이 훨씬 많다 — 승낙·완납 시각의 수집, UTC 정규화, 배당 mint 시 `lineageRef` 배선, Manifest 지위 선언과 갱신, 어음 계약서 검토, 대사, 그리고 "어제는 팔 수 있었는데 오늘은 안 된다"를 설명하는 일까지. 이 층이 비면 코드가 옳아도 부품이 죽는다(§4.3). + +### 11.2 거버넌스 상수 변경 규율 + +C-01에는 코드 배포 없이 동작을 바꾸는 상수가 셋 있다. 각각 **법적 독법 또는 정책 선택**을 담고 있으므로 변경 절차를 고정한다. + +| 상수 | 기본값 | 바꾸면 | 변경 요건 | +| --- | --- | --- | --- | +| `SEC4A7_TACKING_ENABLED` | `true` | §4(a)(7) lot의 clockStart가 승계 → 재기산 (최대 1년 차이) | 외부 자문 의견서 + OD-C01-2 해소 | +| `LOT_SELECTION_DEFAULT` | `FIFO` | 매도 시 선택되는 lot이 바뀜 | 내부 결정 + 사용자 고지 | +| `MONTH_END_CONVENTION` | `NEXT_MONTH_FIRST` | 월말 취득분의 개방일이 하루 앞당겨짐 | ⚠ 외부 자문 (과소 차단 방향) + OD-C01-5 | + +**규율.** ① 변경은 **소급하지 않는다** — 이미 내려진 판정을 되돌리지 않고, 변경 시점 이후의 판정에만 적용한다. ② 변경 사실과 근거를 Compliance Log에 상수 스냅샷으로 남겨, 과거 판정을 그 시점의 상수로 재현할 수 있게 한다. ③ `MONTH_END_CONVENTION`을 절사 방향으로 바꾸는 것은 **과소 차단 방향**이므로 자문 없이 변경 금지. + +### 11.3 Frontend — 매도 전 사전 조회 + +C-01의 FAIL 대부분이 시간으로 자동 해소되므로(§6.1), 프론트엔드는 **거래를 시도하기 전에** 답을 줄 수 있어야 한다. 매도 시도 → 실패 → 이유 확인의 순서는 사용자 경험만 나쁜 게 아니라, 실패한 거래 시도가 로그에 쌓여 감사 노이즈가 된다. + + 보유 물량 화면 (매도 버튼 누르기 전) + lot#1 1,000 units ● 매도 가능 + lot#2 12 units ● 매도 가능 (배당 · 원본 lot#1의 기산일 승계) + lot#3 500 units ○ 2026-11-15부터 가능 (잔여 120일) + lot#4 200 units △ 확인 중 (통상 1영업일) + + ※ 표시 규율 + · ○ 에만 날짜를 붙인다 (HP_PERIOD_NOT_ELAPSED 전용) + · shell 봉쇄는 자산 단위 배너로 처리하고 lot 단위 날짜를 붙이지 않는다 + · 승계 lot은 "왜 이미 가능한지"를 한 줄로 설명한다 (배당분이 즉시 가능한 것은 + 직관에 반하므로, 설명이 없으면 오류로 신고된다) + +### 11.4 대시보드·대사 — L3 공백의 보상 통제 + +| 지표 | 무엇을 잡나 | 임계 | +| --- | --- | --- | +| `acceptedAt` vs `mintedAt` 간격 분포 | TA 기록의 이상치 → attestation 신뢰도 | 통상 범위 이탈 시 알림 | +| `lineageRef` 미기록 배당 lot 수 | mint 경로 bypass (OD-C01-3) | **0이어야 함** — 1건이라도 즉시 | +| `HP_LINEAGE_BROKEN` 발생률 | CR-3 배선 결함 | 상승 추세 시 조사 | +| `HP_PAYMENT_INCOMPLETE` 체류 시간 | TA 기록 지연 (OD-C01-4 SLA) | SLA 초과 시 에스컬레이션 | +| `reportingStatus` 변경 이벤트 | 배선 전환 필요 (§9.4 경우 3) | 발생 시 전 REVIEW 재평가 | +| `shellStatus` 변경 이벤트 | ⚠ R2 중단 검토 | 발생 시 즉시 | +| `required` 캐시 사용 흔적 | CFI 132.14 위반 (T10) | **0이어야 함** | + +### 11.5 Manual Review 처리 — 4종 + +REVIEW 4종은 성질이 다르므로 처리 경로도 다르다. + +| 코드 | 누가 | 무엇을 판단 | 산출 | +| --- | --- | --- | --- | +| `HP_NOTE_TERMS_UNVERIFIED` | **법무** | (d)(2) 3요건 — 계약서 해석 · 담보 평가 | 3요건 attestation 또는 완제 확인 | +| `HP_LINEAGE_BROKEN` | Operator + TA | 취득 이력 재구성 | `lineageRef` 보정 등록 | +| `HP_SHELL_STATUS_UNKNOWN` | **법무** | (i)(1) 사실판단 + 법적 평가 | Manifest 선언 + 근거문서 | +| `HP_REPORTING_STATUS_UNKNOWN` | Operator | "낼 의무가 있는가"(CFI 132.09) | Manifest 선언 + `obligationBasis` | + +**규율.** ① REVIEW의 결론은 **판정 결과가 아니라 입력 보정**이다 — 사람이 "PASS로 하자"고 정하는 게 아니라, 빠진 사실을 채워 넣으면 기계가 다시 판정한다. 이 분리가 유지되어야 §10.4의 방어 논거가 성립한다. ② 법무 판단이 필요한 둘(어음·shell)은 Operator가 대신 결정할 수 없다. + +### 11.6 사고 대응 런북 (요지) + +1. **`shellStatus` 뒤집힘** → R2 신규 매도 즉시 중단 → 기 체결분 범위 산정 → 자문 회부 → C-00 대체 경로 평가. +2. **`acceptedAt` 오기록 발견** → 해당 lot 동결 → 같은 attestation 배치 전량 재검증 → 그 기산으로 이미 체결된 거래 식별 → §12(a)(1) 노출 산정 → 자문 회부. +3. **배당 mint의 `lineageRef` 누락 대량 발생** → 배당 배치 중단 → 소급 보정 등록 → 그 사이 REVIEW 처리된 건 재판정. +4. **`reportingStatus` 전환** → §9.4 경우 3 절차 → 배선 재평가 → E-05 활성 구간 산정 → 전 REVIEW 재평가. + +## §12. Open Issues — 미해결 쟁점 등록부 + +| # | 질문(무엇을 결정해야 하나) | 왜 필요한가 | Priority | 해소 경로 | +| --- | --- | --- | --- | --- | +| **OD-C01-1** | **BUIDL-like 국채 MMF 토큰이 Rule 144(i)(1)(i)의 shell에 해당하는가.** 자산이 현금·단기국채·RP로 구성되어 (B)(*2*) "Assets consisting solely of cash and cash equivalents"에 문언상 근접한다. 방어선은 (A) "no or nominal operations" 미해당(펀드는 운용·평가·환매·분배를 실제 수행)이나, 이는 해석이며 staff가 이 구조를 직접 판단한 공개 자료를 확인하지 못했다 | ⚠ **해당하면 비보고 발행자는 (i)(2)를 물리적으로 충족할 수 없어 Rule 144 재판매가 영구 봉쇄된다**(§3.14). R2 Recipe 전체의 존폐 | **P0** | 외부 자문 의견서 → `shellStatus` 선언의 법적 근거 확보 · 필요 시 SEC 해석 조회. C-00의 경로 선택(Q-B1)과 병행 검토 | +| **OD-C01-2** | **§4(a)(7) 취득분의 clockStart는 승계인가 재기산인가.** 문언 대조는 승계를 지지하나(§3.15), (e)(1)(C)의 "deemed to be restricted securities"를 새 제한의 개시로 읽는 반대 독법이 성립 가능. CFI §132는 2011년이 최신이라 2015년 신설 조문을 다루지 않는다 | 두 독법의 차이가 **최대 1년의 매도 가능 시점 차이**. Q-B1(§4(a)(7)을 주 전매 경로로 여는가)이 긍정되면 즉시 대량 발생 | **P0** 즉시 | 외부 자문 → `SEC4A7_TACKING_ENABLED` 확정. C-00 OD-C00-1과 동시 해소 | +| **OD-C01-3** | **ERC-3643 `mint`·`forcedTransfer`의 compliance bypass 처리.** 배당 mint가 `mint` 경로를 타므로 `lineageRef` 기록이 배선되지 않으면 배당 lot이 영구 REVIEW가 된다. `forcedTransfer`·`recovery`로 이전된 lot의 승계 규칙도 미정의 | 배당이 상시 발생하므로 **누락 시 R2가 사실상 마비**(T5·T7) | **P0** 즉시 | CR-3 공동 설계 + **L4 테스트 벡터로 확인**. B-02(토큰 표준)·B-03과 조율 | +| **OD-C01-4** | **TA attestation 신뢰의 법적 지위.** Rule 144(d)에는 reasonable belief 안전항이 **없다**(§10.2). 조문상 신뢰는 (g)(4) 브로커의 reasonable inquiry 축에만 존재하며, 그 조회 항목 첫째가 보유기간이다(Note (ii)(a)). DEX에 브로커가 없을 때 이 의무의 귀속이 미정 | 위조·오기록 시 방어 논거의 유무를 가른다(§10.4). 프로젝트 차원의 BD/ATS 지위·TA attestation reliance와 같은 축 | **P0** 즉시 | 외부 자문 (non-delegable reasonable inquiry 법리 포함) + TA 계약상 SLA·책임 조항 | +| **OD-C01-5** | **월말 경계 처리 관행.** 8/31 + 6개월 = 존재하지 않는 날짜. 익월 1일(이월) vs 말일 절사. 조문·CFI 모두 침묵 | 절사는 하루 일찍 열려 **과소 차단** 방향. 현재 보수적으로 이월을 택했으나 근거는 정책일 뿐(§5.4·§6.3) | P1 높음 | 외부 자문 확인. 확인 전까지 `MONTH_END_CONVENTION` 변경 금지 | +| **OD-C01-6** | **tolling 부활 감시.** 33-8869은 "We will revisit the issue if we observe abuse relating to the hedging activities"라고 명시했다(§3.16). 부활 시 C-01에 hedging 관찰 축이 신설된다 | 현재는 tolling 로직 **부재가 준수**이나, 규칙 개정 시 정반대가 된다 | P2 중간 | 정기 모니터링 (sec.gov 규칙제정 동향) | +| **OD-C01-7** | **CR-3 lot 스키마 확정.** §3.19의 필드 집합·`lineageRef` 원본 직결 규약·`acceptedAt`/`mintedAt` 분리 보관·분할 시 승계 처리 | C-01·C-08·E-06이 같은 원장을 읽으므로 **공동 설계 지점**. 미확정이 Phase 2 blocking(§8.3) | P1 높음 | Decipher 내부 설계 + TA 인터페이스 협의 | +| **OD-C01-8** | **AMM 풀의 제한 lot 배제 집행.** 풀 commingling이 lot 계보를 파괴해 clockStart 확정이 불가능해진다(§5.4). C-01은 이유만 제공하고 집행은 B-04 소관 | 집행이 없으면 C-01이 영구 REVIEW를 내는 물량이 생긴다 | P2 중간 | B-04와 배선 확정 (제한 lot → P2P·RFQ 한정) | + +**참고.** OD-C01-1이 해소되지 않으면 다른 일곱이 전부 해결돼도 **R2 자체가 성립하지 않는다.** C-01의 코드가 완벽해도 (i)(1)이 경로를 봉쇄하면 그 코드는 실행될 일이 없기 때문이다. 그래서 이 항목이 단독 P0이며, C-00의 Q-B1(§4(a)(7)을 주 전매 경로로 여는가)과 **묶어서** 자문에 회부해야 한다 — 둘 다 부정되면 R2에 남는 경로는 Rule 144A와 Reg S 904뿐이다. + +## §13. 파일명 규칙 (Naming Convention) + +Decipher Element / Recipe 산출물 명명 규칙: + +- **Element:** X-XX_부품이름.md (예: C-01_holding-period.md) +- **Recipe:** R-XX_Recipe이름.md (예: R2_resale-144.md) + +Element 부품 ID 체계(앞글자 = 카테고리): + +| 앞글자 | 카테고리 | +| --- | --- | +| A | 신원·자격 (매수인 측) | +| B | 자산·기술 메타 | +| C | 거래 경로·시점 ← 본 부품(C-01)이 여기 | +| D | 집계·누적 | +| E | 발행자 측 | +| F | 기타 | + +본 부품: **C-01 = "거래 경로·시점 카테고리의 1번째 부품"** + +물리적 위치: 산출물/elements/ (모든 Element walkthrough) + +## §14. 변경 로그 + +| 버전 | 일자 | 변경 | 근거 | +| --- | --- | --- | --- | +| 0.1 | 2026-07-17 | 초고 — §1~§3.10 · fig30 · fig50 작성. 1차 출처 검증(Rule 144 전문 · CFI §128~§137 · §77d) | — | +| 0.2 | 2026-07-17 | 용어 통일 — `effectiveStart` → **`clockStart`** · `fullPaymentAt` → **`paymentCompleteAt`** · 실패 코드 접두 `HOLDING_` → **`HP_`**. 도면·본문 불일치 해소 | 내부 일관성 | +| **1.0** | **2026-07-18** | **§3.11~§3.19 · §4~§14 · 부록 A~D 완성.** 1차 출처 전량 재대조 후 확정 | — | +| 1.0 | 2026-07-18 | **정정 ①** — Release 33-8869 시작면 **71545 → 71546**. 본문·§3.0.2 표 1·fig30 전부 반영 | federalregister.gov Document Citation "72 FR 71546" · Pages 71546-71573 (28 pages) | +| 1.0 | 2026-07-18 | **정정 ②** — §77d prelim 현행성 표기 **"June 13, 2026" → "June 5, 2026"** | uscode.house.gov 2026-07-18 조회 표기 "Text contains those laws in effect on June 5, 2026" | +| 1.0 | 2026-07-18 | §3.0.2 표 2의 §3.13을 N/A에서 **안 함 — 현 자산군 해당 없음**으로 유지하되, 본문에 예약 상수 5종(`SRC_RULE145`·`SRC_HOLDCO`·`SRC_CASHLESS`·`SRC_INKIND`·`SRC_ANTIDILUTION`) 명시 | 자산군 확장 대비 | +| 1.0 | 2026-07-18 | `restricted`와 `holdingPeriodRequired` **필드 분리** 도입 | CFI 129.03 — 제한증권이나 보유기간 없는 사례 | +| 1.0 | 2026-07-18 | `lineageRef`를 **원본 직결**로 확정(직전 부모 아님) | Rule 144(d)(3)(i) "if more than one, the **initial** dividend was paid" | +| 1.0 | 2026-07-18 | 미결 8종(OD-C01-1~8) 등록. **OD-C01-1을 단독 P0으로 승격** | Rule 144(i)(1)(i)(B)(*2*) 문언 근접 · (i)(2)가 비보고 발행자에게 닫혀 있음 | + +**다음 개정 트리거.** ① OD-C01-1·2 자문 회신 → §3.14·§3.15·§12 개정 및 `SEC4A7_TACKING_ENABLED` 확정. ② 발행자의 Exchange Act 보고 지위 변경 → §3.7·§9.4 경우 3 활성화 및 E-05 배선 추가. ③ SEC의 tolling 재검토 착수(OD-C01-6) → §3.16 개정 및 hedging 관찰 축 신설. ④ CR-3 스키마 확정(OD-C01-7) → §3.19·§8.3 확정. ⑤ CFI §132에 §4(a)(7) 기산 항목 신설 → §3.15·§3.17 개정. + + +## 부록 A — 관련 조문·URL 빠른참조 + +| 조문 | 인용 | 1차 출처 | C-01 게이트 | +| --- | --- | --- | --- | +| Securities Act §5 | 15 U.S.C. §77e | uscode.house.gov | — (전제) | +| Securities Act §4(a)(1) | 15 U.S.C. §77d(a)(1) | uscode.house.gov | — (목적지) | +| Securities Act §2(a)(11) | 15 U.S.C. §77b(a)(11) | uscode.house.gov | — (존재 이유) | +| Securities Act §12(a)(1) | 15 U.S.C. §77l(a)(1) | uscode.house.gov | — (과소 차단의 결과) | +| Securities Act §4(a)(7)·§4(d)·§4(e) | 15 U.S.C. §77d(a)(7)·(d)·(e) | uscode.house.gov | G3 (`SRC_SEC4A7`) | +| Rule 144 Preliminary Note | 17 C.F.R. §230.144 | ecfr.gov | — (PASS 범위 한정) | +| Rule 144(a)(1)·(a)(2) | 17 C.F.R. §230.144(a) | ecfr.gov | — (A-06·A-04 소관) | +| **Rule 144(a)(3)(i)~(viii)** | 17 C.F.R. §230.144(a)(3) | ecfr.gov | **G1** | +| Rule 144(b)(1)(i)·(ii) | 17 C.F.R. §230.144(b)(1) | ecfr.gov | — (배선 근거) | +| Rule 144(b)(2) | 17 C.F.R. §230.144(b)(2) | ecfr.gov | — (병행 조건) | +| **Rule 144(d)(1)(i)** | 17 C.F.R. §230.144(d)(1)(i) | ecfr.gov | **G5** (P6M) | +| **Rule 144(d)(1)(ii)** ⭐ | 17 C.F.R. §230.144(d)(1)(ii) | ecfr.gov | **G5** (P1Y — 기본값) | +| **Rule 144(d)(1)(iii)** | 17 C.F.R. §230.144(d)(1)(iii) | ecfr.gov | **G4** | +| **Rule 144(d)(2)(i)~(iii)** | 17 C.F.R. §230.144(d)(2) | ecfr.gov | **G4** (REVIEW) | +| **Rule 144(d)(3)(i)~(x) + Notes** | 17 C.F.R. §230.144(d)(3) | ecfr.gov | **G3** (tacking 10종) | +| **Rule 144(i)(1)~(3)** | 17 C.F.R. §230.144(i) | ecfr.gov | **G2** (경로 봉쇄) | +| Rule 144(c)·(e)·(f)·(g)·(h) | 17 C.F.R. §230.144 | ecfr.gov | — (E-05·C-08·C-09·E-06) | +| Rule 502(d) | 17 C.F.R. §230.502(d) | ecfr.gov | — ((a)(3)(ii) 경유) | +| **Release No. 33-8869** | **72 FR 71546** (71546–71573) · 2007-12-17 · 시행 2008-02-15 | federalregister.gov · govinfo.gov (FR-2007-12-17/07-6013) | — (논거 · **tolling 미채택**) | +| **CFI Securities Act Rules §132** | Q132.01~132.18 | sec.gov | **G3·G4·G5·G6** | +| CFI §128~§131 · §133~§137 | — | sec.gov | 경계·병행 | + +**핵심 4개만 고른다면:** Rule 144(d)(1)(ii)(1년) · Rule 144(d)(3)(i)(배당 승계) · CFI 132.07(승낙 기산) · CFI 132.10(해당일·`≥`). 이 넷이 C-01 판정의 90%를 결정한다. + +## 부록 B — BUIDL-like 적용 노트 + +BUIDL-like 자산은 Rule 506(c) + ICA §3(c)(7) 구조의 국채 MMF형 토큰으로 모델링한다. C-01 관점의 요지 여덟. + +1. **기본값은 1년이다.** 발행자가 Exchange Act 비보고이므로 (d)(1)(ii)가 적용된다. 6개월은 발동하지 않는다 — 발행자 지위가 바뀌기 전까지는(§9.4 경우 3). + +2. **⭐ C-01이 유일한 관문이다.** 비보고 + 비계열 조합에서 (b)(1)(ii)는 "**the condition** of paragraph (d)"(단수)만 요구한다. 공시도 물량도 방식도 신고도 없다. 즉 대다수 재판매에서 **Rule 144 준수 = C-01 통과**이며, 잘못을 잡아 줄 다른 부품이 없는 단일 실패점이다(§9.3). + +3. **⭐ 배당 tacking이 상시 작동한다.** 수익 분배가 토큰 추가 발행으로 이뤄지므로 매 배당마다 `SRC_DIVIDEND` lot이 생긴다. (d)(3)(i)의 승계가 없으면 보유자는 **영원히 전량 매도를 못 한다**(§3.11·T5). 이것이 C-01에서 가장 자주 실행되는 경로다. + +4. **⚠ shell 근접이 최대 위험이다.** 자산이 현금·단기국채·RP로 구성되어 (i)(1)(i)(B)(*2*) "solely of cash and cash equivalents"에 문언상 가깝다. 방어선은 (A) "no or nominal operations" 미해당뿐이며, 이는 해석이다. **해당하면 비보고 발행자는 (i)(2)를 충족할 수 없어 경로가 영구 봉쇄된다**(OD-C01-1, P0). + +5. **mint 시각은 기산점이 아니다.** CFI 132.07이 "the date the shares are issued"를 명시적으로 배제했다. ERC-3643이 자연히 갖는 유일한 시각이 배제된 그 시각이므로, **Acquisition Registry(CR-3)가 없으면 C-01은 구현 불가능**하다(§8.3). + +6. **계열이면 다섯 부품이 동시에 붙지만 기간은 그대로다.** 운용사 계열·임원 등이 팔면 (b)(2)의 "all of the conditions"로 E-05·C-08·C-09·E-06이 병행한다. 그러나 (d)의 1년은 **비계열과 동일**하다(§3.6). + +7. **AMM 풀은 쓸 수 없다.** 풀 commingling이 lot 계보를 파괴해 clockStart 확정이 불가능해진다. 제한 lot의 유통은 P2P·RFQ로 한정되어야 하며, 집행은 B-04 소관이다(§5.4·OD-C01-8). + +8. **R3와 병렬로 작동한다.** 같은 재판매에 A-13의 QP 게이트가 동시에 켜지고 결합은 AND다. 1년을 채워도 매수인이 QP가 아니면 막히고, QP여도 1년 미달이면 막힌다. 두 축은 근거 법률이 달라 서로를 대체하지 못한다. + +## 부록 C — 용어·부등호 정정 노트 (구현자 대상 오해 교정) + +- **C-01(보유기간) ≠ A-11(증명 유효기간).** 둘 다 시간을 재지만 대상도 기산점도 다르다. C-01은 *증권*을 재고 시계는 *취득*부터, A-11은 *증명서*를 재고 시계는 *검증 시점*부터. C-01은 매도인을, A-11은 (통상) 매수인을 본다. **A-11은 "증명서가 상했나", C-01은 "증권을 묵혔나".** + +- **계열이라고 기간이 늘지 않는다.** (d)의 6개월·1년은 (b)(1)과 (b)(2)가 **동일**하다. 계열에게 더해지는 것은 *조건의 개수*이지 *시간*이 아니다. "계열이면 2년"은 근거 없는 오해다. + +- **기본값은 6개월이 아니라 1년이다.** 6개월은 Exchange Act 보고회사 전용이다((d)(1)(i)). BUIDL-like 발행자는 비보고이므로 1년이 기본이다((d)(1)(ii)). + +- **⚠ "subject to"는 "내는가"가 아니라 "낼 의무가 있는가"다.** 자발적 제출자는 "subject to"가 아니므로 **1년**을 진다(CFI 132.09). 발행자가 EDGAR에 자료를 올린다는 사실은 `REPORTING`으로 승격시키지 못한다. + +- **⚠ mint 시각을 clockStart로 쓰면 틀린다.** 기산점은 **발행자의 청약 승낙 시점**이며, CFI 132.07이 "the date the shares are issued"를 명시적으로 배제한다. `block.timestamp`는 대사용으로만 보관한다. + +- **⚠ "the later of"는 취득일과 완납일 중 나중이 아니다.** 문언은 "the later of the date of the acquisition ... **from the issuer, or from an affiliate of the issuer**" — 즉 *발행자로부터의 취득일*과 *계열로부터의 취득일* 중 나중이다. 완납은 (d)(1)(iii)이 **별도로** 얹는 하한이다. 두 규칙이 합쳐져 `clockStart = max(취득·승낙, paymentCompleteAt)`이 된다. + +- **⚠ 해당일 방식이지 일수 가산이 아니다.** 5/15 취득 → **11/15** 매도 가능(CFI 132.10). `+180일`은 11/11이 되어 **나흘 일찍 열린다 — 과소 차단**. 1년 갈래는 윤년에서 어긋난다(T3). + +- **도달이 곧 충족 — `≥`다.** "must elapse"는 경과를 요구할 뿐 초과를 요구하지 않는다. 해당일 **당일 통과**. C-01에는 `>` 게이트가 **하나도 없다**. + +- **⚠ C-08과 부등호 방향이 반대다.** C-08의 (e)는 "shall not exceed"라 **상한 미달**을 요구하고(초과만 위반), C-01의 (d)는 "must elapse"라 **하한 도달**을 요구한다. 같은 비교 헬퍼를 공유하면 한쪽이 반드시 어긋난다. + +- **⚠ tolling은 존재하지 않는다.** SEC는 2007년에 헤지 tolling을 제안했다가 **채택하지 않았다**(33-8869 II.B.3, 71552면). 코드에 헤지 기반 시계 정지를 넣으면 법이 요구하지 않는 제약을 얹는 것이다. 온체인이라 관찰 가능하다는 사실은 근거가 되지 않는다. + +- **⚠ `required`를 lot에 저장하면 틀린다.** 기간 길이는 **매도 시점**의 발행자 지위로 정해진다(CFI 132.14). 캐시하면 지위 전환 시 과잉 차단(1년 잔존) 또는 **과소 차단**(6개월 잔존)이 된다. 매 판정마다 재조회하는 파생값이다. + +- **⚠ 승계는 직전 부모가 아니라 원본을 가리킨다.** (d)(3)(i)이 "if more than one, the **initial** dividend was paid"라고 쓴다. 12번 배당해도 승계 기준은 최초 배당의 대상 증권 — 즉 원본 lot 하나다. 사슬 순회가 아니라 1단계 참조다. + +- **⚠ de minimis 허용오차를 두면 안 된다.** "even a de minimis amount of cash upon a warrant exercise would preclude ... tacking"(CFI 132.13). "solely"는 순수 배타이며 임계값이 없다. + +- **restricted ≠ 보유기간 있음.** 계열이 공개시장에서 산 주식을 증여하면, 수증자 손에서 **restricted이면서 보유기간은 없다**(CFI 129.03). 두 개념을 한 필드로 합치면 이 사례를 표현할 수 없다. + +- **⚠ 유산 카브아웃은 기간 단축이 아니라 요건 소멸이다.** "no holding period is required"((d)(3)(vii)). 1년 → 6개월이 아니라 **없다**. 단 사망자 소유분에 한하고(CFI 132.04), (c)·(h)는 그대로 살아 있다(Note). + +- **⚠ shell은 기간이 아니라 경로를 없앤다.** "This section is not available."((i)(1)) 6년이 지나도 안 열린다. 그래서 G2가 G6보다 **앞**에 있어야 한다 — 순서를 바꾸면 봉쇄가 뚫린다(T11). + +- **C-01 PASS ≠ safe harbor 확정.** Preliminary Note가 두 겹으로 한정한다 — 비배타성(FAIL이 매도 불가가 아님)과 회피금지("plan or scheme to evade"이면 기술적 준수에도 안전항 없음). Compliance Log에 `safeHarborScope = "144(d) only"`를 남긴다. + +- **C-01 FAIL ≠ 매도 불가.** Rule 144는 배타적 안전항이 아니다. §4(a)(7)·144A·Reg S 904가 열려 있을 수 있고, 그 판단은 **C-00** 소관이다. C-01은 자기 경로 하나만 닫는다. + +## 부록 D — 결론 + +C-01은 시간 하나만 재는 부품이다. 자격도 신원도 물량도 보지 않는다. 그런데 조문 대조를 마치고 나면, 이 부품의 난이도가 부등호에 있지 않다는 것이 분명해진다 — **난이도는 전부 기산점에 있다.** + +법적 뼈대는 한 줄로 접힌다. §2(a)(11)이 underwriter를 "with a view to distribution"이라는 **내심**으로 정의해 버렸고, 내심은 거래 시점에 확인할 수 없으며, 그래서 Rule 144가 내심을 대신할 객관 기준을 세웠고, 그 첫째가 시간이다. SEC가 2007년에 밝힌 대로 보유기간은 날짜 세기가 아니라 **경제적 위험의 인수**를 시간으로 근사한 것이고, 이 원리 하나가 (d)의 규칙 전부를 설명한다 — 위험이 이어지면 시계도 이어지고(tacking 10종), 새 판단·새 대가·새 위험이 개입하면 시계가 새로 선다(de minimis 현금·무소구 질권·투자자 선택 교환). 구현자가 조문에도 CFI에도 없는 사실관계를 만났을 때 방향을 주는 것이 이 문장이며, 다만 원리는 방향을 줄 뿐 권한을 주지 않으므로 결론은 REVIEW다. + +구현의 본질은 계산이 아니라 **입력 파이프라인**이다. 판정식은 `now ≥ addPeriod(clockStart, required)` 한 줄인데, 그 한 줄의 세 인자 중 온체인에서 나오는 것은 `now` 하나뿐이다. `required`는 매도 시점에 다시 읽어야 하는 발행자 지위의 함수이고(CFI 132.14), `clockStart`는 — 여기가 급소다 — **발행자의 청약 승낙 시각**이며 CFI 132.07이 "the date the shares are issued"를 명시적으로 배제했다. ERC-3643/T-REX가 자연히 포착하는 유일한 시각이 바로 그 배제된 시각이다. **법이 요구하는 값이 체인에 없다.** Acquisition Registry가 설계 취향이 아니라 조문 대조의 강제 귀결인 이유가 이것이고, C-01이 STATELESS이면서도 정확성 전부를 남의 원장에 거는 이유도 이것이다. + +그리고 이 부품에는 A-13에 없는 두 개의 그늘이 있다. 첫째, **신뢰를 보호하는 조문이 없다** — Rule 144(d)에는 Rule 2a51-1(h) 같은 reasonable belief 안전항이 존재하지 않으며, 조문상 신뢰는 (g)(4) 브로커의 reasonable inquiry 축에만 있고 그 조회 항목 첫째가 하필 보유기간이다. 브로커 없는 DEX에서 그 의무가 누구에게 가는지는 아직 답이 없다. 둘째, **틀렸을 때의 상대방이 조문에 이미 정해져 있다** — ICA 축은 FS Credit 이후 사적 소권이 부정되었지만, 증권법 축의 §12(a)(1)은 의회가 문언으로 새긴 명시적 소권이다. 시간축을 틀리면 그 손해를 청구할 사람이 익명의 매수인 다수로 존재한다. C-01의 모든 기본값이 보수적인 쪽 — 결측은 통과가 아니고, 월말은 이월이며, 어음은 자동 PASS를 주지 않고, 판정 불가는 언제나 더 긴 쪽 — 으로 정렬된 이유가 이 비대칭이다. + +남은 것은 코드가 아니라 법이 열어야 할 문 하나다. BUIDL-like 자산이 Rule 144(i)의 shell에 해당하는가. 자산이 현금·단기국채·RP라는 사실이 "assets consisting solely of cash and cash equivalents"에 문언상 닿아 있고, 방어선은 펀드가 실제 운용·평가·환매·분배를 수행하므로 "no or nominal operations"가 아니라는 해석 하나뿐이다. 그 해석이 무너지면 — 비보고 발행자는 (i)(2)의 탈출구를 물리적으로 충족할 수 없으므로 — **Rule 144 재판매는 영구히 봉쇄되고, C-01의 코드는 아무리 정확해도 실행될 일이 없다.** 이 부품이 자기 미결 등록부의 1번을 단독 P0으로 올린 이유이며, C-00의 Q-B1과 묶어 회부해야 하는 이유다. 판정은 기계에, 판단은 기록된 절차에, 미결은 등록부에 — 그 분리가 유지되는 한 C-01은 감독 검사 앞에서 "이 물량이 왜 오늘 열렸고 어제는 닫혔는가"를 하루 단위로 답할 수 있는 부품으로 남는다. + +*본 문서는 Decipher RWA DEX 컴플라이언스 매트릭스의 C-01 요소 사양서다. 법률 자문이 아니며, §12의 미해결 쟁점은 자격 있는 미국 증권법 변호사의 확인 대상이다. 모든 조문 인용은 2026-07-18 기준 1차 출처 대조본이다.* + diff --git a/docs/compliance/elements/D-01.md b/docs/compliance/elements/D-01.md new file mode 100644 index 0000000..517be5b --- /dev/null +++ b/docs/compliance/elements/D-01.md @@ -0,0 +1,574 @@ +--- +title: "D-01 보유자 수 카운터 (Holder Count) — 부품 심층 인수인계 문서 (Walkthrough)" +type: element +id: D-01 +name: 보유자 수 카운터 (Holder Count) +domain: D — 집계·누적 +maturity: 정밀화 필요 → 본 문서로 확정 +verification-pattern: 상태추적형 (State-Tracking) +timing: pre-trade gate + post-trade commit +stateful: STATEFUL +research-source: R-5 (record holder 산정) + R-1 인접 (§3(c)(7)) +related-recipes: [R3 ICA §3(c)(7) Fund, R1 Reg D 506(b) 분기, §3(c)(1) 펀드 분기] +related-elements: [A-13 QP, A-04 신원중복, A-09 look-through, B-01 manifest 정합, A-03 AI] +--- + +# D-01 보유자 수 카운터 (Holder Count) — 부품 심층 인수인계 문서 (Walkthrough) + +**이 문서는 무엇인가.** Decipher RWA DEX의 컴플라이언스 부품 중 하나인 보유자 수 카운터 부품(내부 식별자 D-01)을, 미국 증권법을 처음 보는 사람도 이해할 수 있도록 풀어 쓴 인수인계 문서다. 개발자·법무팀·외부 자문 변호사·학회원이 각자 작업의 base로 그대로 쓸 수 있도록 — (1) 이 규제가 어디서 왔고 왜 존재하는지, (2) 어떤 사실을 입력받아 (3) 어떤 로직으로 판정하고 (4) 실패하면 어떻게 처리하며 (5) 어떤 테스트로 검증하는지를, 기술 요소마다 풀이를 함께 붙여 설명한다. + +**자체완결 원칙.** 이 문서는 다른 내부 문서를 열지 않아도 단독으로 이해되도록 작성했다. 인용은 미국 연방법·연방규칙·SEC 발행문서 등 외부 공식 자료만 사용한다. + +**⚠ 출처·정정 노트 (읽기 전 필독).** 본 부품의 인용은 다음 1차 출처를 기준으로 한다 — 15 U.S.C. §80a-3(c)(1)·(c)(7)(투자회사법 펀드 적용제외, uscode.house.gov), 15 U.S.C. §78*l*(g)(1934년 증권거래소법 §12(g) 등록의무, uscode.house.gov), 17 C.F.R. §240.12g-1(§12(g) 면제)·§240.12g5-1("held of record" 정의)(eCFR 현행본), 17 C.F.R. §230.506(b)·§230.506(c)·§230.501(e)(Regulation D, eCFR), 17 C.F.R. §240.12g3-2(a)(외국 사모발행자 §12(g) 면제)·§240.3b-4(c)(foreign private issuer 정의)(eCFR). 특히 헷갈리기 쉬운 정정 포인트는 다음과 같다(상세는 부록 C). + +- **"2,000명 상한"은 §3(c)(7)에 없다.** 투자회사법 §3(c)(7)에는 보유자 수의 숫자 상한이 아예 없다 — "전원이 qualified purchaser면 된다"가 전부다. 2,000이라는 숫자는 다른 법률인 증권거래소법 §12(g)(공개회사 등록의무의 발동 문턱)에서 온다. D-01이 실제로 지키는 것은 "§3(c)(7) 인원 상한"이 아니라 "§12(g) 공개회사 등록 트리거를 넘지 않기"다. +- **부등호.** §12(g)·Rule 12g-1의 등록 트리거는 "held of record by 2,000 persons"이며, 면제는 "fewer than 2,000 persons"(2,000명 미만, 즉 ≤ 1,999)다. 즉 안전구간은 < 2,000이고 정확히 2,000명이면 트리거된다. 반면 §3(c)(1)은 "not more than 100 persons"(100명 이하, ≤ 100 허용)다. §12(g)의 2,000은 미달로 유지(< 2,000)해야 하고, §3(c)(1)의 100은 도달해도 된다(≤ 100) — 두 상한의 부등호가 다르다. +- **카운팅과 자격판정은 다른 부품이다.** D-01은 "몇 명인가"만 센다. "이 사람이 QP인가"(§3(c)(7))는 A-13이, "AI인가"(506(c))는 A-03이, "같은 사람의 여러 지갑인가"는 A-04가 판정한다. D-01은 그 결과를 받아 머릿수만 집계한다. +- **카운팅은 look-through를 하지 않는다(자격판정과 반대).** §12(g)의 "held of record"는 법인 하나를 원칙적으로 1명으로 센다(Rule 12g5-1(a)(2)). 반면 자격판정(A-13/A-09)은 법인을 뚫고 구성원까지 본다. 머릿수 셀 때 법인 = 1, 자격 볼 때 법인 = 뚫어봄 — 목적이 달라 방향이 반대다. 예외는 회피목적 보유(Rule 12g5-1(b)(3))뿐이다. +- **BUIDL에서 켜지는 상한(조건부).** BUIDL-like 테스트 토큰이 **미국 issuer이거나 §12(g) 적용 대상 issuer라는 전제**에서는, D-01이 거는 상한은 §12(g)의 "held of record < 2,000"이다. §3(c)(1)의 100인 상한은 BUIDL이 §3(c)(1)이 아니라 §3(c)(7) 펀드이므로 dormant, 506(b)의 35인 상한은 BUIDL이 506(b)가 아니라 506(c)(매수인 수 무제한)이므로 dormant다. **다만 실제 BUIDL은 BVI 역외 펀드이므로 이 상한이 곧바로 적용된다고 단정하지 않는다** — 다음 FPI 항목이 선행 검토되어야 한다. +- **BVI 역외 펀드는 FPI 선행검토가 필요하다(중요).** 실제 BUIDL은 BVI 역외 펀드다. foreign private issuer(FPI, Rule 3b-4(c))라면 Rule 12g3-2(a)에 따라 그 class의 미국 거주 record holder가 300명 미만인 한 §12(g)에서 면제된다. 따라서 실제 BUIDL의 구속 상한은 "held of record < 2,000"이 아니라 "미국 거주 보유자 < 300"(12g3-2(a))일 수 있고, FPI 지위·미국 거주 보유자 산정이 선행 판단이다. D-01은 이 전제(§12(g) 적용 대상 issuer인지, FPI 면제가 없는지)를 Manifest로 받아 상한을 활성화한다(§3.11·부록 B·OD-D01-3). +- **§12(g) 트리거는 실시간이 아니라 회계연도 말 기준이다.** 법문상 §12(g) 등록의무는 "총자산 $10M 초과 + 해당 class 2,000명(또는 비-AI 500명) held of record인 **최초 회계연도 종료일**" 후 120일 내 발생하며, Rule 12g-1도 "most recent fiscal year의 마지막 날" 기준으로 자산·인원을 본다. D-01의 거래 직전 실시간 게이트(count 도달 시 차단)는 **우발적 초과·회계연도 말 등록위험을 막기 위한 보수적 운영 게이트**이지, "2,000번째 보유자 발생 즉시 등록의무 발생"을 뜻하지 않는다(§3.2·§5.1·§7). + +**양식 메모.** 이 문서는 A-13 v1 인수인계 양식의 번호·헤더·서술 관습을 따른다. 다만 A-13이 증명서 확인형(Pattern B) 부품인 데 반해 D-01은 상태추적형(State-Tracking) 부품이다 — off-chain 증명서를 확인하는 것이 아니라 on-chain 누적 상태(카운터)를 매 거래마다 갱신한다. 그래서 §8은 증명서 패턴이 아니라 상태추적 패턴을, ERC-3643 변환은 claim topic이 아니라 Compliance Module을 다룬다(claim.basis enum은 D-01에 해당 없음 — 상세 §8·§3.20). + +--- + +## §1. 규제 맥락 — 이 부품이 다루는 규제는 어디서 왔는가 (Context First) + +D-01은 한 줄로 말하면 다음 질문에 답하는 부품이다. + +> 이 거래를 체결하면, 이 증권의 보유자 수가 면제 구조를 깨뜨리는 임계값에 도달하는가? + +미국 증권법에서 "보유자 수"는 두 개의 서로 다른 면제 체계에서 각각 문턱으로 등장한다. 둘을 섞으면 안 된다. + +**(1) 투자회사법(ICA) 쪽 — 펀드가 "투자회사 등록"을 피하는 문턱.** 증권에 투자하는 것을 업으로 하는 issuer(펀드)는 원칙적으로 투자회사법상 등록 투자회사가 되어야 한다(§80a-3(a)). 등록을 피하려면 적용제외(exception)가 필요하다. 대표적 두 경로가 §3(c)(1)(수익적 소유자 100명 이하)과 §3(c)(7)(전원이 qualified purchaser)이다. BUIDL은 §3(c)(7)을 쓴다. 그런데 §3(c)(7)에는 인원 상한이 없다 — 전원 QP이기만 하면 인원은 무제한이다. 인원을 세는 것(§3(c)(1)의 100)은 §3(c)(1) 경로에서만 등장한다. + +**(2) 증권거래소법 쪽 — issuer가 "공개회사 보고의무"를 피하는 문턱.** 이것이 BUIDL에서 실제로 구속력을 갖는 문턱이다. 증권거래소법 §12(g)는 issuer의 자산이 $10,000,000을 초과(exceeding)하고 어느 지분증권 class가 held of record로 (i) 2,000명 또는 (ii) 비적격투자자 500명에게 보유되면, 그 issuer는 SEC에 등록하고 공개회사로서 정기보고를 해야 한다고 정한다. 사모 펀드가 이 트리거를 넘으면 "사적 발행"이라는 전체 구조가 무너진다(공개회사가 되어 버린다). 그래서 사모로 남으려는 §3(c)(7) 펀드는 held of record 보유자 수를 2,000명 미만(< 2,000)으로 유지한다. + +**왜 §12(g)가 §3(c)(7) 펀드에도 걸리나 (핵심).** §12(g)(2)(B)는 "§80a-8에 따라 등록된 투자회사가 발행한 증권"을 §12(g)에서 면제한다. 그러나 §3(c)(7) 펀드는 정의상 등록하지 않은(적용제외) 펀드다. 따라서 §12(g)(2)(B)의 면제를 받지 못하고, §12(g)의 2,000명 트리거에 그대로 노출된다. 이것이 "§3(c)(7) 펀드가 QP만 받는데도 보유자 수를 세야 하는" 이유다. + +따라서 D-01은 단순히 "지갑이 몇 개인가"를 보는 부품이 아니다. 거래 직전에 이 거래가 새 보유자를 추가하는지(A-04로 같은 사람의 다른 지갑이 아님을 확인한 뒤), 추가한다면 그 결과 보유자 수가 활성 상한을 넘는지를 판정하고, 거래 직후에 카운터를 갱신하는 상태추적 부품이다. + +**세 상한의 지도 (D-01이 담을 수 있는 상한들).** D-01은 여러 토큰이 공용으로 쓰는 라이브러리 부품이므로, 자산군·Recipe에 따라 아래 세 상한 중 활성화되는 것이 달라진다. + +| 근거 | 문턱 | 부등호 | Recipe | BUIDL | +|------|------|--------|--------|-------| +| 증권거래소법 §12(g) + Rule 12g-1 | held of record 2,000명 (및 비-AI 500명) | 미만 유지 (< 2,000, < 500 non-AI) | R3 (§3(c)(7)) | 조건부 활성 (§12(g) 적용 대상 issuer 전제; FPI면 아래로 대체) | +| Rule 12g3-2(a) + 3b-4(c) (FPI) | 미국 거주 record holder 300명 | 미만 유지 (< 300) | R3 (§3(c)(7), FPI 발행자) | 조건부 활성 (실제 BVI BUIDL이 FPI면 이 경계가 §12(g) 2,000을 대체) | +| 투자회사법 §3(c)(1) | 수익적 소유자 100명 (QVCF 250명) | 이하 허용 (≤ 100) | §3(c)(1) 펀드 분기 | dormant (BUIDL은 §3(c)(7)) | +| Rule 506(b)(2)(i) | 매수인 35명 / 90일 | 이하 허용 (≤ 35) | R1의 506(b) 분기 | dormant (BUIDL은 506(c), 무제한) | + +이 §3(c)(7)+§12(g) 라인이 §3의 본체이며, FPI(12g3-2(a)) 경로는 실제 BVI BUIDL의 선행 검토로 중요하다(§3.11). §3(c)(1)·506(b)는 라이브러리 완결성을 위해 보존하되 BUIDL에선 꺼진다. **§12(g) 트리거는 실시간이 아니라 회계연도 말 기준**이므로(§3.2·§5.1), D-01의 거래별 게이트는 등록위험 예방용 보수적 운영 장치다. + +--- + +## §2. 메타 정보 (Internal Identifier Box) + +아래는 Decipher 내부 PM 규약상의 식별자·분류값을 한곳에 모은 박스다. 본문에서는 이 코드들을 단독으로 쓰지 않고 "본 부품"·"보유자 수 카운터 부품" 같은 자연어로 부른다. + +| 항목 | 값 | 한 줄 풀이 | +|------|-----|-----------| +| 부품 이름 | 보유자 수 카운터 (Holder Count) | 면제 구조를 유지하기 위한 보유자 머릿수 감시원 | +| 검사 대상 | 지분증권 class의 보유자 수가 활성 상한(§12(g) < 2,000 / §3(c)(1) ≤ 100 / 506(b) ≤ 35)을 넘지 않는가 | "이 거래로 사람 수가 선을 넘는가" | +| Internal ID | D-01 (Decipher PM 규약) | 부품 일련번호 | +| 검증 방식 | 상태추적형 (on-chain 누적 카운터 갱신 + 거래 전 게이트) | 증명서를 보는 게 아니라 누적 상태를 세고 갱신 | +| Timing | pre-trade 게이트 + post-trade commit | 거래 직전에 "넘는가" 판정, 거래 직후에 카운터 갱신 | +| Stateful 여부 | STATEFUL | 과거 거래의 누적 결과(현재 보유자 수)에 판정이 의존 | +| 주 활성화 Recipe | R3 (ICA §3(c)(7) Fund) | 이 레시피가 §12(g) < 2,000 상한으로 본 부품을 부른다 | +| Cumulative Recipe | R1의 506(b) 분기 / §3(c)(1) 펀드 분기 | 그 경로에서는 각각 35인·100인 상한으로 활성화 (BUIDL 미적용) | +| Cascade Element | A-04(신원중복) · A-13(QP) · A-09(look-through) · B-01(manifest 정합) · A-03(AI) | 카운팅 단위·상한값·자격을 공급하는 부품 | +| 성숙도 | 정밀화 필요 → 본 문서로 확정 (STATEFUL) | R-5(record holder 산정) 응답분 | +| 파일·위치 | D-01_보유자수카운터.md · 산출물/elements/ | 산출물 경로 | + +--- + +## §3. 법적 근거 (Layer 1 → 2 → 3) + +**읽는 법.** 법적 근거는 세 겹이다 — Layer 1(조문)은 의회가 만든 법률 텍스트(statute), Layer 2(규칙)는 SEC가 그것을 실무 수준으로 구체화한 연방규칙(rule), Layer 3(해석)은 SEC 발행문서·Release·Federal Register 해설이다. 아래 §3.0.2 표 1의 "종류" 칸이 그대로 Layer에 대응한다 — Statute = Layer 1(§3(c)(7)·§3(c)(1)·§12(g)), SEC Rule = Layer 2(Rule 12g-1·12g5-1·506(b)·506(c)·501(e)), SEC Release = Layer 3(JOBS Act Title V/VI 이행·자산문턱 연혁). 본 절은 조문이 작동하는 논리 흐름 순서로 배열돼 §3.1~§3.10 번호를 그대로 유지하며, 각 항목이 어느 Layer인지는 이 표로 확인하면 된다. + +### 3.0 법조문 관계 플로우차트 (개발자용) + +위 조문들이 D-01 판정에서 어떻게 연결되는지 — 펀드가 §3(c)(7)이면 투자회사법상 인원 상한은 없지만, 등록 투자회사가 아니어서 §12(g)가 걸리고, 자산 $10M 초과 시 held of record < 2,000 유지가 유일한 구속 상한이 되는 흐름 — 을 정리한 것이다. §3(c)(1)(100인)·506(b)(35인) 분기는 BUIDL에서 dormant다. 각 조항 상세는 §3.1~§3.10. + +![그림 3.0 — 법조문 관계 흐름: §3(c)(7) 무상한 → §12(g) 노출 → Rule 12g-1 < 2,000 (개발자용)](img/fig30_statute_flow.png) + +### 3.0.1 실제 BUIDL에 어떻게 적용되나 + +BUIDL(BlackRock USD Institutional Digital Liquidity Fund)은 공개 공시상 Rule 506(c) + ICA §3(c)(7), 최소투자 $5M, BVI 역외 펀드다(발행 공시 Business Wire 2024-03-20). D-01 적용은 두 단계로 나눠 봐야 한다. + +**(1) 선행 단계 — §12(g)가 애초에 적용되는가(FPI 검토).** 실제 BUIDL은 BVI 역외 펀드이므로 Rule 3b-4(c)상 foreign private issuer(FPI)에 해당할 가능성이 크다. FPI라면 Rule 12g3-2(a)에 따라 그 class의 **미국 거주 record holder가 300명 미만**인 한 §12(g)에서 면제된다. 이 경우 실제 구속 상한은 "held of record < 2,000"이 아니라 "**미국 거주 보유자 < 300**"이 된다. 따라서 FPI 지위·미국 거주 보유자 산정·12g3-2(a)/(b) 적용 여부가 **선행 판단**이며(§3.11), D-01은 이 선행 결과를 Manifest로 받아 어느 상한(§12(g) 2,000 / 12g3-2(a) 미국 거주 300)을 활성화할지 결정한다. + +**(2) §12(g)가 적용된다는 전제 단계.** BUIDL-like 토큰이 미국 issuer이거나 FPI 면제가 없는 §12(g) 적용 대상 issuer라는 전제에서만, 아래 분석이 성립한다. 자산 규모가 $10M을 크게 초과하므로 Rule 12g-1(a)의 "총자산 $10M 이하" 면제는 성립하지 않고, §12(g) 등록을 피하는 길은 Rule 12g-1(b)(1)의 "held of record 2,000명 미만 그리고 비-AI 500명 미만"이다. + +**비-AI 분기는 자동 0이 아니다(정정).** BUIDL은 506(c)라 발행 당시 매수인 전원이 accredited investor여야 하지만(A-03이 검사), 이는 **판매 시점** 요건이다. 반면 Rule 12g-1(b)(1)의 비-AI 500명 판단은 "determined as of such day rather than at the time of the sale" — 즉 **해당 회계연도 종료 기준일 현재**의 AI 여부로 본다. 따라서 발행 당시 전원 AI였다는 사실만으로 §12(g)의 비-AI count가 영구히 0이라고 단정할 수 없다. 시스템(Recipe)이 secondary buyer에게도 계속 AI를 요구하고 A-11(freshness)·A-12(반대정보)와 연동해 status를 유지·재검증한다면 비-AI count가 사실상 0에 가깝게 유지될 수 있으나, 이는 **법문상 자동 결과가 아니라 시스템 정책·Recipe 설계의 결과**다. 그러므로 D-01은 nonAICount를 완전 dormant로 두지 않고 기준일 현재 AI claim에 연동해 별도 집계 가능하도록 설계한다(§3.2·§3.19). + +정리하면, 실제 BUIDL에 "held of record < 2,000 하나"가 곧바로 적용된다고 단정하지 않는다 — FPI 면제가 선행 검토되어야 하고(OD-D01-3), 비-AI count도 기준일 기준으로 별도 관리되어야 한다. + +### 3.0.2 조문 근거표 (Authority) + 순서·중요성 + +**표 1 — Authority (근거 원천 일람).** "종류" = Layer, 태그 = Direct(직접 판정 근거)·Conditional(사실관계 따라 활성)·Supporting(보조)·Background(배경). + +| 종류 | Authority | 내용 | D-01 관련성 | 태그 | Official URL | +|------|-----------|------|-------------|------|--------------| +| Statute | ICA §3(c)(7), 15 U.S.C. §80a-3(c)(7) | QP 전용 펀드 적용제외 (인원 상한 없음) | R3가 유지하려는 면제 — "왜 세는가"의 상위 근거 | Direct | uscode.house.gov | +| Statute | 증권거래소법 §12(g)(1), 15 U.S.C. §78*l*(g)(1) | 자산 > $10M + held of record 2,000명 또는 비-AI 500명 → 등록의무 | 카운팅 상한의 직접 근거 (핵심) | Direct | uscode.house.gov | +| Statute | 증권거래소법 §12(g)(2)(B), 15 U.S.C. §78*l*(g)(2) | 등록 투자회사(§80a-8) 증권은 §12(g) 면제 | §3(c)(7) 펀드는 미등록이라 이 면제 불가 → §12(g) 노출 근거 | Direct | uscode.house.gov | +| SEC Rule | Rule 12g-1, 17 C.F.R. §240.12g-1 | 자산 ≤ $10M 또는 held of record < 2,000 & 비-AI < 500이면 면제 | 실제 상한 경계(< 2,000) | Direct | ecfr.gov | +| SEC Rule | Rule 12g5-1, 17 C.F.R. §240.12g5-1 | "held of record" 정의 — 누구를 1명으로 세는가 | 카운팅 단위·집계 규칙 (법인=1, 동일인=1, 회피=look-through) | Direct | ecfr.gov | +| Statute | 증권거래소법 §12(g)(5), 15 U.S.C. §78*l*(g)(5) | "class"·"held of record"·"total assets" 정의 위임 + 종업원보상 제외 | 카운팅 정의의 위임 근거 | Supporting | uscode.house.gov | +| Statute | 증권거래소법 §12(g)(4), 15 U.S.C. §78*l*(g)(4) | 보유자 300명 미만이면 등록 종료 | STATEFUL 하향·이력(등록 후 이탈) 경계 | Background | uscode.house.gov | +| SEC Rule | Rule 12g3-2(a), 17 C.F.R. §240.12g3-2(a) | 외국 사모발행자(FPI) class가 미국 거주 record holder 300명 미만이면 §12(g) 면제 | 실제 BUIDL(BVI 역외)의 선행 면제 — 상한이 "미국 거주 < 300"으로 바뀔 수 있음 | Conditional | ecfr.gov | +| SEC Rule | Rule 3b-4(c), 17 C.F.R. §240.3b-4(c) | foreign private issuer 정의 (미국 거주 의결권 ≤ 50% 또는 business-contacts test) | FPI 지위 판단 — 12g3-2(a) 면제의 선행 요건 | Conditional | ecfr.gov | +| Statute | ICA §3(c)(1), 15 U.S.C. §80a-3(c)(1) | 수익적 소유자 100명 이하 펀드 적용제외 (+ (A) look-through) | §3(c)(1) Recipe의 상한 (BUIDL dormant); (A)는 A-09 연계 | Conditional | uscode.house.gov | +| SEC Rule | Rule 506(b)(2)(i)·501(e), 17 C.F.R. §230.506·§230.501 | 매수인 35명/90일 상한 + 산정 방식 | 506(b) 발행 Recipe 상한 (BUIDL dormant, 506(c)는 무제한) | Conditional | ecfr.gov | +| Statute | ICA §2(a)(51), 15 U.S.C. §80a-2(a)(51) | qualified purchaser 정의 | 자격은 A-13 담당 — D-01은 머릿수만 (경계 확인용) | Background | uscode.house.gov | + +**표 2 — 순서·중요성 한눈에 보기.** 순서는 중요도순이 아니라 법이 작동하는 논리 흐름순이다. + +| 순서 | 조문 | 중요성 | D-01이 그걸로 하는 일 | +|------|------|--------|----------------------| +| §3.1 | ICA §3(c)(7) | 상위 배경 | 유지 대상 면제 — 인원 상한 없음을 확인 (2,000은 여기 없음) | +| §3.2 | §12(g)(1) | 핵심 | 상한의 근원: 자산 > $10M + held of record 2,000/비-AI 500 트리거 | +| §3.3 | §12(g)(2)(B) | 핵심(적용 근거) | §3(c)(7) 펀드가 왜 §12(g)에 걸리는지 (미등록 → 면제 불가) | +| §3.4 | Rule 12g-1 | 핵심 | 실제 경계: held of record < 2,000 & 비-AI < 500 유지 | +| §3.5 | Rule 12g5-1 | 핵심 | 카운팅 단위: 법인=1, 동일인 다명의=1, 회피목적=look-through | +| §3.6 | §12(g)(5) | 보조 | "held of record"·"total assets" 정의 위임 + 종업원보상 제외 | +| §3.7 | §12(g)(4) | 배경 | 등록 후 300명 미만 하향 시 등록 종료 (STATEFUL 이력) | +| §3.8 | ICA §3(c)(1) + (A) | 조건부(dormant) | §3(c)(1) 펀드 분기의 100인 상한 + look-through(A-09) | +| §3.9 | Rule 506(b)(2)(i)·501(e) | 조건부(dormant) | 506(b) 발행 분기의 35인/90일 상한 (506(c)는 무제한) | +| §3.10 | ICA §2(a)(51) | 배경 | 자격(QP)은 A-13, D-01은 머릿수 — 책임경계 확인 | +| §3.11 | Rule 12g3-2(a) + 3b-4(c) | 조건부(중요·FPI) | 실제 BVI BUIDL의 선행 면제: FPI면 미국 거주 record holder < 300이면 §12(g) 면제 | + +### 3.1 투자회사법 §3(c)(7) — Qualified Purchaser 전용 펀드 (인원 상한 없음) + +- **조항**: Investment Company Act of 1940 §3(c)(7), 15 U.S.C. §80a-3(c)(7) — uscode.house.gov +- **핵심 원문**: (A) Any issuer, the outstanding securities of which are owned exclusively by persons who, at the time of acquisition of such securities, are qualified purchasers, and which is not making and does not at that time propose to make a public offering of such securities. Securities that are owned by persons who received the securities from a qualified purchaser as a gift or bequest, or in a case in which the transfer was caused by legal separation, divorce, death, or other involuntary event, shall be deemed to be owned by a qualified purchaser, subject to such rules, regulations, and orders as the Commission may prescribe as necessary or appropriate in the public interest or for the protection of investors. (B) Notwithstanding subparagraph (A), an issuer is within the exception provided by this paragraph if— (i) in addition to qualified purchasers, outstanding securities of that issuer are beneficially owned by not more than 100 persons who are not qualified purchasers, if— (I) such persons acquired any portion of the securities of such issuer on or before September 1, 1996; and (II) at the time at which such persons initially acquired the securities of such issuer, the issuer was excepted by paragraph (1). +- **한국어**: (A) 발행 증권 전부가, 그 취득 시점에 qualified purchaser인 자들에 의해서만 소유되고, 그 증권의 public offering을 하지 않으며 그 시점에 할 것을 제안하지도 않는 issuer. qualified purchaser로부터 증여·유증으로 증권을 받은 자, 또는 법적 별거·이혼·사망·기타 비자발적 사건으로 이전받은 자가 소유한 증권은 (SEC가 정하는 규칙·규정·명령에 따라) qualified purchaser가 소유한 것으로 본다. (B) (A)에도 불구하고, issuer는 다음의 경우 이 항의 적용제외에 해당한다 — (i) qualified purchaser 외에, 그 issuer의 발행 증권을 qualified purchaser가 아닌 100명 이하가 수익적으로 소유하되, (I) 그 자들이 1996-09-01 이전에 그 증권의 일부를 취득했고, (II) 그 최초 취득 시점에 그 issuer가 (제1항 §3(c)(1))에 의해 적용제외였던 경우. +- **쉬운 설명**: §3(c)(7)의 핵심은 "전원이 qualified purchaser이면 인원 수 제한이 없다"는 것이다 — 조문 어디에도 보유자 수의 숫자 상한이 없다. (B)는 1996-09-01 이전 §3(c)(1)(100인) 펀드였다가 전환한 펀드에 한해 qualified purchaser가 아닌 grandfather 보유자를 100명까지 허용하는 좁은 경과규정으로, 신규 펀드(BUIDL 포함)와는 무관하다. 따라서 "D-01이 §3(c)(7) 펀드에서 세는 2,000명"은 이 조문이 아니라 §12(g)에서 오며, §3(c)(7)은 오히려 "투자회사법상으로는 상한이 없음"을 확정해 주는 상위 배경이다. +- **PASS/FAIL 반영**: 간접 ✕ — 자격(QP) 판정은 A-13, D-01은 머릿수만. 이 조문은 D-01에 "투자회사법상 인원 상한 없음"을 알려주어, D-01의 실제 구속 상한이 §12(g)임을 확정한다. (B)의 "not more than 100" grandfather는 신규 펀드 미적용이므로 D-01 카운터에 반영하지 않는다(적용 시에도 QP 카운트가 아니라 별도 non-QP 카운트). +- **ERC-3643 변환**: recipe = R3_ICA_3C7; holderCap.source = EXCHANGE_ACT_12G (§3(c)(7) 아님); §3(c)(7) 유지의 QP 요건은 A-13 claim.topic = QUALIFIED_PURCHASER가 담당. D-01 module은 §3(c)(7)에서 인원 상한 파라미터를 §12(g)로부터 받는다. + +### 3.2 증권거래소법 §12(g)(1) — 공개회사 등록의무의 발동 문턱 (핵심) + +- **조항**: Securities Exchange Act of 1934 §12(g)(1), 15 U.S.C. §78*l*(g)(1) — uscode.house.gov +- **핵심 원문**: (1) Every issuer which is engaged in interstate commerce, or in a business affecting interstate commerce, or whose securities are traded by use of the mails or any means or instrumentality of interstate commerce shall— (A) within 120 days after the last day of its first fiscal year ended on which the issuer has total assets exceeding $10,000,000 and a class of equity security (other than an exempted security) held of record by either— (i) 2,000 persons, or (ii) 500 persons who are not accredited investors (as such term is defined by the Commission), and (B) in the case of an issuer that is a bank, a savings and loan holding company … or a bank holding company … not later than 120 days after the last day of its first fiscal year ended … on which the issuer has total assets exceeding $10,000,000 and a class of equity security (other than an exempted security) held of record by 2,000 or more persons, register such security by filing with the Commission a registration statement … +- **한국어**: (1) 주간통상에 종사하거나 주간통상에 영향을 미치는 사업을 하거나, 그 증권이 우편·주간통상 수단으로 거래되는 모든 issuer는 — (A) 총자산이 $10,000,000을 초과하고 어느 지분증권 class(면제증권 제외)가 (i) 2,000명 또는 (ii) 비적격투자자(SEC가 정하는 정의) 500명에게 held of record로 보유된 최초 회계연도 종료일로부터 120일 이내에, (B) issuer가 은행·저축대부지주회사·은행지주회사인 경우 총자산 $10,000,000 초과 및 지분증권 class가 2,000명 이상에게 held of record로 보유된 최초 회계연도 종료일로부터 120일 이내에, 그 증권을 SEC에 등록신고서 제출로 등록해야 한다. +- **쉬운 설명**: 이 조문이 "2,000"의 출처다. 두 조건이 AND로 걸린다 — (1) 총자산이 $10M을 초과할 것, 그리고 (2) 어느 지분증권 class가 held of record로 2,000명(또는 비-AI 500명)에게 보유될 것. 둘을 다 넘으면 그 issuer는 공개회사가 되어 SEC 등록·정기보고를 해야 한다. 사모 펀드에겐 사형선고나 다름없다. 부등호 주의: 자산은 "exceeding $10,000,000"(초과, > $10M)이고, 인원은 "held of record by 2,000 persons"(2,000명에 도달하면 트리거) — 즉 안전하려면 held of record를 2,000명 미만(< 2,000)으로 유지해야 한다. **트리거 시점 주의(중요)**: 조문은 "within 120 days after the last day of its **first fiscal year ended** on which ..."이라고 쓴다. 즉 등록의무는 자산·인원 요건을 동시에 충족한 **최초 회계연도 종료일** 기준으로 판단되어 그 후 120일 내에 이행하는 구조이지, "2,000번째 보유자가 생기는 순간 실시간으로" 발생하지 않는다. 따라서 D-01이 거래 직전에 count 도달을 차단하는 것은 법문상 즉시 트리거를 막는 것이라기보다 **회계연도 말에 요건을 충족해 등록위험에 빠지는 것을 예방하는 보수적 운영 게이트**다(§5.1·§7). BUIDL은 자산이 $10M을 크게 초과하므로 자산 요건은 이미 충족(=위험 쪽) 상태이며, 인원 관리가 주된 방어선이다. +- **PASS/FAIL 반영**: 직접 ○ — D-01의 핵심 상한. 이 거래로 인한 결과 held-of-record 인원이 2,000명 미만(< 2,000)이어야 PASS. 비-AI 인원은 500명 미만(< 500)이어야 하며, 이 비-AI 여부는 판매 시점이 아니라 **회계연도 종료 기준일 현재**의 AI status로 판단한다(Rule 12g-1(b)(1), §3.4). BUIDL이 506(c)로 발행 당시 전원 AI라는 사실은 비-AI count를 낮게 유지하는 데 도움이 되지만 자동으로 0을 보장하지 않는다 — Recipe가 계속 AI를 요구하고 A-11/A-12와 연동해 status를 유지할 때 사실상 0에 가깝게 관리되는 정책적 결과다(§3.0.1·§3.19). +- **ERC-3643 변환**: HolderCountModule.threshold_12g_total = 2000 (enforce resultingHolders < 2000); threshold_12g_nonAI = 500 (enforce nonAIHolders < 500); assetGate: manifest.totalAssetsUSD > 10_000_000 → 상한 활성. + +### 3.3 증권거래소법 §12(g)(2)(B) — 등록 투자회사 면제 (§3(c)(7) 펀드엔 불가) + +- **조항**: Securities Exchange Act §12(g)(2)(B), 15 U.S.C. §78*l*(g)(2) — uscode.house.gov +- **핵심 원문**: (2) The provisions of this subsection shall not apply in respect of— … (B) any security issued by an investment company registered pursuant to section 80a–8 of this title. +- **한국어**: (2) 본 subsection(§12(g))의 규정은 다음에 적용되지 않는다 — (B) §80a-8에 따라 등록된 투자회사가 발행한 증권. +- **쉬운 설명**: §12(g)는 "등록된 투자회사가 발행한 증권"에는 적용되지 않는다. 즉 정식 등록 뮤추얼펀드 등은 애초에 §12(g)를 걱정할 필요가 없다. 그러나 §3(c)(7) 펀드는 정의상 투자회사법 등록을 하지 않은(적용제외) 펀드다 — 등록 투자회사가 아니므로 이 (B) 면제를 받지 못하고, 결과적으로 §12(g)의 2,000명 트리거에 그대로 노출된다. 이 한 문장이 "왜 QP만 받는 사모 펀드가 보유자 수까지 세야 하는가"의 답이다. +- **PASS/FAIL 반영**: 간접 ✕ — 적용 근거. 이 면제가 성립하지 않으므로 §12(g) 상한(§3.2)이 살아남는다. Manifest에 "펀드가 등록 투자회사인가" 플래그가 있으면 D-01 활성/비활성을 결정한다. +- **ERC-3643 변환**: manifest.fundRegisteredUnder80a8 = false → HolderCountModule.active = true (§12(g) 상한 적용). true였다면 §12(g) 분기 비활성. + +### 3.4 Rule 12g-1 — §12(g) 면제 (실제 경계: held of record < 2,000) + +- **조항**: 17 C.F.R. §240.12g-1 — ecfr.gov +- **핵심 원문**: An issuer is not required to register a class of equity securities pursuant to section 12(g)(1) of the Act (15 U.S.C. 78l(g)(1)) if on the last day of its most recent fiscal year: (a) The issuer had total assets not exceeding $10 million; or (b)(1) The class of equity securities was held of record by fewer than 2,000 persons and fewer than 500 of those persons were not accredited investors (as such term is defined in § 230.501(a) of this chapter, determined as of such day rather than at the time of the sale of the securities); or (2) The class of equity securities was held of record by fewer than 2,000 persons in the case of a bank; a savings and loan holding company, as such term is defined in section 10 of the Home Owners' Loan Act (12 U.S.C. 1461); or a bank holding company, as such term is defined in section 2 of the Bank Holding Company Act of 1956 (12 U.S.C. 1841). +- **한국어**: issuer는 최근 회계연도 종료일 기준 다음 중 하나에 해당하면 §12(g)(1)에 따른 지분증권 class 등록의무가 없다 — (a) 총자산이 $10 million을 초과하지 않았거나; 또는 (b)(1) 그 지분증권 class가 2,000명 미만에게 held of record로 보유되었고 그중 비적격투자자(§230.501(a) 정의, 판매 시점이 아니라 그 날 기준)가 500명 미만이었거나; 또는 (2) 은행·저축대부지주회사·은행지주회사의 경우 그 class가 2,000명 미만에게 held of record로 보유된 경우. +- **쉬운 설명**: §12(g) 등록을 피하는 면제는 OR 구조다 — (a) 자산이 $10M 이하이면 인원과 무관하게 면제, 또는 (b) 자산이 크더라도 held of record가 2,000명 미만 그리고 비-AI가 500명 미만이면 면제. BUIDL은 자산이 $10M을 크게 초과하므로 (a) 경로는 막혀 있고, (b) 경로 — 즉 held of record < 2,000 그리고 비-AI < 500 — 유지가 (§12(g)가 적용된다는 전제에서) 주된 길이다. 부등호가 결정적이다: 조문이 "fewer than 2,000 persons"(2,000명 미만)이므로 1,999명까지는 면제, 정확히 2,000명이 되는 순간 면제를 잃는다. 두 가지 시점 규율을 놓치면 안 된다. 첫째, 이 판단은 "on the last day of its **most recent fiscal year**" — **회계연도 종료일 기준 스냅샷**이다(실시간이 아님, §3.2). 둘째, 비-AI 판단은 "(as such term is defined in §230.501(a) ..., **determined as of such day rather than at the time of the sale of the securities**)" — 즉 판매 시점이 아니라 **그 기준일 현재**의 AI 여부다. 이 둘째 문언 때문에 "506(c)라 발행 당시 전원 AI였으니 비-AI는 영구히 0"이라는 추론은 성립하지 않는다: 기준일에 AI가 아니게 된 보유자는 비-AI로 계상된다. 따라서 D-01의 운영상 PASS 조건은 "이 거래 후 held-of-record 인원 < 2,000"(≤ 1,999)이되, 비-AI count는 기준일 현재 AI claim에 연동해 별도 관리한다. +- **PASS/FAIL 반영**: 직접 ○ — D-01 경계의 최종 출처. 결과 held-of-record < 2,000(≤ 1,999) 그리고 결과 비-AI < 500(≤ 499)이면 PASS. 하나라도 도달(= 2,000 또는 = 500)이면 FAIL. +- **ERC-3643 변환**: moduleCheck 통과 조건 = (resultingHolders < 2000) && (resultingNonAIHolders < 500). 경계 상수는 strict less-than으로 구현(HOLDER_CAP_12G_TOTAL = 2000, HOLDER_CAP_12G_NONAI = 500; 판정 `count >= cap → reject`). + +### 3.5 Rule 12g5-1 — "held of record" 정의 (카운팅 단위) + +- **조항**: 17 C.F.R. §240.12g5-1 — ecfr.gov +- **핵심 원문**: (a) For the purpose of determining whether an issuer is subject to the provisions of sections 12(g) and 15(d) of the Act, securities shall be deemed to be "held of record" by each person who is identified as the owner of such securities on records of security holders maintained by or on behalf of the issuer, subject to the following: (1) In any case where the records of security holders have not been maintained in accordance with accepted practice, any additional person who would be identified as such an owner on such records if they had been maintained in accordance with accepted practice shall be included as a holder of record. (2) Except as specified in paragraph (a)(9) of this section, securities identified as held of record by a corporation, a partnership, a trust whether or not the trustees are named, or other organization shall be included as so held by one person. (3) Securities identified as held of record by one or more persons as trustees, executors, guardians, custodians or in other fiduciary capacities with respect to a single trust, estate or account shall be included as held of record by one person. (4) Securities held by two or more persons as coowners shall be included as held by one person. (5) Each outstanding unregistered or bearer certificate shall be included as held of record by a separate person, except to the extent that the issuer can establish that, if such securities were registered, they would be held of record, under the provisions of this rule, by a lesser number of persons. (6) Securities registered in substantially similar names where the issuer has reason to believe because of the address or other indications that such names represent the same person, may be included as held of record by one person. … (b) Notwithstanding paragraph (a) of this section: … (3) If the issuer knows or has reason to know that the form of holding securities of record is used primarily to circumvent the provisions of section 12(g) or 15(d) of the Act, the beneficial owners of such securities shall be deemed to be the record owners thereof. +- **한국어**: (a) issuer가 §12(g)·§15(d)의 적용대상인지 판단할 목적으로, 증권은 issuer가(또는 issuer를 위하여) 유지하는 증권 소유자 명부상 소유자로 식별되는 각 사람에 의해 "held of record"된 것으로 보되, 다음에 따른다 — (1) 명부가 accepted practice에 따라 유지되지 않은 경우, 그렇게 유지되었더라면 소유자로 식별되었을 추가 인원을 record holder에 포함한다. (2) ((a)(9) 예외를 제외하고) corporation·partnership·trust(수탁자 명시 여부 불문)·기타 조직이 held of record하는 것으로 식별된 증권은 1명이 보유한 것으로 포함한다. (3) 단일 신탁·유산·계정에 관하여 수탁자·유언집행자·후견인·보관인 등 수탁 자격의 1인 이상이 held of record하는 증권은 1명이 보유한 것으로 포함한다. (4) 2인 이상이 공동소유자로 보유하는 증권은 1명이 보유한 것으로 포함한다. (5) 각 미등록·무기명 증권은 별개의 1명이 held of record하는 것으로 포함하되, 등록되었더라면 이 규칙상 더 적은 수가 보유했을 것임을 issuer가 입증할 수 있는 범위에서는 예외로 한다. (6) 실질적으로 유사한 명의로 등록된 증권으로서 주소나 기타 정황상 동일인을 나타낸다고 issuer가 믿을 만한 이유가 있는 경우, 1명이 held of record하는 것으로 포함할 수 있다. … (b) (a)에도 불구하고 — (3) issuer가, 증권을 record로 보유하는 형태가 주로 §12(g)·§15(d) 규정을 회피하기 위해 사용된다는 것을 알거나 알 만한 이유가 있는 경우, 그 증권의 수익적 소유자를 record 소유자로 본다. +- **쉬운 설명**: 이 규칙이 "몇 명인가"를 세는 방법을 정한다. 핵심 세 가지. 첫째, 원칙은 "issuer의 증권 소유자 명부상 소유자로 적힌 각 사람"을 1명으로 센다((a) chapeau). 둘째, 뭉치는 규칙 — 법인·조합·신탁은 그 자체로 1명 ((a)(2)), 공동소유는 1명 ((a)(4)), 주소 등으로 동일인으로 보이는 유사 명의는 1명 ((a)(6)). 여기서 자격판정과의 결정적 차이가 나온다: 카운팅에서는 법인을 뚫지 않고 그냥 1명으로 세지만, 자격판정(A-13/A-09)에서는 법인을 뚫고 구성원까지 본다 — 목적이 달라 방향이 반대다. 셋째, 회피 방지 ((b)(3)) — 보유형태가 주로 §12(g) 회피 목적이면 수익적 소유자를 record 소유자로 간주한다. 이것이 온체인에서 "한 사람이 지갑을 여러 개 만들어 머릿수를 쪼개는" 회피를 막는 정확한 법적 근거이며, D-01이 지갑이 아니라 사람(ONCHAINID) 단위로 세야 하는 이유다(A-04가 지갑↔사람 매핑을 공급). +- **PASS/FAIL 반영**: 직접 ○ — 카운팅 단위 규칙. on-chain 구현은 (a) chapeau·(a)(6)·(b)(3)에 근거해 "지갑"이 아니라 "사람(ONCHAINID)"을 1로 센다. 법인 지갑은 (a)(2)에 따라 1로 센다. 같은 사람의 다중 지갑은 (a)(6)/(b)(3) + A-04로 1로 합산한다. +- **ERC-3643 변환**: dedupKey = ONCHAINID (person), NOT wallet address; entityHolder → count as 1 (look-through 금지, 자격판정과 반대); 다중지갑 동일인 → A-04 identity cluster로 1 합산; (b)(3) 회피 적발 시 forcedTransfer()/recovery로 정정 + A-04 red-flag. + +### 3.6 증권거래소법 §12(g)(5) — "class"·"held of record"·"total assets" 정의 위임 + +- **조항**: Securities Exchange Act §12(g)(5), 15 U.S.C. §78*l*(g)(5) — uscode.house.gov +- **핵심 원문**: (5) For the purposes of this subsection the term "class" shall include all securities of an issuer which are of substantially similar character and the holders of which enjoy substantially similar rights and privileges. The Commission may for the purpose of this subsection define by rules and regulations the terms "total assets" and "held of record" as it deems necessary or appropriate in the public interest or for the protection of investors in order to prevent circumvention of the provisions of this subsection. … For purposes of determining whether an issuer is required to register a security with the Commission pursuant to paragraph (1), the definition of "held of record" shall not include securities held by persons who received the securities pursuant to an employee compensation plan in transactions exempted from the registration requirements of section 5 of the Securities Act of 1933. +- **한국어**: (5) 본 subsection의 목적상 "class"는 실질적으로 유사한 성격을 가지고 그 보유자들이 실질적으로 유사한 권리·특권을 누리는 issuer의 모든 증권을 포함한다. SEC는 본 subsection의 목적상 그 규정의 회피를 방지하기 위해 공익 또는 투자자 보호에 필요·적절하다고 판단하는 바에 따라 규칙·규정으로 "total assets"와 "held of record"를 정의할 수 있다. … 제1항에 따른 등록의무 판단 목적상 "held of record"의 정의는, 종업원보상플랜에 따라 §5(1933년 증권법) 등록의무가 면제된 거래로 증권을 취득한 자가 보유한 증권을 포함하지 않는다. +- **쉬운 설명**: 이 조항은 세 가지를 한다. 첫째, "class" 정의 — 실질 유사 권리의 증권은 하나의 class다. 온체인에서는 하나의 토큰 컨트랙트가 하나의 class에 대응한다(그 토큰의 보유자를 세면 된다). 둘째, SEC에게 "total assets"·"held of record" 정의권을 위임하면서 명시적으로 "회피 방지(prevent circumvention)" 목적을 언급한다 — 이 문언이 Rule 12g5-1(b)(3)(회피목적 보유형태 look-through)과 D-01의 사람 단위 카운팅을 정당화하는 상위 근거다. 셋째, 종업원보상플랜 취득분은 카운트에서 제외한다 — BUIDL은 종업원 대상 발행이 아니므로 무관하다. +- **PASS/FAIL 반영**: 보조 ✕ — 정의 위임의 상위 근거. Rule 12g5-1의 카운팅 규칙(§3.5)과 그 회피방지 look-through의 법적 뿌리. +- **ERC-3643 변환**: class 단위 = ERC-3643 토큰 컨트랙트 하나; 회피방지 원칙 → (b)(3) look-through 구현 근거; employeeCompExclusion 플래그(BUIDL = 미적용). + +### 3.7 증권거래소법 §12(g)(4) — 등록 종료 문턱 (하향 300명 미만) + +- **조항**: Securities Exchange Act §12(g)(4), 15 U.S.C. §78*l*(g)(4) — uscode.house.gov +- **핵심 원문**: (4) Registration of any class of security pursuant to this subsection shall be terminated ninety days, or such shorter period as the Commission may determine, after the issuer files a certification with the Commission that the number of holders of record of such class of security is reduced to less than 300 persons, or, in the case of a bank, a savings and loan holding company … or a bank holding company … 1,200 persons. The Commission shall after notice and opportunity for hearing deny termination of registration if it finds that the certification is untrue. Termination of registration shall be deferred pending final determination on the question of denial. +- **한국어**: (4) 본 subsection에 따른 어느 class 증권의 등록은, 그 class 증권의 record 보유자 수가 300명 미만(은행·저축대부지주회사·은행지주회사의 경우 1,200명)으로 감소했다는 certification을 issuer가 SEC에 제출한 후 90일(또는 SEC가 정하는 더 짧은 기간)에 종료된다. SEC는 그 certification이 허위라고 판단하면 통지·청문 기회 후 등록 종료를 거부한다. 등록 종료는 거부 여부 최종 결정 시까지 유예된다. +- **쉬운 설명**: 상한(2,000)과 이탈문(300) 사이에는 큰 이력 구간(hysteresis)이 있다. 즉 일단 held of record 2,000명에 도달해 공개회사로 등록되면, 되돌아 나가는 문은 "record 보유자 300명 미만으로 감소"라는 훨씬 낮은 문턱 + certification + 90일이다. 한 번 넘으면 원상복구가 어렵다는 뜻이다. 이 조항은 D-01이 STATEFUL인 이유를 잘 보여준다 — 카운터는 단순히 "지금 몇 명인가"를 넘어 등록 생애주기 전체를 함의한다. 사모로 남으려는 §3(c)(7) 펀드의 실무 관건은 처음부터 < 2,000을 방어하는 것이며, < 300은 (원치 않게) 이미 등록된 뒤의 탈출 조건이다. +- **PASS/FAIL 반영**: 배경 ✕ — pre-trade 게이트에는 직접 쓰이지 않는다. STATEFUL 이력·운영(§11)에서 "이미 등록회사가 된 예외 상황의 하향 관리" 시나리오로만 관련. +- **ERC-3643 변환**: 일반 미사용; 등록 상태 진입 시 operator alert; terminationThreshold = 300(하향 감시, 운영 레이어 지표). + +### 3.8 투자회사법 §3(c)(1) + (A) — 100인 펀드 + look-through (BUIDL dormant) + +- **조항**: Investment Company Act §3(c)(1), 15 U.S.C. §80a-3(c)(1) — uscode.house.gov +- **핵심 원문**: (1) Any issuer whose outstanding securities (other than short-term paper) are beneficially owned by not more than one hundred persons (or, in the case of a qualifying venture capital fund, 250 persons) and which is not making and does not presently propose to make a public offering of its securities. … For purposes of this paragraph: (A) Beneficial ownership by a company shall be deemed to be beneficial ownership by one person, except that, if the company owns 10 per centum or more of the outstanding voting securities of the issuer, and is or, but for the exception provided for in this paragraph or paragraph (7), would be an investment company, the beneficial ownership shall be deemed to be that of the holders of such company's outstanding securities (other than short-term paper). +- **한국어**: (1) 발행 증권(단기증권 제외)이 100명 이하(적격 벤처캐피탈펀드의 경우 250명)에게 수익적으로 소유되고, 그 증권의 public offering을 하지 않으며 현재 할 것을 제안하지도 않는 issuer. … 본 항의 목적상: (A) company에 의한 수익적 소유는 1명에 의한 수익적 소유로 본다. 다만 그 company가 issuer의 발행 의결권증권의 10% 이상을 소유하고, 그 company가 (본 항 또는 제7항 §3(c)(7)의 적용제외가 아니었다면) 투자회사에 해당할 경우, 그 수익적 소유는 그 company의 발행 증권(단기증권 제외) 보유자들의 소유로 본다. +- **쉬운 설명**: §3(c)(1)은 §3(c)(7)의 형제 면제다 — "수익적 소유자 100명 이하"(적격 벤처캐피탈펀드는 250명)이고 public offering을 하지 않는 펀드. 부등호 대조가 핵심: 여기선 "not more than one hundred"(100명 이하, ≤ 100)라 100명은 허용되고 101명이 되면 깨진다. §12(g)의 "fewer than 2,000"(2,000 도달 불가, < 2,000)과 부등호가 다르다. (A)의 look-through: 어떤 company가 issuer 의결권의 10% 이상을 갖고 그 자체가 (또는 §3(c)(1)/(7) 적용제외가 아니었다면) 투자회사였을 경우, 그 company를 1명으로 세지 않고 뚫어서 그 소유자들까지 센다 — 펀드가 펀드에 투자해 100인 상한을 우회하는 것을 막는 장치다. 이 look-through 계산은 A-09 기계를 재사용한다. 단 BUIDL은 §3(c)(7) 펀드이므로 이 100인 상한 전체가 dormant다. +- **PASS/FAIL 반영**: 조건부 ○ (BUIDL dormant) — §3(c)(1) 펀드 Recipe일 때만 활성. 활성 시 수익적 소유자 ≤ 100(QVCF ≤ 250)이면 PASS, > 100(= 101 이상)이면 FAIL. (A) look-through 계산은 A-09의 lookThroughStatus 결과를 입력으로 받는다. +- **ERC-3643 변환**: (조건부) recipe = ICA_3C1 → HolderCountModule.threshold_3c1 = 100 (enforce ≤ 100; `count > 100 → reject`); QVCF → 250; beneficialOwner 집계 시 (A) 10%+ 투자회사 보유자는 A-09 look-through 결과로 전개. + +### 3.9 Rule 506(b)(2)(i) · 501(e) · 506(c)(2)(i) — 발행 매수인 35인 상한 (BUIDL dormant) + +- **조항**: 17 C.F.R. §230.506(b)(2)(i) · §230.501(e) · §230.506(c)(2)(i) — ecfr.gov +- **핵심 원문**: [506(b)(2)(i)] Limitation on number of purchasers. There are no more than, or the issuer reasonably believes that there are no more than, 35 purchasers of securities from the issuer in offerings under this section in any 90-calendar-day period. … See § 230.501(e) for the calculation of the number of purchasers and § 230.502(a) for what may or may not constitute an offering under paragraph (b) of this section. [501(e)] Calculation of number of purchasers. For purposes of calculating the number of purchasers under § 230.506(b) only, the following shall apply: (1) The following purchasers shall be excluded: (i) Any relative, spouse or relative of the spouse of a purchaser who has the same primary residence as the purchaser; … Clients of an investment adviser or customers of a broker or dealer shall be considered the "purchasers" under Regulation D regardless of the amount of discretion given to the investment adviser or broker or dealer to act on behalf of the client or customer. [506(c)(2)(i)] All purchasers of securities sold in any offering under paragraph (c) of this section are accredited investors. +- **한국어**: [506(b)(2)(i)] 매수인 수 제한 — 어느 90역일 기간 내에 본 조에 따른 offering에서 issuer로부터 증권을 취득한 매수인이 35명을 넘지 않거나, issuer가 35명을 넘지 않는다고 합리적으로 믿을 것. 매수인 수 산정은 §230.501(e)를, 무엇이 offering을 구성하는지는 §230.502(a)를 본다. [501(e)] 매수인 수 산정 — §230.506(b)의 목적으로만 다음을 적용한다: (1) 다음 매수인은 제외한다 — (i) 매수인과 같은 primary residence를 가진 친족·배우자·배우자의 친족; … 투자자문업자의 고객 또는 broker·dealer의 고객은, 자문업자·broker·dealer에게 부여된 재량의 정도와 무관하게 Regulation D상 "매수인"으로 본다. [506(c)(2)(i)] 본 조 (c)항에 따른 offering에서 판매된 증권의 모든 매수인은 accredited investor다. +- **쉬운 설명**: 506(b)에는 "매수인 35명 이하 / 90일"의 상한이 있고, 이 35명은 501(e)로 산정한다 — accredited investor는 계산에서 제외되고, 같은 집 친족은 제외되며, 법인·조합은 원칙적으로 1명으로 뭉친다(즉 실질적으로는 "비-AI 매수인 35명" 상한에 가깝다). 부등호는 "no more than 35"(35명 이하, ≤ 35 허용)라 35명은 OK, 36명이면 깨진다. 그러나 이 상한은 506(b) 전용이다. BUIDL은 506(c)를 쓴다 — 506(c)(2)(i)는 "전원이 AI"를 요구하는 대신 매수인 수 상한을 두지 않는다. 따라서 506(b)의 35인 상한은 BUIDL에서 dormant다(§4(a)(7) 재판매 경로에도 매수인 수 상한은 없다). +- **PASS/FAIL 반영**: 조건부 ○ (BUIDL dormant) — R1의 506(b) 분기일 때만 활성. 활성 시 501(e)로 산정한 매수인 수 ≤ 35(90일 rolling)이면 PASS, > 35(= 36 이상)이면 FAIL. 506(c)·§4(a)(7) 경로에선 비활성. +- **ERC-3643 변환**: (조건부) recipe = REGD_506B → HolderCountModule.threshold_506b = 35 (rolling 90-day window, enforce ≤ 35); purchaserCount 산정 시 501(e) 제외규칙(AI 제외·친족 제외·법인 1로 뭉침) 적용; recipe = REGD_506C → 이 상한 비활성(무제한). + +### 3.10 투자회사법 §2(a)(51) — Qualified Purchaser 정의 (자격은 A-13, 카운트는 D-01) + +- **조항**: Investment Company Act §2(a)(51), 15 U.S.C. §80a-2(a)(51) — uscode.house.gov +- **핵심 원문**: (51)(A) "Qualified purchaser" means— (i) any natural person (including any person who holds a joint, community property, or other similar shared ownership interest in an issuer that is excepted under section 80a–3(c)(7) of this title with that person's qualified purchaser spouse) who owns not less than $5,000,000 in investments, as defined by the Commission; … +- **한국어**: (51)(A) "Qualified purchaser"란 다음을 의미한다 — (i) SEC가 정하는 investments를 $5,000,000 이상 소유한 자연인(그 사람의 qualified purchaser 배우자와 함께 §80a-3(c)(7) 적용제외 issuer에 대한 공동·부부공동재산·기타 유사 공유지분을 보유한 자를 포함); … +- **쉬운 설명**: qualified purchaser의 정의(개인은 investments $5M 이상 등)는 D-01이 아니라 A-13이 판정한다. D-01은 "이 사람이 QP인가"를 다시 판단하지 않고, A-13의 QP claim이 붙은 보유자를 그저 머릿수로 센다. 여기 인용하는 이유는 책임경계를 명확히 하기 위함이다 — §3(c)(7) 유지에는 "전원 QP"(A-13)와 "인원 < 2,000"(D-01)이 둘 다 필요하며, D-01은 후자만 담당한다. QP는 반드시 AI인 것은 아니지만, BUIDL은 506(c)로 전원 AI가 별도로 요구되므로(A-03) §12(g)의 비-AI 500 분기는 항상 0이 된다. +- **PASS/FAIL 반영**: 배경 ✕ — 자격 판정은 A-13이 전담. D-01은 QP 여부에 관여하지 않는다. +- **ERC-3643 변환**: 자격 = A-13 claim.topic = QUALIFIED_PURCHASER; D-01 module은 그 claim 보유자를 카운트 대상으로 인식만 하고 자격을 재검증하지 않는다. + +### 3.11 Rule 12g3-2(a) + Rule 3b-4(c) — 외국 사모발행자(FPI) §12(g) 면제 (실제 BVI BUIDL의 선행 검토·중요) + +- **조항**: 17 C.F.R. §240.12g3-2(a) (FPI §12(g) 면제) · 17 C.F.R. §240.3b-4(c) (foreign private issuer 정의) — ecfr.gov +- **핵심 원문**: [12g3-2(a)] Securities of any class issued by any foreign private issuer shall be exempt from section 12(g) (15 U.S.C. 78l(g)) of the Act if the class has fewer than 300 holders resident in the United States. This exemption shall continue until the next fiscal year end at which the issuer has a class of equity securities held by 300 or more persons resident in the United States. [3b-4(b)] The term foreign issuer means any issuer which is a foreign government, a national of any foreign country or a corporation or other organization incorporated or organized under the laws of any foreign country. [3b-4(c)] The term foreign private issuer means any foreign issuer other than a foreign government except for an issuer meeting the following conditions as of the last business day of its most recently completed second fiscal quarter: (1) More than 50 percent of the issuer's outstanding voting securities are directly or indirectly held of record by residents of the United States; and [(2) any of: (i) a majority of executive officers or directors are U.S. citizens or residents; (ii) more than 50 percent of assets located in the United States; or (iii) business administered principally in the United States]. +- **한국어**: [12g3-2(a)] 외국 사모발행자(foreign private issuer)가 발행한 어느 class 증권은, 그 class의 미국 거주 보유자가 300명 미만이면 §12(g)에서 면제된다. 이 면제는 그 issuer가 지분증권 class를 미국 거주 300명 이상에게 보유하게 되는 다음 회계연도 종료일까지 지속된다. [3b-4(b)] "foreign issuer"란 외국 정부, 외국의 국민, 또는 외국 법률에 따라 설립·조직된 corporation 기타 조직인 모든 issuer를 말한다. [3b-4(c)] "foreign private issuer"란, 가장 최근 완료된 제2 회계분기의 마지막 영업일 기준 다음 조건에 해당하는 issuer를 제외한, 외국 정부가 아닌 모든 foreign issuer를 말한다 — (1) issuer 발행 의결권증권의 50% 초과를 미국 거주자가 직접·간접으로 record상 보유하고; 그리고 [(2) 다음 중 하나: (i) 임원·이사의 과반이 미국 시민·거주자이거나; (ii) 자산의 50% 초과가 미국 내에 있거나; (iii) 사업이 주로 미국에서 관리되는 경우]. +- **쉬운 설명**: 실제 BUIDL은 BVI 역외 펀드이므로, §12(g) 상한(< 2,000)을 논하기 전에 "이 issuer가 애초에 §12(g) 적용 대상인가"를 먼저 물어야 한다. Rule 3b-4(c)의 두 테스트로 FPI 여부를 본다 — (a) 지분(shareholder) 테스트: 미국 거주자가 의결권증권을 50% 이하로 보유하면 FPI; (b) 만약 미국 거주자가 50% 초과 보유하면, business-contacts 테스트(미국 임원·이사 과반/미국 자산 50% 초과/미국 주업)를 하나도 충족하지 않아야 FPI. FPI로 판정되면 Rule 12g3-2(a)에 따라 그 class의 **미국 거주 record holder가 300명 미만**인 한 §12(g) 자체에서 면제된다. 이 경우 D-01의 실제 구속 상한은 "held of record < 2,000"이 아니라 "**미국 거주 보유자 < 300**"으로 바뀐다. 미국 거주 보유자 산정은 Rule 12g3-2(a)/3b-4(c)가 §240.12g5-1의 record 산정 방식을 원용한다(즉 사람 단위·법인=1은 그대로, 다만 미국 거주자만 집계). 이 판단은 A-02(국적·거주)·Reg S 경로와 맞물리며, 실제 BUIDL에 "< 2,000 하나"를 단정할 수 없게 만드는 핵심 이유다. +- **PASS/FAIL 반영**: 조건부 ○ (FPI일 때 §12(g) 상한 자체를 대체) — Manifest가 issuer를 FPI로 표시하고 12g3-2(a) 면제가 유효하면, D-01은 §12(g) 2,000 상한 대신 "미국 거주 record holder < 300"(12g3-2(a))을 경계로 적용한다. FPI가 아니거나 12g3-2(a) 면제가 없으면 §12(g) 2,000 상한(§3.2)이 적용된다. 어느 쪽인지는 법률 자문으로 확정한다(OD-D01-3). +- **ERC-3643 변환**: manifest.issuerIsFPI(bool) + manifest.fpiExemption12g3_2a(bool) → true면 HolderCountModule이 usResidentHolderCount를 별도 집계하고 threshold_12g3_2a = 300 (enforce usResidentHolders < 300); 이때 §12(g) 2,000 분기는 비활성. 미국 거주 여부는 A-02(국적·거주) claim에서 입력. false면 §3.2 §12(g) 분기 활성. + + + +아래 각 행은 §5.2의 판정 분기 하나에 대응한다. reasonCode는 §6의 거절 코드와 일치한다. + +| # | 조건 | 결과 | reasonCode | 근거 조문 | +|---|------|------|-----------|-----------| +| P1 | 이 거래가 카운트에 영향 없음 (수취인이 이미 보유 > 0, 또는 수취인 ONCHAINID가 다른 지갑으로 이미 보유자) | PASS | — (COUNT_UNCHANGED) | Rule 12g5-1(a)(6)·(b)(3) + A-04 | +| P2 | 카운트 증가(신규 사람), §12(g) 활성, 결과 held-of-record < 2,000 그리고 결과 비-AI < 500 | PASS | — | Rule 12g-1(b)(1); §12(g)(1)(A) | +| F1 | 카운트 증가(신규 사람), §12(g) 활성, 결과 held-of-record ≥ 2,000 | FAIL | HOLDER_CAP_12G_TOTAL | §12(g)(1)(A)(i); Rule 12g-1(b)(1) | +| F2 | 카운트 증가(신규 비-AI), §12(g) 활성, 결과 비-AI ≥ 500 (총계는 < 2,000이라도) | FAIL | HOLDER_CAP_12G_NONAI | §12(g)(1)(A)(ii); Rule 12g-1(b)(1) | +| P3 | §12(g) 활성이나 자산게이트 미충족 (총자산 ≤ $10M) | PASS | — (ASSET_GATE_EXEMPT) | Rule 12g-1(a) | +| P6 | issuer가 FPI이고 12g3-2(a) 면제 유효, 결과 미국 거주 record holder < 300 | PASS | — (FPI_EXEMPT) | Rule 12g3-2(a)·3b-4(c) | +| F5 | issuer가 FPI, 결과 미국 거주 record holder ≥ 300 (다음 회계연도 말 §12(g) 노출) | FAIL(차단) | HOLDER_CAP_12G3_2A_US300 | Rule 12g3-2(a) | +| P4/F3 | §3(c)(1) Recipe 활성, 수익적 소유자 ≤ 100 (QVCF ≤ 250) → PASS / > 100 → FAIL | PASS/FAIL | HOLDER_CAP_3C1_100 | §3(c)(1); (A) look-through는 A-09 | +| P5/F4 | 506(b) 분기 활성, 501(e) 산정 매수인 ≤ 35(90일) → PASS / > 35 → FAIL | PASS/FAIL | HOLDER_CAP_506B_35 | Rule 506(b)(2)(i)·501(e) | +| C1 | 동일인 다중지갑 회피 적발 (A-04 클러스터) | 1명으로 합산 (신규 아님) | — (DEDUP_MERGED) | Rule 12g5-1(b)(3) | +| S1 | 매도인 post-transfer 잔액 = 0 (보유자 이탈) | 카운트 감산 (post-trade commit) | — (HOLDER_EXIT) | Rule 12g5-1(a) chapeau | + +- 실제 BVI BUIDL에서는 **§12(g) 적용 여부 자체가 FPI 선행 판단(P6/F5)에 달려 있다**. FPI 면제(12g3-2(a))가 유효하면 구속 경계는 F1(2,000)이 아니라 F5(미국 거주 300)로 바뀐다. FPI 면제가 없다는 전제에서 실제로 도달 가능한 주 FAIL 경로는 F1(< 2,000 초과)이다. **F2(비-AI ≥ 500)는 "전원 AI라 자동 0"이 아니다** — 비-AI 여부는 회계연도 종료 기준일 현재로 판단하므로(Rule 12g-1(b)(1)), Recipe가 secondary buyer에도 계속 AI를 요구하고 A-11/A-12와 연동해 status를 유지할 때에만 사실상 0에 가깝게 관리되는 정책적 결과다(§3.0.1·§3.2). F3·F4는 dormant, P3는 자산 >> $10M이라 미해당. +- 부등호 총정리: F1·F2·F5는 "≥"(도달 시 FAIL/차단 — 안전구간 < 2,000, < 500, 미국 거주 < 300). F3·F4는 ">"(초과 시 FAIL — 허용구간 ≤ 100, ≤ 35). 자산게이트(P3)는 §12(g) "exceeding $10,000,000"(> $10M이면 게이트 충족) / 12g-1 "not exceeding $10 million"(≤ $10M이면 면제). + +### 3.20 ERC-3643 변환 총정리 — Compliance Module 매핑 (claim.basis 해당 없음) + +D-01은 상태추적형이므로 A-13류의 claim.topic·claim.basis enum을 쓰지 않는다. 대신 ERC-3643/T-REX의 Modular Compliance에 결합하는 커스텀 모듈(HolderCountModule, IModule 구현)로 변환된다. 카운팅 단위는 지갑 주소가 아니라 IdentityRegistry의 ONCHAINID(사람)다. + +**모듈 상태 변수** + +| 변수 | 의미 | 근거 | +|------|------|------| +| holderCount | 현재 held-of-record 사람 수 (ONCHAINID 기준) | Rule 12g5-1(a) | +| nonAICount | 그중 비-AI 사람 수 (BUIDL = 0) | §12(g)(1)(A)(ii); A-03 | +| balanceByIdentity[ONCHAINID] | 사람별 합산 잔액 (신규/이탈 판정용) | Rule 12g5-1(a)(6)·(b)(3); A-04 | +| threshold_12g_total = 2000 | §12(g) 총 상한 (enforce `< 2000`) | §12(g)(1)(A)(i); Rule 12g-1(b)(1) | +| threshold_12g_nonAI = 500 | §12(g) 비-AI 상한 (enforce `< 500`) | §12(g)(1)(A)(ii) | +| threshold_3c1 = 100 / QVCF 250 | §3(c)(1) 상한 (enforce `<= 100`) — dormant | §3(c)(1) | +| threshold_506b = 35 | 506(b) 매수인 상한/90일 (enforce `<= 35`) — dormant | Rule 506(b)(2)(i) | +| assetGateMet | 총자산 > $10M 여부 (true면 §12(g) 상한 활성) | §12(g)(1)(A); Rule 12g-1(a) | +| active | 펀드 미등록(§80a-8) 확인 시 true | §12(g)(2)(B) | +| issuerIsFPI / fpiExemption12g3_2a | issuer가 FPI이고 12g3-2(a) 면제 유효 여부 (true면 §12(g) 2,000 대신 미국 거주 300 적용) | Rule 3b-4(c); 12g3-2(a) | +| usResidentHolderCount / threshold_12g3_2a = 300 | FPI 경로의 미국 거주 record holder 수·상한 (enforce `< 300`) | Rule 12g3-2(a); A-02 | +| legalClassId | 이 token이 표창하는 법적 equity security class 식별자 (Manifest 지정) — token 컨트랙트와 1:1이 아닐 수 있음 | §12(g)(5) "substantially similar rights and privileges" | + +**IModule 훅 → 조문 매핑** + +| 훅 | 시점 | 역할 | 조문 | +|----|------|------|------| +| moduleCheck(from, to, value, compliance) | pre-trade 게이트 | 수취인이 신규 사람인지(ONCHAINID dedup) 판정 후, 신규면 결과 카운트가 활성 상한 경계를 넘는지 검사 → bool | §12(g)(1); Rule 12g-1; 12g5-1 | +| moduleTransferAction(from, to, value) | post-trade commit | 수취인이 0→양수면 holderCount 증가, 매도인이 양수→0이면 감산 (ONCHAINID 단위) | Rule 12g5-1(a) | +| moduleMintAction(to, value) | 발행 commit | 신규 보유자면 증가 | §12(g)(1); 12g5-1(a) | +| moduleBurnAction(from, value) | 상환 commit | 잔액 0 도달 시 감산 (§12(g)(4) 하향 인지) | §12(g)(4) | + +**reasonCode enum**: HOLDER_CAP_12G_TOTAL · HOLDER_CAP_12G_NONAI · HOLDER_CAP_12G3_2A_US300 · HOLDER_CAP_3C1_100 · HOLDER_CAP_506B_35 (§6·§3.19와 일치). + +**dedup·회피 정정**: 지갑↔ONCHAINID 매핑은 IdentityRegistry(A-04)에서 받는다. 동일인 다중지갑은 Rule 12g5-1(b)(3)에 근거해 1로 합산하며, 회피 적발 시 forcedTransfer()/recovery로 정정하고 A-04에 red-flag를 남긴다. (자격판정과 반대로, 법인 지갑은 look-through 없이 1로 센다 — Rule 12g5-1(a)(2).) + +**class 매핑 주의(단정 금지)**: 구현상 하나의 ERC-3643 token contract를 하나의 class로 매핑할 수 있으나, 법적으로는 §12(g)(5)의 "securities ... of substantially similar character and the holders of which enjoy substantially similar rights and privileges" 기준으로 그 token이 표창하는 fund interest가 실질적으로 동일한 class인지 별도 확인해야 한다. 같은 contract 안에 series/class가 섞이거나, 같은 fund interest가 여러 token wrapper로 존재하면 Manifest에서 legalClassId로 legal class mapping을 별도 지정해 카운트를 class 단위로 분리한다(B-01 연계, OD-D01-6). + +**ONCHAINID = 법적 명부의 mirror(단정 금지)**: D-01의 on-chain ONCHAINID counter는 법적 record-holder 명부의 **기술적 mirror**로 설계된다. 최종 법적 기준은 Rule 12g5-1(a)이 말하는 "records of security holders maintained by or on behalf of the issuer" — 즉 issuer 또는 transfer agent(BUIDL의 경우 Securitize)가 유지하는 security holder record다. 따라서 ONCHAINID counter와 transfer agent ledger의 정기 reconciliation이 필요하며, 불일치 시 법적 명부가 우선한다(§4.2·§11·OD-D01-1). + +--- + +## §4. 입력 사실 (Input Facts) + +### 4.1 판정에 필요한 데이터 + +| 입력 | 의미 | 출처 | +|------|------|------| +| currentHolderCount | 현재 held-of-record 사람 수 (ONCHAINID 기준) | 모듈 상태 (on-chain) | +| balanceByIdentity[ONCHAINID] | 사람별 합산 잔액 | 모듈 상태 + IdentityRegistry | +| to_currentBalance | 수취인(및 그 ONCHAINID)의 현재 보유량 | on-chain balanceOf + A-04 매핑 | +| from_postBalance | 매도인의 거래 후 잔액 (0이면 이탈) | 거래 파라미터 + on-chain | +| to_isNewPerson | 수취인 ONCHAINID가 기존 보유자가 아닌가 | A-04 (지갑↔사람 클러스터) | +| currentNonAICount | 비-AI 보유자 수 (BUIDL = 0) | A-03 claim 집계 | +| totalAssetsUSD | issuer 총자산 (자산게이트) | Manifest (B-01) / issuer 보고 | +| activeCaps | 어느 상한이 활성인가 (§12(g)/§3(c)(1)/506(b)) | Recipe + Manifest (B-01) | +| capValues | 상한 임계값·정책 buffer | Manifest (B-01) | +| fundRegistered80a8 | 펀드가 등록 투자회사인가 (false면 §12(g) 활성) | Manifest (B-01) | + +### 4.2 데이터 출처와 책임경계 + +- **카운터 자체**는 on-chain 모듈 상태다 — 매 거래 commit에서 갱신되며 on-chain 보유자에 대해 기술적으로 authoritative하다. 다만 이는 **법적 명부 자체가 아니라 그 mirror**다(아래 법적 유의). +- **지갑↔사람 매핑**은 A-04(IdentityRegistry/ONCHAINID)가 공급한다. D-01은 이 매핑을 신뢰해 사람 단위로 센다 — 신원 판정을 재수행하지 않는다. +- **AI 상태**(비-AI 카운트용)는 A-03의 claim에서 오며, 기준일 현재 status 유지·신선도는 A-11, 반대정보는 A-12가 공급한다. **자격(QP/AI) 판정 자체는 D-01의 일이 아니다.** +- **거주·국적**(FPI 경로의 미국 거주 보유자 산정용)은 A-02에서 온다. +- **상한값·활성 여부·자산게이트·FPI 지위·legalClassId**는 Manifest에서 오며 B-01(신상카드 정합)이 Manifest와 실제 설정의 일치를 보증한다. +- **법적 유의(중요)**: Rule 12g5-1(a)상 "held of record"의 기준은 "records of security holders maintained by or on behalf of the issuer" — 즉 issuer 또는 transfer agent(BUIDL의 경우 Securitize)가 유지하는 법적 security holder record다. **D-01의 on-chain ONCHAINID counter는 이 법적 명부의 기술적 mirror로 설계되며, 최종 법적 기준은 그 명부다.** 따라서 ONCHAINID counter와 transfer agent ledger의 정기 reconciliation이 필요하고, 불일치 시 법적 명부가 우선한다(OD-D01-1, §11·§12). + +### 4.4 갈래별 필수 확인 항목 (전체 표) + +공통 행(모든 갈래) + 갈래별 항목. "예시"가 아니라 활성 상한별로 반드시 확인해야 하는 항목 전체다. + +| 갈래 | 공통 필수 | 갈래별 필수 | +|------|-----------|-------------| +| §12(g) (R3, BUIDL 활성) | ① 지갑→ONCHAINID dedup(A-04) ② 수취인 신규 사람 여부 ③ 매도인 이탈 여부 | ① 결과 held-of-record < 2,000 ② 결과 비-AI < 500 (A-03; BUIDL=0) ③ 자산게이트(총자산 > $10M → 상한 활성) ④ 펀드 미등록(§80a-8) | +| §3(c)(1) (dormant) | 상동 | ① 수익적 소유자 ≤ 100 (QVCF ≤ 250) ② (A) 10%+ 투자회사 보유자 look-through (A-09) | +| 506(b) 발행 (dormant) | 상동 | ① 501(e) 산정 매수인 ≤ 35 ② 90역일 rolling window ③ 501(e) 제외(AI·친족·법인 뭉침) 적용 | + +--- + +## §5. 판정 로직 (Decision Logic) + +### 5.1 개념 — STATEFUL 2단계 + +D-01은 증명서를 확인하는 정적 게이트가 아니라, 누적 상태(카운터)를 유지하며 매 거래에서 두 단계를 수행하는 상태추적 부품이다. + +1. **pre-trade 게이트 (moduleCheck)**: 이 거래가 새 보유자를 추가하는가? 추가한다면 결과 카운트가 활성 상한 경계를 넘는가? 넘으면 거절. +2. **post-trade commit (moduleTransferAction/Mint/Burn)**: 거래 성사 후 카운터를 갱신 — 신규 보유자 진입 시 +1, 매도인 잔액 0 도달 시 −1. + +STATEFUL인 이유: 판정이 "지금까지 누적된 보유자 수"에 의존하고, 각 거래가 그 공유 상태를 변경한다. + +**법문 트리거 vs 운영 게이트(중요).** 법문상 §12(g) 등록의무는 실시간이 아니라 **회계연도 종료일 기준**으로 발생한다 — "총자산 $10M 초과 + 해당 class 2,000명(또는 비-AI 500명) held of record인 최초 회계연도 종료일" 후 120일 내 등록(§12(g)(1)), 그리고 Rule 12g-1은 "most recent fiscal year의 마지막 날" 기준으로 판단한다(§3.2·§3.4). 따라서 D-01이 거래 직전에 count 도달을 차단하는 것은 "2,000번째 보유자 발생 즉시 등록의무 발생"을 구현한 것이 아니라, **회계연도 말에 요건을 충족해 등록위험(사모 구조 붕괴)에 빠지는 것을 예방하기 위한 보수적 운영 게이트**다. 이 구분을 문서·테스트 전반에서 유지한다(§7 T2·T7은 "즉시 위법"이 아니라 "운영상 차단"으로 읽는다). + +### 5.2 판정 순서 (싸고 탈락 잘 되는 검사·선행조건 먼저) + +증명서형(A-13)의 "존재 → 진위 → 신선도 → 갈래"와 달리, 상태추적형 D-01의 순서는 다음이다. + +1. **관련성**: 이 거래가 카운트에 영향을 주는가? 수취인이 이미 보유(> 0)면 신규 보유자 아님 → 카운트 불변 → **즉시 PASS**(가장 싸고 흔한 경로, P1). +2. **신원 dedup**: 수취인 지갑을 ONCHAINID로 매핑(A-04). 그 사람이 다른 지갑으로 이미 보유자면 신규 아님 → PASS(C1/DEDUP). +3. **활성 상한 결정**: Recipe·Manifest로 어느 상한이 켜지는지 결정(§12(g)/§3(c)(1)/506(b)). 펀드 미등록·자산게이트 확인. +4. **경계 판정**: 신규 사람이면 결과 카운트를 활성 상한 경계와 비교 — §12(g): < 2,000 그리고 < 500(비-AI); §3(c)(1): ≤ 100; 506(b): ≤ 35. 하나라도 위반이면 FAIL + reasonCode. +5. **[post-trade] commit**: 성사 후 카운터 갱신(+1 신규 / −1 이탈). look-through cascade가 필요한 §3(c)(1)(A) 집계는 이 단계에서 A-09 결과를 반영(가장 무거운 계산은 나중). + +### 5.3 경계 매트릭스 (부등호 규율) + +| 상한 | 연산 | 트리거(FAIL) | 안전구간(PASS) | +|------|------|--------------|----------------| +| §12(g) 총계 | held-of-record | ≥ 2,000 | < 2,000 (≤ 1,999) | +| §12(g) 비-AI | 비-AI 보유자 | ≥ 500 | < 500 (≤ 499) | +| §3(c)(1) | 수익적 소유자 | > 100 (≥ 101) | ≤ 100 (QVCF ≤ 250) | +| 506(b) | 501(e) 매수인/90일 | > 35 (≥ 36) | ≤ 35 | +| 자산게이트 | 총자산 | > $10M → 상한 활성 | ≤ $10M → 12g-1(a) 면제 | + +의사코드 (§12(g) 활성, BUIDL 기준): + +``` +moduleCheck(from, to, value): + id = identityRegistry.ONCHAINID(to) # A-04 + if balanceByIdentity[id] > 0: # 관련성 + return PASS # 신규 아님 → 카운트 불변 (P1) + if not assetGateMet: # 자산 ≤ $10M + return PASS # 12g-1(a) 면제 (P3) + resultingTotal = holderCount + 1 + if resultingTotal >= threshold_12g_total: # 2000 + return FAIL(HOLDER_CAP_12G_TOTAL) # F1 + if not A03.isAI(id): + if nonAICount + 1 >= threshold_12g_nonAI: # 500 + return FAIL(HOLDER_CAP_12G_NONAI) # F2 + return PASS # P2 + +moduleTransferAction(from, to, value): # post-trade commit + idTo = ONCHAINID(to); idFrom = ONCHAINID(from) + if balanceByIdentity[idTo] == 0 and value > 0: + holderCount += 1 + if not A03.isAI(idTo): nonAICount += 1 + apply balances... + if balanceByIdentity[idFrom] == 0: # 이탈 + holderCount -= 1 + if not A03.isAI(idFrom): nonAICount -= 1 +``` + +--- + +## §6. 거절·예외 처리 (Rejection & Exception) + +### 6.1 거절 코드 + +| reasonCode | 발동 조건 | 근거 | +|-----------|-----------|------| +| HOLDER_CAP_12G_TOTAL | 결과 held-of-record ≥ 2,000 | §12(g)(1)(A)(i); 12g-1(b)(1) | +| HOLDER_CAP_12G_NONAI | 결과 비-AI ≥ 500 | §12(g)(1)(A)(ii); 12g-1(b)(1) | +| HOLDER_CAP_3C1_100 | §3(c)(1) 활성 시 수익적 소유자 > 100 | §3(c)(1) | +| HOLDER_CAP_506B_35 | 506(b) 활성 시 매수인 > 35/90일 | 506(b)(2)(i)·501(e) | + +### 6.2 예외·해소 경로 — 구조적 게이트 (증명서 cure 없음) + +증명서형 부품은 "새 claim을 발급받아 통과"라는 off-chain cure가 있지만, D-01의 상한 초과는 **구조적**이라 개별 서류로 풀 수 없다. 2,000번째 보유자를 새로 들일 수는 없다. 해소는 다음뿐이다. + +- **기존 보유자에게의 이전**은 자유롭다 — 신규 보유자가 아니므로 카운트가 늘지 않는다(P1). 유동성은 기존 보유자 집합 안에서 계속 돈다. +- **슬롯 확보**: 어떤 보유자가 잔액 0으로 상환·전량 매도해 이탈하면(S1) 카운트가 감산되어 자리가 난다. 운영자는 대기열(waitlist)로 신규 진입을 조율한다(§11). +- **회피 정정**: 동일인이 지갑을 쪼개 머릿수를 위장한 경우는 애초에 신규가 아니므로(C1) 카운트에 반영되지 않으며, 적발 시 forcedTransfer()/recovery로 정정한다(Rule 12g5-1(b)(3), A-04). +- **정책 buffer**: 펀드는 법정 트리거(2,000)보다 낮은 값(예: 1,900)에서 신규 진입을 멈추도록 자율 설정할 수 있다. 이 buffer는 정책 선택이지 법정 수치가 아니다 — 법정 경계는 < 2,000이며, buffer는 우발적 초과에 대한 안전여유다. + +### 6.3 정책 vs 법정 구분 (중요) + +- **법정**: 2,000·500·$10M(§12(g), Rule 12g-1), 100(§3(c)(1)), 35(506(b))은 조문상 확정된 수치다. +- **정책**: (a) 트리거보다 얼마나 아래에서 멈출지의 buffer, (b) BUIDL에서 §3(c)(1) 100인 상한을 애초에 켤지 여부(BUIDL은 §3(c)(7)이라 꺼짐), (c) 대기열·상환 우선순위는 운영 정책이다. +- 이 구분은 A-11(claim freshness) 문서의 "freshness cap은 정책 proxy이지 법정 수치가 아니다"와 대칭이나 방향이 반대다 — D-01의 상한은 법정이고 buffer만 정책이다. + +--- + +## §7. 테스트 케이스 (통과·거절·경계) + +| # | 시나리오 | 기대 | reasonCode | +|---|----------|------|-----------| +| T1 | §12(g) 활성, count 1,998, 신규 사람 진입 → 1,999 | PASS | — | +| T2 (경계) | count 1,999, 신규 사람 진입 → 2,000 도달 | FAIL | HOLDER_CAP_12G_TOTAL | +| T3 | count 1,999, 기존 보유자에게 이전 (신규 아님) | PASS | — (P1) | +| T4 | 보유자(지갑 A)가 지갑 B로 추가 수취 — 동일 ONCHAINID | PASS (카운트 불변) | — (C1/DEDUP) | +| T5 | 보유자가 전량 매도 → 잔액 0 → 이탈 | PASS + 카운트 −1 | — (S1, 슬롯 확보) | +| T6 (경계) | 자산게이트: 총자산 정확히 $10M, 신규 진입 → 2,001 | PASS | — (P3, 12g-1(a) 면제) | +| T7 (경계) | 자산 $10,000,001(> $10M), count 1,999 → 2,000 | FAIL | HOLDER_CAP_12G_TOTAL | +| T8 (§3(c)(1)) | 수익적 소유자 100 → 101 (경계: 100은 PASS, 101은 FAIL) | 100 PASS / 101 FAIL | HOLDER_CAP_3C1_100 | +| T9 (506(b)) | 90일 내 비-AI 매수인 35 → 36 (AI 매수인은 501(e)로 불계상) | 35 PASS / 36 FAIL | HOLDER_CAP_506B_35 | +| T10 (비-AI, 가정) | §12(g) 활성, 비-AI 499 → 500 (총계는 < 2,000) | FAIL | HOLDER_CAP_12G_NONAI | +| T11 (동시성) | 두 거래가 각각 count 1,999를 보고 진입 시도 | 직렬화로 1건만 PASS, 1건 FAIL | HOLDER_CAP_12G_TOTAL | +| T12 (FPI 경계) | issuer가 FPI+12g3-2(a) 유효, 미국 거주 record holder 299 → 300 (전체 held of record는 2,000 미만이라도) | 299 PASS / 300 FAIL(차단) | HOLDER_CAP_12G3_2A_US300 | +| T13 (비-AI 기준일) | 발행 시 AI였던 보유자가 기준일에 AI status 상실 → 비-AI count에 계상 | 비-AI count +1 (자동 0 아님) | (해당 시 HOLDER_CAP_12G_NONAI) | + +읽는 법: T2·T7의 "count 2,000 도달 → FAIL"은 법문상 즉시 등록의무 발생이 아니라, 회계연도 말 등록위험을 막는 **보수적 운영 차단**이다(§5.1). BUIDL-like에서 자주 발생하는 경로는 T1·T2·T3·T4·T5·T7·T11이다. T8·T9는 dormant, T6은 자산 >> $10M이라 미해당. **T10(비-AI)은 "전원 AI라 자동 0"이 아니다** — 비-AI는 기준일 현재 status로 판단하므로(Rule 12g-1(b)(1)), Recipe가 계속 AI를 요구·재검증할 때만 사실상 0에 가깝다. 또한 실제 BVI BUIDL이 FPI라면 T2/T7의 2,000 경계 대신 "미국 거주 record holder < 300"(12g3-2(a)) 경계가 적용되므로, FPI 선행 판단(§3.11)에 따라 활성 테스트가 달라진다. + +--- + +## §8. 검증 패턴 — 상태추적형 (State-Tracking Pattern) + +### 8.1 증명서형과의 대비 + +A-13·A-03은 증명서형(Pattern B)이다 — off-chain에서 발급된 signed claim의 존재·발급자·서명·만료를 확인하는 정적 판정이며, 판정 결과가 다른 거래의 상태에 의존하지 않는다(STATELESS). D-01은 다르다. "보유자가 몇 명인가"는 특정 개인의 속성이 아니라 과거 모든 거래가 누적된 집계량이며, 매 거래가 그 집계를 바꾼다. 그래서 D-01은 증명서를 보지 않고 on-chain 누적 카운터를 유지·갱신한다. + +### 8.2 2단계 구조 (게이트 + commit) + +- **pre-trade 게이트(moduleCheck)**: 결과 카운트가 경계를 넘는지 판정. 순수 read + 계산. +- **post-trade commit(moduleTransferAction/Mint/Burn)**: 성사된 거래를 카운터에 반영(write). 신규 진입 +1, 이탈 −1. + +Timing 분류상 "pre-trade 게이트 + post-trade commit / STATEFUL"이며, 부착 매트릭스의 D-01 행(post-trade commit·STATEFUL)과 일치한다. + +### 8.3 원자성·경쟁조건 (STATEFUL 특유 위험) + +카운터는 공유 가변 상태이므로 원자성이 필수다. 위험 예: 서로 다른 두 거래가 각각 현재 count 1,999를 읽고 둘 다 "1,999 → 2,000은 아직 < 2,000 아님… 아니 1,999+1=2,000"을 계산하는 시점 문제, 또는 count 1,998에서 두 신규 진입이 동시에 통과해 2,000으로 넘어가는 경쟁. 방지책: + +- **직렬화**: 상한 근처 거래의 check-and-commit을 ComplianceRouter에서 원자적으로 처리하고 nonReentrant로 재진입을 차단한다(프로젝트 note-21 항목과 정합). +- **commit 시 재검증**: 게이트 통과와 commit 사이에 상태가 바뀔 수 있으면, commit 시점에 경계를 다시 확인하고 초과면 revert. +- **멱등성·순서**: 같은 거래의 commit이 중복 적용되지 않도록 하고, 배치 처리 시 순서 의존을 제거한다. +- **finality**: 온체인 재구성(reorg) 가능성이 있는 환경에서는 확정성 이후 카운터를 신뢰한다. + +### 8.4 글로벌 게이트가 아님 + +D-01은 A-01·A-02 같은 transaction-level 글로벌 게이트가 아니다. 특정 자산의 특정 Recipe(주로 R3)에 부착되는 부품이며, Manifest가 그 자산에 대해 어느 상한을 켤지 지정한다. + +--- + +## §9. Coordination — 다른 부품과의 협응 + +| 상대 부품 | 관계 | 협응 내용 | +|-----------|------|-----------| +| A-04 신원중복 | 강한 의존 (hard) | 지갑↔사람(ONCHAINID) 매핑 공급. D-01은 지갑이 아니라 사람을 센다 — Rule 12g5-1(a)(6)·(b)(3)의 on-chain 구현 기반. A-04 없이는 카운팅 단위가 성립하지 않는다. | +| A-13 QP | 상보 | A-13은 각 매수인을 QP로 자격판정(per-tx, pre-trade), D-01은 보유자 수를 집계(aggregate, post-trade). §3(c)(7) 유지에는 "전원 QP"(A-13) + "인원 < 2,000"(D-01) 둘 다 필요. | +| A-03 AI | 조건부 | §12(g) 비-AI 500 분기용 AI 상태 공급. BUIDL은 506(c)로 전원 AI라 비-AI=0. | +| A-09 look-through | 조건부·방향 반대 | §3(c)(1)(A)의 수익적 소유자 집계에서 10%+ 투자회사 보유자를 뚫을 때 A-09 재사용. 단 §12(g) 카운팅은 원칙적으로 look-through를 하지 않고 법인=1로 센다(Rule 12g5-1(a)(2)); 예외는 (b)(3) 회피뿐. 즉 자격판정(뚫음)과 카운팅(안 뚫음)은 방향이 반대다. | +| B-01 manifest 정합 | 강한 의존 (R3 co-resident) | 상한값·활성 여부(§12(g)/§3(c)(1)/506(b))·자산게이트·정책 buffer·펀드 등록여부를 Manifest에서 공급. B-01이 Manifest와 실제 설정의 일치를 보증. | + +**책임경계 요약**: D-01 = 머릿수 집계·상한 게이트 전담. 자격(QP/AI) = A-13/A-03. 신원(사람↔지갑) = A-04. look-through 계산엔진 = A-09(§3(c)(1) 분기 한정). 설정 정합 = B-01. D-01은 자격·신원을 재판정하지 않고 그 결과를 입력으로 받아 세기만 한다. + +--- + +## §10. 3-Layer Solution — Element / Recipe / Manifest / Operator 매핑 + +D-01은 프로젝트의 4-Layer 아키텍처(법률을 코드로 번역) 안에서 다음처럼 배치된다. + +- **법 계층(Layer 1→2→3)**: Layer 1 = §3(c)(7)(무상한)·§12(g)(2,000/500/$10M)·§3(c)(1)(100); Layer 2 = Rule 12g-1(< 2,000)·12g5-1(카운팅)·506(b)/501(e)(35); Layer 3 = JOBS Act Title V/VI 이행 release(§12(g) 문턱 500→2,000 상향)·자산문턱 연혁($1M→$10M, Release 34-37157). +- **Element (D-01)**: 카운터 + pre-trade 게이트 + post-trade commit. "머릿수가 경계를 넘는가"만 판정. +- **Recipe**: R3(§3(c)(7))가 D-01을 §12(g) 상한으로 부착하되, issuer가 FPI면 §12(g) 2,000 대신 12g3-2(a) 미국 거주 300 경계로 전환. §3(c)(1) 펀드 Recipe는 ≤ 100으로, R1의 506(b) 분기는 ≤ 35로 부착. 어느 상한을 쓸지는 Recipe + FPI 선행 판단이 결정. +- **Manifest**: 그 자산에 대해 activeCaps(§12(g)/12g3-2(a)/§3(c)(1)/506(b))·capValues·정책 buffer·assetGateMet·fundRegistered80a8·issuerIsFPI·fpiExemption12g3_2a·**legalClassId**를 지정. 특히 token 컨트랙트가 곧 legal class라고 단정하지 않고, legalClassId로 실제 equity security class(§12(g)(5) substantially-similar 기준)를 명시해 카운트를 class 단위로 분리한다. B-01이 정합 보증. +- **Operator**: 상한 접근 감시·대기열·상환 조율·정책 buffer 설정·회피 검토(§11). + +![그림 5.0 — 런타임 검증 흐름: moduleCheck(관련성→dedup→상한→경계) + post-trade commit (개발자용)](img/fig50_runtime_flow.png) + +--- + +## §11. Operator Layer — Frontend·Off-chain 운영 + +상태추적형 부품은 순수 온체인 게이트만으로 충분하지 않고 운영 감시가 붙는다. + +- **대시보드**: 현재 held-of-record 수·상한 대비 여유(headroom)·**기준일 현재 비-AI 부분계**·(FPI인 경우) 미국 거주 보유자 수·상한 접근 경보(예: 2,000 상한이면 1,900, 300 상한이면 270 도달 시 alert). +- **슬롯 관리**: 상한 근처에서 신규 진입 대기열(waitlist) 운용, 상환·이탈로 확보되는 슬롯과 매칭. +- **정책 buffer 설정**: 법정 트리거(2,000 또는 FPI 300)보다 낮은 운영 상한을 설정·조정(우발적 초과·회계연도 말 등록위험 방지). +- **회피 검토**: 동일 실소유자로 의심되는 다중지갑 클러스터를 A-04에 flag(Rule 12g5-1(b)(3) 대응). 필요 시 forcedTransfer/recovery 승인. +- **명부 정합(중요)**: 온체인 ONCHAINID 카운트는 법적 명부의 mirror이므로, transfer agent(Securitize)가 유지하는 법적 security holder record와 정기적으로 대사(reconciliation)한다. 불일치 시 법적 명부를 기준으로 카운터를 보정한다(Rule 12g5-1(a), OD-D01-1). +- **비-AI status 유지**: secondary buyer의 AI status를 A-11(freshness)·A-12(반대정보)와 연동해 기준일 기준으로 재검증, 비-AI count를 실시간 추적(정책상 0 유지 목표). +- **등록 진입 대응(예외)**: 만에 하나 상한을 넘겨 §12(g) 등록회사가 된 경우, 하향 이탈(§12(g)(4) < 300)·등록·보고 대응(원치 않는 경로). + +--- + +## §12. Open Issues + +- **OD-D01-1 (명부 동치성·중요)**: Rule 12g5-1(a)의 법적 "records of security holders maintained by or on behalf of the issuer"는 transfer agent(BUIDL의 경우 Securitize)가 유지하는 명부다. D-01의 on-chain ONCHAINID counter는 이 명부의 mirror로 설계되나, 양자의 동치성·대사(reconciliation) 절차·불일치 시 우선순위(법적 명부 우선)를 확정해야 한다. 변호사·transfer agent 확인 사안. +- **OD-D01-2 (정책 buffer 값)**: 법정 트리거(2,000, FPI면 300)보다 얼마나 아래에서 신규 진입을 멈출지 — 사업·법무 결정. 법정 경계는 < 2,000/< 300, buffer는 정책. +- **OD-D01-3 (역외 펀드 §12(g) 적용범위·FPI·최우선 검토)**: 실제 BUIDL은 BVI 역외 펀드다. (a) Rule 3b-4(c)상 foreign private issuer 해당 여부(미국 거주 의결권 ≤ 50% shareholder test / business-contacts test), (b) 해당 시 Rule 12g3-2(a)의 "미국 거주 record holder < 300" 면제 성립 여부와 그 경우 구속 상한이 2,000이 아니라 300으로 전환되는 점, (c) 미국 거주 보유자 산정 방식(12g3-2(a)가 §12g5-1 원용), (d) §12(g)의 주간통상 연결점 적용 여부가 모두 미결이며 D-01 상한 활성화의 **선행 판단**이다. A-02(국적·거주)·Reg S 경로와 맞물린다. 변호사 위임 사안(최우선). +- **OD-D01-4 (§3(c)(1)(A) look-through 재사용)**: §3(c)(1) Recipe가 활성일 때 (A)의 10%+ 투자회사 보유자 look-through 집계를 A-09 엔진으로 어떻게 정확히 전개하는지의 depth·경계. BUIDL(§3(c)(7))에선 dormant. +- **OD-D01-5 (분류 확인)**: BUIDL에서 §3(c)(1) 100인 상한이 dormant라는 분류(BUIDL은 §3(c)(7))를 canonical 매트릭스에 대해 최종 확인. +- **OD-D01-6 (class 매핑·B-01 연계)**: "ERC-3643 token contract 하나 = equity security class 하나"는 구현 가정이다. §12(g)(5)의 "substantially similar rights and privileges" 기준으로 token이 표창하는 fund interest의 legal class를 확정하고, 한 contract에 series/class가 섞이거나 동일 interest가 여러 wrapper로 존재할 때 Manifest legalClassId로 class를 분리하는 규칙을 B-01과 함께 정해야 한다. +- **OD-D01-7 (비-AI 기준일·continuing-AI 정책)**: Rule 12g-1(b)(1)이 비-AI를 판매 시점이 아니라 기준일 현재로 판단하므로, 506(c) 발행만으로 비-AI count가 영구히 0이 되지 않는다. secondary buyer에 대한 continuing-AI 요구를 계약·Recipe로 둘지, A-11(freshness)·A-12(반대정보)와 어떻게 연동해 기준일 status를 유지·재검증할지를 확정해야 한다. + +--- + +## §13. 파일명 + +- Element 문서: `D-01_보유자수카운터.md` (본 문서) +- 빌드 산출물: `D-01_보유자수카운터.docx` (pandoc + Noto Sans CJK KR 패치) +- 위치: 산출물/elements/ (spec-sheets/elements/) + +--- + +## 부록 A — 관련 조문·URL 빠른참조 + +| 조문 | 인용 | 1차 출처 | +|------|------|----------| +| ICA §3(c)(7) | 15 U.S.C. §80a-3(c)(7) | uscode.house.gov | +| ICA §3(c)(1) | 15 U.S.C. §80a-3(c)(1) | uscode.house.gov | +| ICA §2(a)(51) QP | 15 U.S.C. §80a-2(a)(51) | uscode.house.gov | +| 거래소법 §12(g)(1)(2)(4)(5) | 15 U.S.C. §78l(g) | uscode.house.gov | +| Rule 12g-1 | 17 C.F.R. §240.12g-1 | ecfr.gov | +| Rule 12g5-1 | 17 C.F.R. §240.12g5-1 | ecfr.gov | +| Rule 506(b)·506(c) | 17 C.F.R. §230.506 | ecfr.gov | +| Rule 501(e) | 17 C.F.R. §230.501 | ecfr.gov | + +## 부록 B — BUIDL 적용 노트 + +BUIDL은 Rule 506(c) + ICA §3(c)(7), 최소투자 $5M, BVI 역외 펀드로 공시되어 있다. D-01 관점의 요지는 두 단계다. **선행 단계 — FPI 검토(최우선)**: 실제 BUIDL은 BVI 역외 펀드이므로 Rule 3b-4(c)상 foreign private issuer일 가능성이 크고, 그렇다면 Rule 12g3-2(a)에 따라 그 class의 미국 거주 record holder가 300명 미만인 한 §12(g)에서 면제된다 → 이 경우 구속 상한은 "held of record < 2,000"이 아니라 "**미국 거주 보유자 < 300**"이다. 따라서 실제 BUIDL에 2,000 상한이 곧바로 적용된다고 단정하지 않는다(OD-D01-3). **§12(g) 적용 전제 단계**(미국 issuer이거나 FPI 면제가 없는 경우): (1) 자산이 $10M을 크게 초과하므로 Rule 12g-1(a)의 자산 면제 불가; (2) 따라서 held of record < 2,000 그리고 비-AI < 500이 §12(g) 방어선; (3) 다만 비-AI 판단은 판매 시점이 아니라 회계연도 종료 기준일 현재이므로(Rule 12g-1(b)(1)), 506(c) 발행만으로 비-AI가 영구히 0이 되지는 않는다 — Recipe의 continuing-AI 요구·A-11/A-12 연동으로 관리되는 정책적 결과다(OD-D01-7); (4) §3(c)(1) 100인·506(b) 35인 상한은 dormant; (5) §12(g) 트리거는 실시간이 아니라 최초 회계연도 종료일 + 120일 기준이며, D-01의 실시간 pre-trade 게이트는 등록위험 예방용 보수적 운영 게이트다. 실무 카운팅 단위는 ONCHAINID(사람)이며, 이는 Securitize 법적 명부의 mirror로서 정기 대사가 전제된다(OD-D01-1). token↔legal class 매핑은 legalClassId로 확정한다(OD-D01-6). + +## 부록 C — 용어·부등호 정정 노트 + +- **2,000은 §3(c)(7)이 아니라 §12(g)에서 온다.** §3(c)(7)에는 인원 상한이 없다. D-01이 §3(c)(7) 펀드에서 세는 이유는 §12(g)(공개회사 등록 트리거)이며, §12(g)(2)(B)의 등록투자회사 면제가 미등록 §3(c)(7) 펀드엔 적용되지 않기 때문이다. +- **부등호 방향이 상한마다 다르다.** §12(g)/12g-1: "fewer than 2,000"·"fewer than 500" → 안전구간 < 2,000, < 500(도달 시 트리거). §3(c)(1): "not more than 100" → 허용구간 ≤ 100(초과 시 위반). 506(b): "no more than 35" → ≤ 35. 자산: §12(g) "exceeding $10,000,000"(> $10M 게이트) / 12g-1 "not exceeding $10 million"(≤ $10M 면제). +- **카운팅은 look-through를 하지 않는다(자격판정과 반대).** §12(g)의 held of record는 법인을 1로 센다(12g5-1(a)(2)). 자격판정(A-13/A-09)은 법인을 뚫는다. 예외는 회피목적 보유(12g5-1(b)(3)). +- **머릿수 ≠ 자격.** D-01은 센다. QP는 A-13, AI는 A-03, 신원은 A-04, 거주·국적은 A-02가 판정한다. +- **실제 BVI BUIDL엔 2,000이 곧바로 적용되지 않는다(FPI 선행).** FPI(Rule 3b-4(c))라면 Rule 12g3-2(a)로 미국 거주 record holder < 300이 구속 경계가 된다. §12(g) 2,000은 미국 issuer이거나 FPI 면제가 없는 전제에서만 직접 적용된다(OD-D01-3, §3.11). +- **§12(g) 트리거는 실시간이 아니라 회계연도 말 기준이다.** 등록의무는 자산·인원 요건을 충족한 최초 회계연도 종료일 + 120일 구조이고, Rule 12g-1도 "most recent fiscal year 마지막 날" 기준이다. D-01의 실시간 차단은 등록위험 예방용 보수적 운영 게이트다. +- **비-AI count는 자동 0이 아니다.** Rule 12g-1(b)(1)은 비-AI를 판매 시점이 아니라 "determined as of such day"(기준일 현재)로 판단한다. 506(c) 발행만으로 영구 0이 아니며, continuing-AI 정책·A-11/A-12 연동으로 관리한다(OD-D01-7). +- **token = class 단정 금지.** §12(g)(5)의 "substantially similar rights and privileges" 기준으로 legal class를 확인하고 Manifest legalClassId로 지정한다(OD-D01-6). +- **ONCHAINID는 법적 명부의 mirror다.** 최종 기준은 issuer/transfer agent(Securitize)의 security holder record(Rule 12g5-1(a))이며 정기 대사가 필요하다(OD-D01-1). + +## 부록 D — 결론 + +D-01은 "이 거래로 보유자 수가 면제 구조를 깨뜨리는 임계값에 도달하는가"를 상태추적으로 판정하는 부품이다. 법리 골격은 §3(c)(7)에는 인원 상한이 없고(2,000은 §3(c)(7)이 아니라 §12(g) 숫자다), §12(g)(2)(B) 등록투자회사 면제가 미등록 §3(c)(7) 펀드엔 적용되지 않아 §12(g)에 노출된다는 것이다. 다만 상한을 단정하지 않는다 — **실제 BUIDL이 BVI 역외 펀드이므로, FPI(Rule 3b-4(c)) 해당 시 Rule 12g3-2(a)에 따라 구속 경계가 "held of record < 2,000"이 아니라 "미국 거주 record holder < 300"으로 바뀔 수 있다**(FPI 선행 판단, OD-D01-3). §12(g)가 적용되는 전제에서는 held of record < 2,000이 주 경계이되, 비-AI < 500은 판매 시점이 아니라 기준일 현재 기준이므로 506(c)만으로 자동 0이 아니다(OD-D01-7). §12(g) 트리거는 실시간이 아니라 회계연도 말 기준이며, D-01의 실시간 게이트는 보수적 운영 장치다. 카운팅 단위는 지갑이 아니라 사람(ONCHAINID, A-04)이고, 법인은 1로 세되 회피목적 보유는 look-through한다(12g5-1). ONCHAINID counter는 issuer/transfer agent 법적 명부의 mirror이며 정기 대사가 필요하다(OD-D01-1). token↔legal class 매핑은 legalClassId로 확정한다(OD-D01-6). 자격판정과 달리 D-01은 머릿수만 세며, STATEFUL 카운터의 원자적 갱신(pre-trade 게이트 + post-trade commit)이 구현 핵심이다. FPI 지위·미국 거주 보유자 산정·역외 §12(g) 적용범위·명부 동치성은 변호사 위임으로 남긴다. \ No newline at end of file diff --git a/docs/compliance/elements/E-01.md b/docs/compliance/elements/E-01.md new file mode 100644 index 0000000..af2941d --- /dev/null +++ b/docs/compliance/elements/E-01.md @@ -0,0 +1,970 @@ +# E-01 Form D 확인 (Notice of Exempt Offering) — 부품 심층 인수인계 문서 (Walkthrough) + +**이 문서는 무엇인가.** Decipher RWA DEX의 컴플라이언스 부품 중 하나인 Form D 확인 부품(내부 식별자 E-01)을, 미국 증권법을 처음 보는 사람도 이해할 수 있도록 풀어 쓴 인수인계 문서다. 개발자·법무팀·외부 자문 변호사·학회원이 각자 작업의 base로 그대로 쓸 수 있도록 — (1) 이 규제가 어디서 왔고 왜 존재하는지, (2) 어떤 사실을 입력받아 (3) 어떤 로직으로 판정하고 (4) 실패하면 어떻게 처리하며 (5) 어떤 테스트로 검증하는지를, 기술 요소마다 풀이를 함께 붙여 설명한다. + +**자체완결 원칙.** 이 문서는 다른 내부 문서를 열지 않아도 단독으로 이해되도록 작성했다. 인용은 미국 연방법·연방규칙·SEC 발행문서 등 외부 공식 자료만 사용한다. + +**⚠ 출처·정정 노트 (읽기 전 필독).** 본 부품의 인용은 다음 1차 출처를 기준으로 한다 — 15 U.S.C. §77d(제5조 적용제외 거래, uscode.house.gov, 2026-06-05 현재), 15 U.S.C. §77r(제18조 주법 선점, uscode.house.gov, 2026-05-27 현재), 17 C.F.R. §230.500·§230.503·§230.506·§230.507·§230.508(Regulation D, eCFR 현행본; Title 17 최종개정 2026-06-25, 조회 2026-07-15), 17 C.F.R. §239.500(Form D), Form D 서식 원본(SEC1972 (5/17), OMB 3235-0076), SEC Release No. 33-11347(*In the Matter of Pipe Technologies Inc.*, 2024-12-20, Commission order), SEC Division of Corporation Finance, *Frequently Asked Questions and Answers on Form D*(2026-01-22 게시, 2026-03-17 최종 갱신). 특히 헷갈리기 쉬운 정정 포인트는 다음과 같다(상세는 부록 C). + +- **Form D 제출은 Rule 506(c) 면제의 조건이 아니다(가장 중요).** Rule 506(c)(1)의 일반조건은 “§§ 230.501 and 230.502(a) and (d)”만 열거하고 **§ 230.503(Form D 제출)을 열거하지 않는다**. 조문 구조 자체가 답이다. SEC도 같은 입장을 명시한다 — Form D FAQ 답변 5, 그리고 Commission order(Release 33-11347 ¶6)의 “While a failure to provide such notice does not result in a loss of the exemption from Section 5”. **따라서 E-01이 FAIL을 내도 §5 면제가 깨지는 것이 아니다.** + +- **그러나 “면제 유지”와 “위법 아님”은 전혀 다른 말이다.** 같은 문장의 후단이 결정적이다 — “the failure to comply with the requirements of Rule 503 itself is a violation of the Securities Act and rules promulgated thereunder.” 2024-12-20 SEC는 Form D 미제출**만**을 이유로 3개 발행자에게 §8A cease-and-desist와 $60,000~$195,000의 민사제재금을 부과했다. 면제는 살아 있고 발행자는 처벌받는다 — 이 두 명제가 동시에 참이다. + +- **Rule 507은 자동 실격 조항이 아니다.** Rule 507(a)는 “Rule 503을 위반하면 면제 박탈”이 아니라 “Rule 503 위반을 이유로 **법원의 유지명령(injunction)을 받은 적이 있으면**” 이후 504·506 면제가 불가하다고 정한다. 즉 미제출 → 위반 → (법원 명령) → 실격의 **3단 구조**이며, 507(b)의 good cause 예외까지 있다. “Form D 안 내면 Rule 507로 면제가 날아간다”는 흔한 압축은 조문을 한 단계 건너뛴 오독이다. + +- **부등호.** Rule 503(a)(1)은 “no later than 15 calendar days after the first sale”이다. 경과일수 ≤ 15면 적법, **> 15면 지각**이다(15일째 당일 제출은 적법). 마감일이 토·일·공휴일이면 “the due date would be the first business day following”으로 **연장**된다 — 즉 15일 경과가 곧바로 위반이 아니다. 연차 수정은 “on or before the first anniversary”(1주년 당일 포함, ≤ 1주년)다. + +- **“최초 매도일”은 결제일도 토큰 발행일도 아니다.** SEC FAQ 답변 1: “the date of first sale is the date on which the first investor is irrevocably contractually committed to invest.” 온체인 mint 시점이 아니라 **투자자가 철회 불가능하게 계약상 구속된 날**이 기산점이다. 온체인 이벤트를 기산점으로 삼으면 마감을 놓친다(§5.3·OD-E01-2). + +- **주(州) 차원의 결과는 연방과 다르다(중요).** Rule 506 증권은 §18(b)(4)(F)에 따라 covered security로 주 등록이 선점되지만, 같은 조항의 **단서**가 주의 notice filing 요구권을 명시적으로 보존한다. 그리고 §18(c)(3)은 “failure to submit any filing or fee”를 이유로 주가 **그 주 안에서의 offer·sale을 정지**시킬 수 있게 한다. **연방 면제는 유지되는데 특정 주에서 거래가 멈출 수 있다** — E-01이 실무적으로 방어하는 위험의 상당 부분이 여기 있다. + +- **§18(b)(4) 항 번호가 바뀌었다.** 2013년 SEC 발행문서들은 Rule 506 covered security 근거로 §18(b)(4)**(D)**를 인용하지만, 2015년 FAST Act(Pub. L. 114-94 §76001(b))의 재지정으로 현행은 §18(b)(4)**(F)**다. 옛 자료를 그대로 옮기면 틀린 조항을 인용하게 된다. + +- **2013년 제안(Release 33-9416)은 채택되지 않았다.** SEC는 506(c) 도입과 동시에 general solicitation 개시 **전** Form D 사전제출, 종료 후 closing amendment, 그리고 Form D 미준수 시 **1년간 Rule 506 사용 금지**를 제안했으나, 현행 Rule 503·507에 그 내용이 없다. 제안 텍스트를 현행법으로 착각하지 않는다(§3.15). + +- **E-01은 매수인을 보는 부품이 아니다.** A-계열(A-01·A-03·A-13 등)이 “이 사람이 자격이 있는가”를 묻는다면, E-01은 “이 자산의 발행이 규제 준수 상태인가”를 묻는다. 그래서 FAIL의 의미가 다르다 — 매수인 교체로 치유되지 않고, **자산 단위로 차단**된다(§8.4). + +**양식 메모.** 이 문서는 A-13 v1 인수인계 양식의 번호·헤더·서술 관습을 따른다. 다만 A-13이 증명서 확인형(Pattern B) 부품인 데 반해 E-01은 **기계 판정형(Pattern A)**이다 — 사람의 자격을 판단하는 것이 아니라 공적 등록부(EDGAR)에 존재하는 사실을 결정론적으로 대조한다. 그래서 §8은 증명서 패턴이 아니라 공적 데이터 확인 패턴을 다루고, ERC-3643 변환은 claim topic이 아니라 Compliance Module + Manifest 필드를 다룬다(claim.basis enum은 E-01에 해당 없음 — 상세 §8·§3.20). + +## §1. 규제 맥락 — 이 부품이 다루는 규제는 어디서 왔는가 (Context First) + +E-01은 한 줄로 말하면 다음 질문에 답하는 부품이다. + +이 자산의 발행자는, 이 발행에 대해, SEC에 Form D를 제대로 내 두었는가? + +**(1) 왜 사모 발행자가 SEC에 무언가를 내야 하나.** Regulation D의 거래는 정의상 §5의 **등록을 면제받는** 거래다. 등록을 안 하는 것이 요점인데 SEC에 서류를 낸다는 것은 언뜻 모순처럼 보인다. 그러나 Form D는 등록서류가 아니라 **통지(notice)**다. 정식 명칭이 “Notice of Exempt Offering of Securities” — 즉 “우리는 이 면제에 기대어 이만큼 팔았습니다”라는 사후 신고다. 심사도 승인도 없고 연방 수수료도 없다. + +**(2) 그럼 왜 존재하나.** Commission이 직접 답한 적이 있다. Release 33-11347 ¶3은 Form D 미제출의 폐해를 세 가지로 든다 — 첫째, Regulation D 시장의 규모를 SEC가 파악할 수 없게 되어 “투자자 보호와 자본형성의 균형”을 평가할 근거가 사라진다. 둘째, SEC·주 규제기관·자율규제기구의 감시·집행 능력이 손상된다. 셋째, 투자자와 시장참가자가 “이 회사가 연방증권법을 지키며 발행하고 있는가”를 확인할 수단을 잃는다. **Form D는 사모 시장의 유일한 공개 창(窓)이다.** 그 창을 닫는 것 자체가 규제 대상이다. + +**(3) 그런데 이상한 구조가 하나 있다.** Form D 제출은 **면제의 조건이 아니다**. Rule 506(c)(1)이 조건으로 열거하는 것은 §230.501(정의)과 §230.502(a)·(d)(통합·전매제한)뿐이고 §230.503은 빠져 있다. 그래서 Form D를 안 내도 그 발행은 여전히 §5 면제를 받는다 — 투자자에게 매도한 증권이 소급해서 위법한 미등록 증권이 되지는 않는다. 이 구조는 의도된 것이다. 통지 불이행이라는 **절차적 흠**을 이유로 이미 종결된 **실체적 거래**를 뒤집으면, 정작 보호받아야 할 투자자가 발행자와 함께 무너지기 때문이다. + +**(4) 대신 별도의 제재 라인이 붙어 있다.** 면제를 건드리지 않는 대신, 법은 세 갈래로 발행자를 압박한다. + +- **연방 집행**: Rule 503 위반은 그 자체로 위법이다. Commission은 §8A에 따라 cease-and-desist를 명하고 민사제재금을 부과할 수 있다. 오랫동안 “면제가 안 깨지니 실익 없는 위반”으로 여겨졌으나, **2024-12-20 SEC가 Form D 미제출만을 이유로 3건을 제재하면서 그 인식이 깨졌다**(§3.13). +- **Rule 507 실격**: 위반을 이유로 법원 유지명령을 받으면, 그 후의 504·506 발행이 **전부** 막힌다. 한 번의 절차 위반이 미래의 자본조달 능력을 끊는 구조다. +- **주 정지권**: 아래 (5). + +**(5) 실무에서 가장 먼저 터지는 것은 주(州)다.** NSMIA(1996)는 Rule 506 증권을 covered security로 만들어 주의 등록·심사를 선점했다. 그러나 §18(b)(4)(F)의 단서가 주의 **notice filing** 요구권을 남겼고, §18(c)(2)(A)가 이를 재확인하며, §18(c)(3)이 “filing 또는 fee 미제출”을 이유로 주가 **그 주 안에서의 offer·sale을 정지**할 수 있게 한다. 주 신고는 실무상 Form D 사본을 기초로 이루어지므로, **Form D를 안 내면 주 신고 자체가 성립하지 않는다.** 연방 면제는 멀쩡한데 특정 주에서 판매가 멈추는 상황 — 이것이 Form D 불이행의 가장 현실적인 귀결이다. + +**(6) 506(c)에는 탈출구가 없다(핵심).** Rule 500(c)는 “Regulation D 준수 시도는 배타적 선택이 아니다”라며, 506(b)를 못 맞춰도 §4(a)(2)를 따로 주장할 수 있다고 한다. 그러나 이 탈출구는 **general solicitation을 하는 순간 닫힌다.** Commission의 논리는 명확하다(Release 33-11347 ¶8) — 일반청약권유를 했으면 그 발행은 §4(a)(2)의 “public offering이 아닌 거래”일 수 없고, 따라서 **Rule 504나 506(c)에 의존하는 것 외에 길이 없으며, 그 결과 Form D 제출 의무가 확정된다.** 일반청약권유를 전제로 설계된 506(c) 자산에서 Form D는 선택이 아니다. + +**요약하면**, E-01은 “Form D가 없으면 면제가 깨진다”를 구현하는 부품이 **아니다**. 면제는 깨지지 않는다. E-01은 “면제는 살아 있지만 발행자가 제재·실격·주 정지 위험에 노출된 자산을, 우리 거래소가 계속 유통시킬 것인가”라는 **운영상의 물음**에 답하는 보수적 게이트다. 이 성격 규정이 §5·§6·§8 전체를 지배한다. + +**한국법 비교(참고).** 한국 자본시장법의 사모 체계도 유사한 통지 구조를 갖는다 — 증권신고서 면제 사모라도 일정 요건에서 사후 보고·전매제한 조치가 요구되고, 그 불이행은 발행의 사법(私法)적 효력이 아니라 **행정 제재**로 다뤄지는 것이 일반적이다. “통지 불이행 ≠ 거래 무효, 그러나 제재 대상”이라는 이원 구조는 양국이 공통된다. 다만 미국은 여기에 **주(州) 층위의 정지권**이 하나 더 얹혀 있다는 점이 결정적으로 다르다. + +## §2. 메타 정보 (Internal Identifier Box) + +아래는 Decipher 내부 PM 규약상의 식별자·분류값을 한곳에 모은 박스다. 본문에서는 이 코드들을 단독으로 쓰지 않고 “본 부품”·“Form D 확인 부품” 같은 자연어로 부른다. + +| 항목 | 값 | 한 줄 풀이 | +| --- | --- | --- | +| 부품 이름 | Form D 확인 (Notice of Exempt Offering) | 발행자가 SEC에 사모 통지를 냈는지 확인하는 문지기 | +| 검사 대상 | 이 자산의 발행에 대해 Rule 503이 요구하는 Form D가 EDGAR에 제출되어 있고, 그 기재가 Manifest의 면제 주장과 일치하며, 요구되는 수정이 지연되지 않았는가 | “발행자가 신고를 해 뒀는가” | +| Internal ID | E-01 (Decipher PM 규약) | 부품 일련번호 | +| 검증 방식 | 기계 판정형 (Pattern A) — 공적 등록부(EDGAR) 사실의 결정론적 대조 | 사람의 자격 판단이 아니라 공적 데이터 존부·일치 확인 | +| Timing | pre-trade 게이트 | 거래 직전 1회 확인, 사후 갱신 없음 | +| Stateful 여부 | STATELESS | 과거 거래 누적에 판정이 의존하지 않음 (자산 상태에만 의존) | +| 주 활성화 Recipe | R1 (Reg D 506(c) Issuance) | R1 전용 — R2·R3·R4에는 부착되지 않음 | +| Cumulative Recipe | 없음 (R1 exclusive) | E-03·F-04와 같은 R1 전용 3인방 | +| Cascade Element | B-01(manifest 정합) · E-03(bad actor) · A-01/A-02(글로벌 게이트, 선행) | 설정 정합·서명 certification 연계 | +| 판정 대상 주체 | **발행자·자산** (매수인 아님) | A-계열과의 근본적 차이 — 실패 시 자산 단위 차단 | +| 성숙도 | 정밀화 필요 → 본 문서로 확정 (R-5 “공적 데이터 확인 방법” 응답분) | Form D 조회 경로 + 법적 성격 규정 완료 | +| 파일·위치 | E-01_FormD확인.md · 산출물/elements/ | 산출물 경로 | + + +## §3. 법적 근거 (Layer 1 → 2 → 3) + +**읽는 법.** 법적 근거는 세 겹이다 — Layer 1(조문)은 의회가 만든 법률 텍스트(statute), Layer 2(규칙)는 SEC가 그것을 실무 수준으로 구체화한 연방규칙(rule), Layer 3(해석)은 SEC 발행문서·Commission order·staff 해석이다. 아래 §3.0.2 표 1의 “종류” 칸이 그대로 Layer에 대응한다 — Statute = Layer 1(§5·§4(a)(2)·§4(b)·§18), SEC Rule = Layer 2(Rule 503·506·507·508·500·Form D), SEC Release·Order·Staff = Layer 3(33-11347·FAQ·33-9416). 본 절은 조문이 작동하는 논리 흐름 순서로 배열돼 §3.1~§3.15 번호를 그대로 유지하며, 각 항목이 어느 Layer인지는 이 표로 확인하면 된다. + +### 3.0 법조문 관계 플로우차트 (개발자용) + +위 조문들이 E-01 판정에서 어떻게 연결되는지 — §5 등록 원칙에서 출발해 §4(a)(2) 면제 → Rule 506(a) 간주 → 506(c)(1) 일반조건에 이르렀을 때 **그 조건 목록에 §230.503이 없다**는 사실(그림 가운데 별표)이 확인되고, 그 결과 Rule 503이 면제 라인에서 떨어져 나와 **독립 의무**로 서며, 그 위반이 면제를 건드리지 않은 채 집행·Rule 507·주(州) 정지의 세 갈래로만 흐르는 구조 — 를 정리한 것이다. 오른쪽 아래 경고 상자는 Rule 500(c)의 비배타적 선택이라는 탈출구가 general solicitation 앞에서 닫힌다는 점을 표시한다. 각 조항 상세는 §3.1~§3.15. + +![그림 3.0 — 법조문 관계 흐름: §5 → §4(a)(2) → 506(c)(1) 조건 목록의 §230.503 부재 → Rule 503 독립 의무 → 3갈래 제재 (개발자용)](fig30.png) + +*그림 3.0 — 법조문 관계 흐름: §5 → §4(a)(2) → 506(c)(1) 조건 목록의 §230.503 부재 → Rule 503 독립 의무 → 3갈래 제재 (개발자용)* + +### 3.0.1 실제 BUIDL에 어떻게 적용되나 + +BUIDL(BlackRock USD Institutional Digital Liquidity Fund Ltd.)은 본 부품에 관한 한 **추정이 필요 없는 드문 경우**다. Form D가 EDGAR에 실재하고 공개되어 있기 때문이다. 확인된 사실은 다음과 같다(SEC EDGAR, Filing Detail). + +| 항목 | 값 | E-01 관점의 의미 | +| --- | --- | --- | +| Filer | BlackRock USD Institutional Digital Liquidity Fund Ltd. | 발행자 = 펀드 자신 (Rule 500(d): Reg D는 발행자만 이용 가능) | +| CIK | 0002013810 | E-01의 `issuerCIK` 대조 키 | +| SEC Accession No. | 0002014390-24-000001 | 제출 건 고유 식별자 — `formDAccession` | +| Form Type | D (Act: 33) | 신규 통지 | +| Filing Date / Accepted | 2024-03-18 / 2024-03-18 10:07:05 | `filingDate` | +| File No. | 021-507840 | — | +| State of Incorp. | D8 (영국령 버진아일랜드) | 역외 발행자도 Rule 503 의무를 진다 — 아래 해설 | +| **Item 06c** | **Rule 506(c)** | Manifest `issuanceFramework=RegD506c`와 정합 (G4) | +| **Item 3C.7** | **Investment Company Act Section 3(c)(7)** | R3(§3(c)(7) 펀드)와 정합 — R1+R3 동시 성립의 공적 증거 | +| 후속 | Form D/A(수정) 제출 이력 존재 (2025-07-18 수신분 등) | 계속 발행 → 연차 수정 라인 가동 중(G5) | + +**해설 1 — 이것이 왜 결정적인가.** 본 프로젝트는 “BUIDL-like 자산 = Rule 506(c) + ICA §3(c)(7)”을 전제로 R1과 R3를 동시 부착한다. 그 전제는 추측이 아니라 **발행자 자신이 SEC에 체크한 항목**으로 확인된다 — Form D Item 6은 “Federal Exemptions and Exclusions Claimed (Select all that apply)”이고, BUIDL은 거기서 Rule 506(c)와 Section 3(c)(7)을 **함께** 선택했다. E-01의 G4(정합) 게이트가 대조하는 값이 바로 이 두 체크박스다. + +**해설 2 — 역외 펀드도 Rule 503을 진다.** BUIDL은 BVI 법인이다(State of Incorp. D8). D-01 문서에서 다룬 것처럼 §12(g) 적용 여부는 FPI 검토가 선행되지만, **Rule 503은 그와 무관하다.** Rule 503(a)(1)의 수범자는 “An issuer offering or selling securities in reliance on § 230.504 or § 230.506”이며 국적·설립지 제한이 없다. 미국에서 506(c)에 기대어 파는 이상 역외 발행자도 Form D를 낸다 — BUIDL의 실제 제출이 그 실증이다. **E-01에는 D-01의 FPI 분기 같은 선행 판단이 없다**(이 점이 D-01과 E-01의 중요한 비대칭이다). + +**해설 3 — Decipher 데모에서의 위치.** 데모의 BUIDL-like 테스트 토큰은 실제 BUIDL을 모델링한 것이므로, Manifest에 `issuerCIK=0002013810`류의 값이 아니라 **테스트 발행자의 CIK 또는 “발행 미개시” 상태**가 들어간다. E-01은 이 경우 두 갈래로 갈린다 — (a) 실제 발행이 없는 순수 데모 자산이면 Manifest의 `issuanceFramework`가 `RegD506c`가 아니므로 G0에서 미부착(P0), (b) 506(c) 발행을 모사하는 자산이면 테스트 Form D 사실을 Manifest에 주입해 G1~G6을 태운다. **실제 BUIDL의 Form D 데이터를 테스트 fixture로 그대로 쓰는 것이 가장 현실적인 L4 테스트 벡터**다(§7 T12). + +### 3.0.2 조문 근거표 (Authority) + 순서·중요성 + +**표 1 — Authority (근거 원천 일람).** “종류” = Layer, 태그 = Direct(직접 판정 근거)·Conditional(사실관계 따라 활성)·Supporting(보조)·Background(배경). + +| 종류 | Authority | 내용 | E-01 관련성 | 태그 | Official URL | +| --- | --- | --- | --- | --- | --- | +| Statute | 1933년 증권법 §5, 15 U.S.C. §77e | 등록이 원칙 | 면제가 필요한 이유 — 상위 배경 | Background | uscode.house.gov | +| Statute | §4(a)(2), 15 U.S.C. §77d(a)(2) | “transactions by an issuer not involving any public offering” | 506(c)가 기대는 상위 면제 | Background | uscode.house.gov | +| Statute | §4(b), 15 U.S.C. §77d(b) | Rule 506 발행은 general solicitation을 이유로 public offering으로 간주되지 않음 | 506(c) 밖의 일반청약권유는 여전히 public offering → Form D 의무 확정의 근거 | Supporting | uscode.house.gov | +| Statute | JOBS Act §201(a)(1) note, Pub. L. 112-106 | 개정 Rule 506은 계속 §4(2) 하의 규칙으로 취급 | §18(b)(4)(F)의 “rules issued under §77d(2)”에 506(c)가 포섭되는 연결고리 | Supporting | uscode.house.gov | +| **SEC Rule** | **Rule 503, 17 C.F.R. §230.503** | **최초 매도 후 15역일 이내 Form D 제출 + 수정 규율 + EDGAR 제출·서명** | **본 부품의 의무 본체 (핵심)** | **Direct** | ecfr.gov | +| **SEC Rule** | **Rule 506(c)(1), 17 C.F.R. §230.506(c)(1)** | **일반조건 = §§230.501 + 230.502(a)·(d)** | **⭐ §230.503 부재 — “조건 아님”의 조문상 근거 (핵심)** | **Direct** | ecfr.gov | +| SEC Rule | Rule 506(a), 17 C.F.R. §230.506(a) | (b)·(c) 충족 시 §4(a)(2) 거래로 간주 | 면제 성립 구조 — E-01이 건드리지 않는 층 | Direct | ecfr.gov | +| SEC Rule | Rule 507, 17 C.F.R. §230.507 | Rule 503 위반 관련 법원 유지명령 시 504·506 면제 불가 (good cause 예외) | 미제출의 최악 경로 — 단 injunction 요건 | Direct | ecfr.gov | +| SEC Rule | Rule 508, 17 C.F.R. §230.508 | 경미한 일탈 구제 + “Reg D 전 조항 준수 의무” + Commission 제소 가능 | 503이 508(a)(2) 중대 열거에 없음 / 508(b) 후단이 제재 근거 | Supporting | ecfr.gov | +| SEC Rule | Rule 500(b)·(c)·(d), 17 C.F.R. §230.500 | 주법 준수 상기 / 비배타적 선택 / 발행자 전용 | 주 notice filing 경고 + §4(a)(2) 탈출구와 그 한계 | Supporting | ecfr.gov | +| SEC Rule | Form D, 17 C.F.R. §239.500 + 서식 원본 | Item 1~16 + Terms of Submission | E-01이 읽는 필드 정의 + Rule 506(d) certification (E-03 연계) | Direct | ecfr.gov · sec.gov | +| **Statute** | **§18(b)(4)(F), 15 U.S.C. §77r(b)(4)(F)** | **506 증권은 covered security — 단, 주의 notice filing 요구권 보존** | **주 신고 라인의 근거 (중요)** | **Direct** | uscode.house.gov | +| Statute | §18(c)(2)(A), 15 U.S.C. §77r(c)(2)(A) | 주는 SEC 제출 서류·판매자료·송달동의·수수료를 통지 목적으로 요구 가능 | 주 신고가 Form D 사본 기반인 이유 | Direct | uscode.house.gov | +| **Statute** | **§18(c)(3), 15 U.S.C. §77r(c)(3)** | **filing·fee 미제출 시 주는 그 주 내 offer·sale 정지 가능** | **연방 면제 유지 ≠ 거래 계속 — 실무상 최대 위험** | **Direct** | uscode.house.gov | +| Statute | §8A, 15 U.S.C. §77h-1 | cease-and-desist 절차 | 2024년 제재의 근거 조문 | Supporting | uscode.house.gov | +| **SEC Order** | **Release No. 33-11347 (2024-12-20)** | ***In re Pipe Technologies Inc.* — Rule 503 위반, C&D + $195,000** | **⭐ Commission 자신의 “면제 유지 ∧ 위법 성립” 이중 명제 (핵심 Layer 3)** | **Direct** | sec.gov | +| SEC Release | Press Release 2024-210 (2024-12-20) | 3건 동시 제재 ($60,000 / $195,000 / $175,000) | 집행 위험의 실증 규모 | Supporting | sec.gov | +| SEC Staff | Form D FAQ 답변 1·5 (2026-03-17 갱신) | first sale 정의 / “not a condition” / 지각 시 선의 제출 권고 | 기산점 + 치유 경로의 staff 근거 (비구속) | Supporting | sec.gov | +| SEC Staff | Securities Act Rules CFI 257.02–257.08 | Rule 503 해석 | FAQ가 인용하는 staff 해석군 (비구속) | Background | sec.gov | +| SEC Release | Release No. 33-9416 (2013-07-10, 제안) | 사전 Form D·closing amendment·1년 실격 제안 | **미채택** — 현행법과 혼동 금지 | Background | sec.gov | +| SEC Release | Release No. 33-8891 (2008-02-06) | Form D 전자제출·서식 전면개정 채택 | EDGAR 제출 체계의 연혁 + Item별 지침 | Background | sec.gov | +| SEC Data | EDGAR Submissions API | `https://data.sec.gov/submissions/CIK##########.json` | 기계 조회 경로 (인증 불필요) | Supporting | sec.gov | + +**표 2 — 순서·중요성 한눈에 보기.** 순서는 중요도순이 아니라 법이 작동하는 논리 흐름순이다. + +| 순서 | 조문 | 중요성 | E-01이 그걸로 하는 일 | +| --- | --- | --- | --- | +| §3.1 | §5 (15 U.S.C. §77e) | 배경 | 등록이 원칙임을 확인 — 면제가 필요한 이유 | +| §3.2 | §4(a)(2) (§77d(a)(2)) | 배경 | 506(c)가 기대는 상위 면제 | +| §3.3 | §4(b) + JOBS Act §201(a)(1) | 보조 | 506 안에서만 general solicitation이 면책됨 → 밖이면 public offering | +| §3.4 | Rule 506(a) | 직접 | 면제 성립 구조 — E-01이 건드리지 않는 층임을 확정 | +| §3.5 | **Rule 506(c)(1)** | **핵심** | **조건 목록에 §230.503 부재 → “Form D는 조건 아님”의 근거** | +| §3.6 | **Rule 503(a)(1)** | **핵심** | **의무 본체: 15역일 · 기산점 · 주말·공휴일 연장 (G1·G6)** | +| §3.7 | Rule 503(a)(2)~(4) | 핵심 | 수정 의무: 오류정정·변경반영·연차 (G5) + 수정 시 전면 갱신 | +| §3.8 | Rule 503(b) | 직접 | EDGAR 전자제출 + 권한 있는 자의 서명 (G2) | +| §3.9 | Rule 507 | 직접 | 미제출의 최악 경로 — injunction 요건·good cause 예외 | +| §3.10 | Rule 508 | 보조 | 503이 중대 일탈 열거에 없음 / 508(b) 후단 = 제재 근거 | +| §3.11 | Rule 500(b)·(c)·(d) | 보조 | 주법 경고 · 비배타적 선택과 그 한계 · 발행자 전용 | +| §3.12 | Form D (§239.500) + Terms of Submission | 직접 | 읽을 필드 정의 (G3·G4) + Rule 506(d) certification (E-03 연계) | +| §3.13 | **§18(b)(4)(F) · (c)(2)(A) · (c)(3)** | **핵심** | **주 notice filing 근거 + 주 정지권 — 실무상 최대 위험** | +| §3.14 | **Release 33-11347** | **핵심** | **“면제 유지 ∧ Rule 503 위반 성립” 이중 명제 + 506(c) 탈출구 봉쇄 논리** | +| §3.15 | FAQ 답변 1·5 / Release 33-9416 | 보조 | 기산점·치유 경로 / 미채택 제안과의 경계 | + + +### 3.1 증권법 §5 — 등록이 원칙 (배경) + +- **조항**: Securities Act of 1933 §5, 15 U.S.C. §77e — uscode.house.gov + +- **핵심 원문**: (해당 조는 등록신고서 없는 매도·인도를 금지하는 일반 원칙 조항이며, 본 부품은 그 예외 라인 위에서만 작동하므로 원문 전재 대신 §4(a)(2)의 “The provisions of section 77e of this title shall not apply to—”라는 연결 문언으로 대신한다. §77d(a) 본문 참조.) + +- **한국어**: 제77e조(제5조)의 규정은 다음 각 호에는 적용되지 아니한다 — (§77d(a) 본문) + +- **쉬운 설명**: 미국에서 증권을 팔려면 원칙적으로 SEC에 등록해야 한다. 이 원칙이 있기 때문에 “면제”라는 개념이 성립하고, 면제에 기대는 발행자에게 “당신이 어느 면제를 쓰는지 알려 달라”고 요구할 근거(Form D)가 생긴다. E-01은 이 원칙 자체를 판정하지 않는다 — 원칙의 예외 위에 서 있는 자산의 통지 상태만 본다. + +- **PASS/FAIL 반영**: 간접 ✕ — E-01은 §5 위반 여부를 판정하지 않는다. 오히려 **E-01이 FAIL이어도 §5 면제는 유지된다**는 것이 본 부품의 출발점이다(§3.5·§3.14). + +- **ERC-3643 변환**: 없음 (배경 조문). Manifest `issuanceFramework`가 면제 라인을 지정하는 것으로 대체된다. + +### 3.2 증권법 §4(a)(2) — 공모가 아닌 발행자 거래 (배경) + +- **조항**: Securities Act of 1933 §4(a)(2), 15 U.S.C. §77d(a)(2) — uscode.house.gov (2026-06-05 현재) + +- **핵심 원문**: The provisions of section 77e of this title shall not apply to— … (2) transactions by an issuer not involving any public offering. + +- **한국어**: 제77e조의 규정은 다음에 적용되지 아니한다 — … (2) public offering을 수반하지 않는 발행자의 거래. + +- **쉬운 설명**: 사모의 뿌리 조문이다. 단 열두 단어뿐이고 “public offering”이 무엇인지는 정의하지 않는다. 그 공백을 메우려고 SEC가 만든 것이 Rule 506이라는 safe harbor다. E-01의 맥락에서 이 조문이 중요한 이유는 하나다 — **Rule 506(c)를 못 쓰게 되면 발행자가 되돌아갈 곳이 여기이고(Rule 500(c)), general solicitation을 한 순간 여기로 되돌아갈 수 없다**(§3.3·§3.14). 그것이 506(c) 자산에서 Form D 의무가 확정되는 이유다. + +- **PASS/FAIL 반영**: 간접 ✕ — E-01은 §4(a)(2) 해당성을 판정하지 않는다. 다만 §12의 Open Issue(OD-E01-6)에서 “Form D 미제출 자산이 §4(a)(2)로 후퇴 가능한가”를 검토할 때의 기준 조문이다. + +- **ERC-3643 변환**: 없음 (배경 조문). + +### 3.3 증권법 §4(b) + JOBS Act §201(a)(1) — 506 안에서만 열리는 일반청약권유 (보조) + +- **조항**: Securities Act of 1933 §4(b), 15 U.S.C. §77d(b); Jumpstart Our Business Startups Act §201(a)(1), Pub. L. 112-106, 126 Stat. 313 (note) — uscode.house.gov + +- **핵심 원문**: **§4(b)** — Offers and sales exempt under section 230.506 of title 17, Code of Federal Regulations (as revised pursuant to section 201 of the Jumpstart Our Business Startups Act) shall not be deemed public offerings under the Federal securities laws as a result of general advertising or general solicitation. / **JOBS Act §201(a)(1) 후단** — Section 230.506 of title 17, Code of Federal Regulations, as revised pursuant to this section, shall continue to be treated as a regulation issued under section 4(2) of the Securities Act of 1933 ([now] 15 U.S.C. 77d[(a)](2)). + +- **한국어**: **§4(b)** — (JOBS Act 제201조에 따라 개정된) 17 C.F.R. §230.506에 따라 면제되는 offers and sales는, general advertising 또는 general solicitation을 했다는 이유로 연방증권법상 public offering으로 간주되지 아니한다. / **§201(a)(1) 후단** — 본조에 따라 개정된 17 C.F.R. §230.506은 1933년 증권법 제4(2)조(현 15 U.S.C. §77d(a)(2)) 하에서 발령된 규칙으로 계속 취급된다. + +- **쉬운 설명**: 두 문장이 각각 다른 일을 한다. **§4(b)**는 “506에 따른 발행이라면 광고를 해도 공모로 안 본다”고 한다 — 뒤집으면 **506의 울타리 밖에서 광고하면 그대로 공모**라는 뜻이다. 이것이 §1(6)에서 말한 “탈출구 봉쇄”의 조문상 뿌리다. **§201(a)(1) 후단**은 다른 일을 한다 — 506(c)가 일반청약권유를 허용하게 되었어도 여전히 “§4(2) 하의 규칙”임을 못 박는다. 이 한 문장이 없었다면 506(c) 증권은 §18(b)(4)(F)의 “Commission rules or regulations issued under section 77d(2)”에 해당하지 않아 covered security 지위를 잃고 50개 주의 등록심사를 받았을 것이다. **즉 §201(a)(1) 후단은 §3.13의 주법 선점 라인 전체를 지탱하는 연결고리다.** + +- **PASS/FAIL 반영**: 간접 ✕ — 직접 게이트는 아니다. 그러나 §5.1의 “왜 506(c) 자산에서 Form D는 선택이 아닌가”와 §3.13의 covered security 논증이 이 두 문장에 의존한다. + +- **ERC-3643 변환**: Manifest `generalSolicitationUsed: bool`. true이면 §4(a)(2)로의 후퇴가 불가하므로 E-01의 FAIL을 완화할 여지가 없다(§6.3·OD-E01-6). + +### 3.4 Rule 506(a) — 면제 성립의 구조 (직접) + +- **조항**: 17 C.F.R. §230.506(a) — eCFR 현행본 (Title 17 최종개정 2026-06-25, 조회 2026-07-15) + +- **핵심 원문**: *Exemption.* Offers and sales of securities by an issuer that satisfy the conditions in paragraph (b) or (c) of this section shall be deemed to be transactions not involving any public offering within the meaning of section 4(a)(2) of the Act. + +- **한국어**: *면제.* 본조 (b) 또는 (c)의 조건을 충족하는 발행자의 offers and sales는, 법 제4(a)(2)조의 의미 내에서 public offering을 수반하지 않는 거래로 **간주된다**. + +- **쉬운 설명**: “deemed(간주된다)”가 핵심 동사다. 506의 조건을 맞추면 §4(a)(2) 해당 여부를 개별 심사받지 않고 **자동으로** 사모로 인정된다 — 이것이 safe harbor의 의미다. 그리고 여기서 결정적인 것은 **간주의 방아쇠가 “paragraph (b) or (c)의 conditions”라는 점**이다. 면제 성립 여부는 (b)/(c)가 열거한 조건만으로 판정되고, Regulation D의 다른 조항(예: §230.503)은 이 문장에 등장하지 않는다. 다음 §3.5가 그 (c)의 조건 목록을 실제로 열어본다. + +- **PASS/FAIL 반영**: 간접 ✕ — E-01이 관여하지 않는 층이다. 이 조문은 오히려 **E-01의 FAIL이 면제 성립에 닿지 않음을 구조적으로 보증**한다. 면제 판정은 A-03(전원 AI)·B-03 등 (c)(2) 라인의 부품이 담당한다. + +- **ERC-3643 변환**: Manifest `issuanceFramework = RegD506c`. 이 값이 R1 Recipe 활성화와 E-01의 G0(관련성) 게이트를 동시에 결정한다. + +### 3.5 Rule 506(c)(1) — 일반조건: §230.503이 없다 ⭐ (핵심) + +- **조항**: 17 C.F.R. §230.506(c)(1) — eCFR 현행본 (2013-07-24 채택분, 78 FR 44771; Title 17 최종개정 2026-06-25, 조회 2026-07-15) + +- **핵심 원문**: *Conditions to be met in offerings not subject to limitation on manner of offering* — (1) *General conditions.* To qualify for exemption under this section, sales must satisfy all the terms and conditions of §§ 230.501 and 230.502(a) and (d). + +- **한국어**: *청약 방법의 제한을 받지 않는 발행에서 충족되어야 할 조건* — (1) *일반조건.* 본조의 면제를 받으려면, sales는 §§ 230.501 및 230.502(a)와 (d)의 모든 terms and conditions를 충족해야 한다. + +- **쉬운 설명**: **이 문서에서 가장 중요한 한 문장이다.** 506(c) 면제의 조건 목록은 정확히 세 개뿐이다 — §230.501(정의), §230.502(a)(통합), §230.502(d)(전매제한). 여기에 **§230.503(Form D 제출)은 없다.** 비교하면 더 분명하다: 같은 규칙의 506(b)(1)도 “all the terms and conditions of §§ 230.501 and 230.502”만 인용하며 역시 §230.503을 부르지 않는다. 그리고 §230.502(c)(일반청약권유 금지)가 (c)(1)에서 빠진 것이 506(c)의 존재 이유인 것처럼, **§230.503이 애초에 어디에도 없는 것은 입법 설계**다. + + “쉽게 말하면” — 면제의 문은 세 개의 열쇠(501·502(a)·502(d))로 열린다. Form D는 그 문의 열쇠가 아니라, 문을 열고 들어간 뒤 관리사무소에 내야 하는 **입주 신고서**다. 신고서를 안 내면 관리규약 위반으로 과태료를 물지만, 이미 열린 문이 다시 잠기지는 않는다. + +- **PASS/FAIL 반영**: 직접 ⭐ — **E-01의 성격을 규정하는 조문이다.** E-01의 모든 FAIL 코드는 “면제 불성립”을 뜻하지 않는다. 따라서 E-01은 법문이 요구해서 세우는 게이트가 아니라, 제재·실격·주 정지 위험을 예방하려고 **우리가 스스로 세우는 보수적 운영 게이트**다(§6.3). 이 구분을 문서·테스트·거절 메시지 전반에서 유지한다. + +- **ERC-3643 변환**: `E01.legalNature = OPERATIONAL_GATE` (≠ `EXEMPTION_CONDITION`). 이 상수는 §6.2의 거절 메시지 문안과 §11의 예외승인 권한 설계를 좌우한다 — 면제 조건이 아니므로 Operator의 한시적 예외승인이 **법적으로는** 가능하다(다만 §6.3의 정책 판단이 별도로 요구된다). + +### 3.6 Rule 503(a)(1) — 제출 의무 본체: 15역일 (핵심) + +- **조항**: 17 C.F.R. §230.503(a)(1) — eCFR 현행본 (73 FR 10615, 2008-02-27; 81 FR 83553, 2016-11-21 개정) + +- **핵심 원문**: *When notice of sales on Form D is required and permitted to be filed.* (1) An issuer offering or selling securities in reliance on § 230.504 or § 230.506 must file with the Commission a notice of sales containing the information required by Form D (17 CFR 239.500) for each new offering of securities no later than 15 calendar days after the first sale of securities in the offering, unless the end of that period falls on a Saturday, Sunday or holiday, in which case the due date would be the first business day following. + +- **한국어**: *Form D에 의한 notice of sales가 요구되고 제출이 허용되는 시점.* (1) § 230.504 또는 § 230.506에 기대어 증권을 offering 또는 selling하는 issuer는, **각 새로운 발행(each new offering)마다**, 그 발행에서의 **최초 매도 후 15역일(15 calendar days)을 넘기지 않고** Form D(17 CFR 239.500)가 요구하는 정보를 담은 notice of sales를 Commission에 제출해야 한다. 다만 그 기간의 말일이 토요일·일요일 또는 공휴일에 해당하면, 마감일은 **그 다음 최초의 영업일**이 된다. + +- **쉬운 설명**: 네 개의 부품으로 뜯어 읽는다. **① 수범자** — “issuer … in reliance on § 230.504 or § 230.506”. 국적 제한이 없다(BUIDL 같은 BVI 펀드도 낸다, §3.0.1). Rule 500(d)에 따라 Reg D는 발행자 전용이므로 매도인·중개인은 수범자가 아니다. **② 단위** — “for each new offering”. 발행 건별이다. 한 발행자가 여러 발행을 하면 각각 Form D를 낸다(무엇이 “new offering”인지는 Rule 152 통합 규율의 문제 — §9·OD-E01-4). **③ 기산점** — “after the first sale”. 이것이 §3.15에서 다룰 함정이다. **④ 마감** — 15 calendar days(영업일이 아니라 **역일**). 다만 말일이 토·일·공휴일이면 다음 영업일로 밀린다. + + **부등호 규율(중요)**: “no later than 15 calendar days after”는 **경과일수 ≤ 15**가 적법이라는 뜻이다. 15일째 당일 제출은 **적법**이고, 16일째부터 지각이다(경과 > 15). 그리고 이 15일 계산은 주말·공휴일 연장 규칙과 결합해야만 완성된다 — **“> 15면 곧 위반”이 아니라 “> 조정된 마감일이면 위반”**이다. 이 조정을 빠뜨리면 적법한 발행에 지각 flag를 잘못 붙인다(§5.3). + +- **PASS/FAIL 반영**: 직접 ⭐ — G1(존재)과 G6(적시성)의 근거. 미제출 → `FORMD_NOT_FILED`(차단). 지각이지만 제출됨 → `FORMD_LATE_FILED`(**차단하지 않고 flag** — 면제가 유지되고 SEC 스스로 사후 제출을 권고하므로, §3.15·§6.2). + +- **ERC-3643 변환**: Manifest·오라클 필드 — `formDFiled: bool`, `filingDate: date`, `dateOfFirstSale: date`, `formDDueDate: date`(주말·공휴일 조정 후 확정값, off-chain 계산). 온체인 모듈은 `filingDate <= formDDueDate`만 비교한다(달력 연산을 온체인에서 하지 않는다 — §5.3 해설). + +### 3.7 Rule 503(a)(2)~(4) — 수정 제출: 오류·변경·연차 (핵심) + +- **조항**: 17 C.F.R. §230.503(a)(2), (a)(3), (a)(4) — eCFR 현행본 + +- **핵심 원문**: (2) An issuer may file an amendment to a previously filed notice of sales on Form D at any time. (3) An issuer must file an amendment to a previously filed notice of sales on Form D for an offering: (i) To correct a material mistake of fact or error in the previously filed notice of sales on Form D, as soon as practicable after discovery of the mistake or error; (ii) To reflect a change in the information provided in the previously filed notice of sales on Form D, as soon as practicable after the change, except that no amendment is required to reflect a change that occurs after the offering terminates or a change that occurs solely in the following information: … (G) The number of non-accredited investors who have invested in the offering, as long as the change does not increase the number to more than 35; (H) The total number of investors who have invested in the offering; … and (iii) Annually, on or before the first anniversary of the filing of the notice of sales on Form D or the filing of the most recent amendment to the notice of sales on Form D, if the offering is continuing at that time. (4) An issuer that files an amendment to a previously filed notice of sales on Form D must provide current information in response to all requirements of the notice of sales on Form D regardless of why the amendment is filed. + +- **한국어**: (2) issuer는 이미 제출한 Form D notice of sales에 대한 수정을 **언제든지** 제출할 수 있다. (3) issuer는 어느 발행에 관하여 다음의 경우 이미 제출한 Form D notice of sales의 수정을 제출**해야 한다**: (i) 이미 제출한 Form D notice of sales의 중요한 사실의 착오 또는 오류를 정정하기 위하여, 그 착오·오류를 발견한 후 **실행 가능한 한 신속히**; (ii) 이미 제출한 Form D notice of sales에 제공된 정보의 변경을 반영하기 위하여, 그 변경 후 실행 가능한 한 신속히. 다만 **발행이 종료된 후 발생한 변경** 또는 다음 정보에만 발생한 변경에 대하여는 수정이 요구되지 아니한다: … (G) 그 발행에 투자한 비적격투자자의 수(다만 그 변경으로 인해 그 수가 35명을 초과하게 되지 않는 한); (H) 그 발행에 투자한 투자자의 총수; … 그리고 (iii) **매년, 그 Form D notice of sales의 제출일 또는 가장 최근 수정의 제출일로부터 1주년이 되는 날 또는 그 이전에**, 그 시점에 발행이 계속되고 있는 경우. (4) 이미 제출한 Form D notice of sales의 수정을 제출하는 issuer는, 그 수정을 제출하는 이유가 무엇이든 관계없이, Form D notice of sales의 **모든 요구사항에 대하여 현재의 정보**를 제공해야 한다. + +- **쉬운 설명**: 세 종류의 수정 의무가 있는데 성질이 전혀 다르다. **(i)·(ii)는 사건 구동형**이다 — “as soon as practicable”이라는 기준은 날짜로 환산되지 않으므로 **기계가 판정할 수 없다**. **(iii)만이 날짜 구동형**이다 — “on or before the first anniversary”이므로 기계가 판정할 수 있다. 그래서 E-01은 (iii)만 게이트로 삼고 (i)·(ii)는 Operator 층으로 넘긴다(§11). 이 분리가 Pattern A 부품의 기율이다 — **판정 불가능한 것을 판정하는 척하지 않는다.** + + **(3)(ii)의 예외 목록이 중요한 이유**: 총 투자자 수(H)나 판매량(F)이 변해도 수정이 필요 없다. 즉 **거래가 일어날 때마다 Form D를 고칠 의무는 없다.** 이것은 E-01이 STATELESS인 이유 중 하나다 — 매 거래가 Form D 상태를 바꾸지 않는다. 다만 비적격투자자 수(G)는 **35명 초과로 넘어가는 순간** 예외에서 빠져 수정 의무가 생긴다(506(c)는 전원 AI이므로 이 분기는 데모에서 잠자지만, 라이브러리 완결성상 보존한다). + + **(4)는 함정이다**: 연차 수정 하나를 내려 해도 Form D **전체**를 현재 정보로 다시 채워야 한다. 즉 연차 수정은 “날짜만 갱신하는 형식적 절차”가 아니라 Item 1~16 전면 재작성이다. 운영 부담을 과소평가하면 마감을 놓친다(§11). + + **부등호 규율**: “on or before the first anniversary” → **≤ 1주년**이 적법. 1주년 당일 제출은 적법하고, 그 다음날부터 지연이다. + +- **PASS/FAIL 반영**: 직접 — G5(신선도)의 근거. `offeringOngoing == true`이고 `now > amendmentDueAt`이면 `FORMD_AMENDMENT_OVERDUE`(차단). (i)·(ii)는 게이트가 아니라 Operator flag(§11). + +- **ERC-3643 변환**: `offeringOngoing: bool`, `lastFilingOrAmendmentDate: date`, `amendmentDueAt: date`(= lastFilingOrAmendmentDate + 1년, 주말·공휴일 조정 반영). A-11(claim freshness)의 일반 규율과 **구조는 같고 근거가 다르다** — A-11의 유효기간은 정책 proxy이나, 여기의 1년은 **법정 수치**다(§6.3). + +### 3.8 Rule 503(b) — EDGAR 전자제출과 서명 (직접) + +- **조항**: 17 C.F.R. §230.503(b) — eCFR 현행본 + +- **핵심 원문**: *How notice of sales on Form D must be filed and signed.* (1) A notice of sales on Form D must be filed with the Commission in electronic format by means of the Commission's Electronic Data Gathering, Analysis, and Retrieval System (EDGAR) in accordance with EDGAR rules set forth in Regulation S-T (17 CFR Part 232). (2) Every notice of sales on Form D must be signed by a person duly authorized by the issuer. + +- **한국어**: *Form D notice of sales의 제출 방법과 서명.* (1) Form D notice of sales는, Regulation S-T(17 CFR Part 232)가 정하는 EDGAR 규칙에 따라, Commission의 EDGAR 시스템을 통해 **전자적 형식으로** Commission에 제출되어야 한다. (2) 모든 Form D notice of sales는 **issuer가 정당하게 권한을 부여한 자**에 의해 서명되어야 한다. + +- **쉬운 설명**: E-01에게 이 조문은 선물이다. **제출처가 EDGAR 하나로 고정**되어 있고, 종이 제출이 아예 받아들여지지 않으며(FAQ 답변 1), 결과물이 **기계가 읽을 수 있는 공개 데이터**로 남는다. 그래서 E-01은 A-계열처럼 사인(私人)의 증명서를 신뢰할 필요가 없다 — **연방정부가 운영하는 공적 등록부를 대조하면 된다.** 이것이 E-01을 Pattern B(증명서형)가 아니라 Pattern A(기계 판정형)로 분류하는 근거다(§8.1). + + 다만 실무적 유보가 하나 있다. 온체인 컨트랙트는 EDGAR를 직접 조회할 수 없다. 따라서 “공적 데이터”가 온체인에 도달하는 마지막 한 구간(oracle 또는 Manifest 주입)에서는 **신뢰 가정이 재도입된다.** E-01의 신뢰 구조는 “발행자의 자기주장”이 아니라 “**공적 사실의 온체인 전달 경로**”에 걸려 있다 — 성질이 다른 위험이며, 대응도 다르다(§8.2·§10·OD-E01-1). + + (2)의 서명 요건은 §3.12의 Terms of Submission과 결합할 때 의미가 커진다 — 그 서명은 단순 확인이 아니라 **Rule 506(d) 미해당 certification**을 포함한다. + +- **PASS/FAIL 반영**: 직접 — G2(진위)의 근거. 다만 E-01이 검증하는 “서명”은 Form D 자체의 서명이 아니라 **EDGAR 사실을 온체인에 전달한 attestation의 서명**이다(§4.2 책임경계). Form D 서명자의 권한 유무는 EDGAR 접수로 갈음하고 재검증하지 않는다. + +- **ERC-3643 변환**: `formDAttestation { accessionNumber, cik, filingDate, dateOfFirstSale, items[], signer, sig, observedAt }`. `signer ∈ trustedFormDOracles`(Manifest 지정)이며, `accessionNumber`가 EDGAR 원본으로의 역추적 키다. + + +### 3.9 Rule 507 — 실격은 자동이 아니다: injunction 요건 (직접) + +- **조항**: 17 C.F.R. §230.507 — eCFR 현행본 (54 FR 11374, 1989-03-20; 81 FR 83553, 2016-11-21 개정) + +- **핵심 원문**: *Disqualifying provision relating to exemptions under §§ 230.504 and 230.506.* (a) No exemption under § 230.504 or § 230.506 shall be available for an issuer if such issuer, any of its predecessors or affiliates have been subject to any order, judgment, or decree of any court of competent jurisdiction temporarily, preliminary or permanently enjoining such person for failure to comply with § 230.503. (b) Paragraph (a) of this section shall not apply if the Commission determines, upon a showing of good cause, that it is not necessary under the circumstances that the exemption be denied. + +- **한국어**: *§§ 230.504 및 230.506의 면제에 관한 실격 조항.* (a) issuer, 그 predecessors 또는 affiliates 중 어느 하나가 **§ 230.503의 불이행을 이유로** 관할권 있는 법원의 **잠정적·예비적 또는 영구적 유지명령(enjoining)**에 해당하는 order, judgment 또는 decree의 적용을 받은 적이 있는 경우, 그 issuer에게는 § 230.504 또는 § 230.506의 어떠한 면제도 available하지 아니한다. (b) Commission이 **good cause의 소명**에 따라 그 상황에서 면제를 부인할 필요가 없다고 판단하는 경우, 본조 (a)는 적용되지 아니한다. + +- **쉬운 설명**: 이 조문은 널리 오독된다. **“Form D를 안 내면 Rule 507로 면제가 박탈된다”는 말은 틀렸다.** 조문의 방아쇠는 “Rule 503 불이행”이 아니라 “Rule 503 불이행을 이유로 **법원의 유지명령을 받았을 것**”이다. 즉 세 단계가 필요하다 — ① Rule 503 위반 → ② SEC가 법원에 제소하여 injunction 획득 → ③ 그 이후의 504·506 발행이 실격. 2024년 제재 3건은 모두 **행정절차(§8A cease-and-desist)**였고 법원 injunction이 아니었으므로, 그 자체로는 Rule 507을 발동시키지 않는다(§3.14 해설 3). + + 두 가지 더 짚는다. **첫째, 실격의 시간 방향이 미래다.** “No exemption … shall be available”은 이미 끝난 발행을 소급해 무너뜨리는 것이 아니라 **앞으로의** 발행을 막는다. **둘째, 전염된다.** 대상이 issuer뿐 아니라 “any of its predecessors or affiliates”다 — 계열사 하나의 injunction이 그룹 전체의 사모 조달을 끊을 수 있다. 그리고 (b)의 good cause 예외는 **Commission의 재량**이지 권리가 아니다. + + “쉽게 말하면” — Rule 507은 즉시 발동하는 지뢰가 아니라, 법원 명령이라는 **신관(信管)이 꽂혀야** 터지는 폭탄이다. 확률은 낮지만 터지면 회사의 자본조달 능력 자체가 끊긴다. E-01이 방어하는 것은 이 낮은 확률의 치명적 결과다. + +- **PASS/FAIL 반영**: 간접 △ — E-01은 Rule 507 해당성을 직접 판정하지 않는다(법원 명령의 존부는 E-03의 bad actor 조회 인프라와 같은 계열의 문제다 — §9). E-01은 **507의 전제인 Rule 503 위반이 발생·누적되지 않도록** 상류에서 막는다. 다만 발행자에게 이미 §230.503 관련 injunction이 있는 경우의 처리는 E-03과의 경계 문제로 남긴다(OD-E01-5). + +- **ERC-3643 변환**: `issuerRule507Disqualified: bool`(Manifest, E-03 조회 결과와 병합). true이면 R1 Recipe 자체가 불성립이므로 E-01 이전에 차단된다. + +### 3.10 Rule 508 — 경미한 일탈 구제와 “전 조항 준수” 의무 (보조) + +- **조항**: 17 C.F.R. §230.508 — eCFR 현행본 (54 FR 11374, 1989-03-20; 57 FR 36473, 1992-08-13; 81 FR 83553, 2016-11-21 개정; 조회 2026-07-01 기준 본문) + +- **핵심 원문**: *Insignificant deviations from a term, condition or requirement of Regulation D.* (a) A failure to comply with a term, condition or requirement of § 230.504 or § 230.506 will not result in the loss of the exemption from the requirements of section 5 of the Act for any offer or sale to a particular individual or entity, if the person relying on the exemption shows: (1) The failure to comply did not pertain to a term, condition or requirement directly intended to protect that particular individual or entity; and (2) The failure to comply was insignificant with respect to the offering as a whole, provided that any failure to comply with paragraph (c) of § 230.502, paragraph (b)(2) of § 230.504 and paragraph (b)(2)(i) of § 230.506 shall be deemed to be significant to the offering as a whole; and (3) A good faith and reasonable attempt was made to comply with all applicable terms, conditions and requirements of § 230.504 or § 230.506. (b) A transaction made in reliance on § 230.504 or § 230.506 shall comply with all applicable terms, conditions and requirements of Regulation D. Where an exemption is established only through reliance upon paragraph (a) of this section, the failure to comply shall nonetheless be actionable by the Commission under section 20 of the Act. + +- **한국어**: *Regulation D의 term, condition 또는 requirement로부터의 경미한 일탈.* (a) § 230.504 또는 § 230.506의 term, condition 또는 requirement의 불이행은, 면제에 기대는 자가 다음을 소명하는 경우, 특정 개인 또는 법인에 대한 어떠한 offer or sale에 관하여도 법 제5조 요건으로부터의 면제 상실을 초래하지 아니한다: (1) 그 불이행이 **그 특정 개인 또는 법인을 직접 보호하기 위한** term, condition 또는 requirement에 관한 것이 아니었을 것; 그리고 (2) 그 불이행이 발행 전체에 비추어 **경미**하였을 것. 다만 § 230.502(c), § 230.504(b)(2) 및 **§ 230.506(b)(2)(i)**의 불이행은 발행 전체에 비추어 중대한 것으로 **간주**된다; 그리고 (3) § 230.504 또는 § 230.506의 모든 적용되는 terms, conditions and requirements를 준수하려는 **선의의 합리적 시도**가 있었을 것. (b) § 230.504 또는 § 230.506에 기대어 이루어진 거래는 Regulation D의 모든 적용되는 terms, conditions and requirements를 **준수해야 한다**. 면제가 오직 본조 (a)에 대한 의존을 통해서만 성립하는 경우, 그 불이행은 그럼에도 불구하고 법 **제20조**에 따라 Commission에 의해 **actionable**하다. + +- **쉬운 설명**: 이 조문은 E-01에 두 가지를 알려주는데, 둘 다 “언뜻 이럴 것 같다”와 반대다. + + **첫째, Rule 508(a)는 E-01의 근거가 아니다.** 508(a)는 “§ 230.504 또는 § 230.506의 term, condition or requirement”의 불이행을 다룬다. 그런데 §3.5에서 봤듯 Rule 503은 **애초에 506의 조건이 아니다.** 조건이 아닌 것을 어겼으니 508(a)의 구제를 논할 필요조차 없다 — Form D 미제출은 “경미한 일탈로 봐줘야 하는 흠”이 아니라 **면제 판정의 사정권 밖**이다. 실무 문헌이 종종 Form D 미제출을 508(a)의 “insignificant deviation” 틀로 설명하는데, 조문 경로가 어긋난 설명이다. + + **둘째, 508(b) 전단이 오히려 E-01의 근거에 가깝다.** “A transaction … shall comply with **all applicable terms, conditions and requirements of Regulation D**” — 여기서 범위가 “§230.504 or §230.506”이 아니라 **“Regulation D”** 전체로 넓어진다. §230.503은 Regulation D의 일부이므로 이 문장의 사정권 안이다. 즉 508(b) 전단은 “면제 성립과 무관하게 Reg D 전 조항을 지켜야 한다”는 독립 의무를 선언하고, 508(b) 후단은 그 위반이 **§20에 따라 Commission이 제소할 수 있는 사안**임을 확인한다. §3.14의 Commission order가 말하는 “the failure to comply with the requirements of Rule 503 itself is a violation”이 조문상 어디에 앉는지가 여기서 보인다. + + **참고 — 흔한 인용 오류**: 508(a)(2)의 중대 간주 목록을 “506(b)(2)(i) and (ii)”로 쓰는 문헌이 많으나, **현행 조문은 (b)(2)(i)만** 열거한다. 그리고 508(b) 후단의 제소 근거는 §8A가 아니라 **§20**이다. 두 지점 모두 verbatim 확인이 필요하다. + +- **PASS/FAIL 반영**: 간접 △ — E-01의 게이트 조건이 아니다. 508(a)는 경로가 다르고, 508(b)는 “왜 Rule 503 위반이 독립 위법인가”의 조문상 뒷받침이다. + +- **ERC-3643 변환**: 없음. §6.2의 “치유되지 않는 것과 치유되는 것”의 경계 서술에 반영된다. + +### 3.11 Rule 500(b)·(c)·(d) — 주법 경고, 비배타적 선택, 발행자 전용 (보조) + +- **조항**: 17 C.F.R. §230.500(b), (c), (d) — eCFR 현행본 (77 FR 18684, 2012-03-28; 78 FR 44804, 2013-07-24; 86 FR 3597, 2021-01-14 개정) + +- **핵심 원문**: (b) Nothing in Regulation D obviates the need to comply with any applicable state law relating to the offer and sale of securities. Regulation D is intended to be a basic element in a uniform system of federal-state limited offering exemptions consistent with the provisions of sections 18 and 19(c) of the Act (15 U.S.C. 77r and 77(s)(c)). In those states that have adopted Regulation D, or any version of Regulation D, special attention should be directed to the applicable state laws and regulations, including those relating to registration of persons who receive remuneration in connection with the offer and sale of securities, to disqualification of issuers and other persons associated with offerings based on state administrative orders or judgments, and to **requirements for filings of notices of sales**. (c) Attempted compliance with any rule in Regulation D does not act as an exclusive election; the issuer can also claim the availability of any other applicable exemption. For instance, an issuer's failure to satisfy all the terms and conditions of rule 506(b) (§ 230.506(b)) shall not raise any presumption that the exemption provided by section 4(a)(2) of the Act (15 U.S.C. 77d(2)) is not available. (d) Regulation D is available only to the issuer of the securities and not to any affiliate of that issuer or to any other person for resales of the issuer's securities. … + +- **한국어**: (b) Regulation D의 어떤 규정도 증권의 offer and sale에 관한 적용 가능한 **주법 준수의 필요를 배제하지 아니한다**. Regulation D는 법 제18조 및 제19(c)조와 부합하는 연방-주 통합 소액발행 면제 체계의 기본 요소로 의도된 것이다. Regulation D 또는 그 어떤 버전을 채택한 주에서는, 적용되는 주법·규정 — 증권의 offer and sale과 관련하여 보수를 받는 자의 등록, 주 행정명령·판결에 근거한 issuer 및 발행 관련자의 실격, 그리고 **notices of sales의 제출 요건**에 관한 것을 포함하여 — 에 특별한 주의를 기울여야 한다. (c) Regulation D의 어떤 규칙에 대한 준수 시도도 **배타적 선택으로 작용하지 아니한다**; issuer는 다른 적용 가능한 어떠한 면제의 availability도 주장할 수 있다. 예컨대 issuer가 rule 506(b)의 모든 terms and conditions를 충족하지 못했다는 사실은, 법 제4(a)(2)조의 면제가 available하지 않다는 어떠한 추정도 일으키지 아니한다. (d) Regulation D는 그 증권의 **issuer에게만** available하며, 그 issuer의 affiliate나 그 issuer 증권의 resales를 하는 다른 어떤 자에게도 available하지 아니하다. … + +- **쉬운 설명**: 세 항이 각각 E-01의 다른 면에 닿는다. + + **(b)** — SEC가 규칙 본문에서 직접 “**notices of sales의 제출 요건**”에 주의하라고 경고한다. 이것이 §3.13의 주(州) 라인이 이론이 아니라 실무임을 보여준다. 연방 Form D를 안 내면 주 신고의 기초 서류가 없어진다. + + **(c)** — 탈출구 조항이다. 그러나 예시가 **506(b)**로 되어 있다는 점을 놓치면 안 된다. 506(b)는 일반청약권유 금지가 조건이므로, 506(b)에 실패한 발행은 여전히 §4(a)(2)의 “public offering 아님”을 주장할 여지가 남는다. **506(c)는 다르다.** 506(c)는 일반청약권유를 **전제**하는 경로이므로, 그 발행이 506(c)에서 이탈하면 §4(b)의 보호막(§3.3)도 함께 벗겨져 그냥 public offering이 된다. Commission이 Release 33-11347 ¶8에서 정확히 그렇게 논증했다(§3.14). **즉 (c)의 탈출구는 506(b)에는 열려 있고 506(c)에는 사실상 닫혀 있다.** Decipher의 자산은 506(c)이므로 닫힌 쪽이다. + + **(d)** — 수범자 확인. Reg D는 발행자 전용이므로 Rule 503의 의무자도 발행자다. **E-01이 매도인(seller)을 보지 않는 이유**가 여기 있다 — 2차 거래의 매도인은 Reg D에 기대지 않으며(그쪽은 R2·C-00의 영역), Form D 의무도 없다. + +- **PASS/FAIL 반영**: 간접 △ — 게이트 조건은 아니다. (c)는 §6.3의 “왜 이 게이트를 완화할 수 없는가”의 논거, (d)는 §8.4의 부착 범위(R1 발행 라인 한정) 논거다. + +- **ERC-3643 변환**: `generalSolicitationUsed`(§3.3) + `stateNoticeFilings[]`(주별 신고 상태, Operator 대시보드 — §11). + +### 3.12 Form D (17 C.F.R. §239.500) + Terms of Submission — E-01이 읽는 필드 (직접) + +- **조항**: 17 C.F.R. §239.500 (Form D, notice of sales of securities under Regulation D and section 4(a)(5) of the Securities Act of 1933); Form D 서식 원본 SEC1972 (5/17), OMB Number 3235-0076 — ecfr.gov · sec.gov + +- **핵심 원문(서식 표지·Item 6·7·Terms of Submission 발췌)**: Intentional misstatements or omissions of fact constitute federal criminal violations. See 18 U.S.C. 1001. / **Item 6. Federal Exemptions and Exclusions Claimed (Select all that apply)** … Rule 506(b) … Rule 506(c) … Securities Act Section 4(a)(5) … Section 3(c)(1) … Section 3(c)(7) … / **Item 7. Type of Filing** — New Notice OR Amendment; Date of First Sale in this Offering: OR First Sale Yet to Occur / **Terms of Submission.** In Submitting this notice, each issuer named above is: Notifying the SEC and/or each State in which this notice is filed of the offering of securities described and undertaking to furnish them, upon written request, in accordance with applicable law, the information furnished to offerees. Irrevocably appointing each of the Secretary of the SEC and the Securities Administrator or other legally designated officer of the State in which the issuer maintains its principal place of business and any State in which this notice is filed, as its agents for service of process … **Certifying that, if the issuer is claiming a Regulation D exemption for the offering, the issuer is not disqualified from relying on Rule 504 or Rule 506 for one of the reasons stated in Rule 504(b)(3) or Rule 506(d).** + +- **한국어(발췌)**: 사실의 **고의적 허위기재 또는 누락은 연방 형사범죄**를 구성한다. 18 U.S.C. 1001 참조. / **Item 6. 주장하는 연방 면제 및 적용제외 (해당되는 것을 모두 선택)** … Rule 506(b) … Rule 506(c) … 증권법 제4(a)(5)조 … 제3(c)(1)조 … **제3(c)(7)조** … / **Item 7. 제출 유형** — 신규 통지 또는 수정; 이 발행에서의 **최초 매도일**: 또는 최초 매도 미발생 / **제출의 조건.** 이 통지를 제출함으로써 위에 기재된 각 issuer는: 기재된 증권 발행에 관하여 SEC 및/또는 이 통지가 제출되는 각 주에 통지하고, 적용 법률에 따라 서면 요청이 있는 경우 offerees에게 제공된 정보를 그들에게 제공할 것을 약속하며; SEC 사무국장과 issuer가 주된 영업소를 두는 주 및 이 통지가 제출되는 각 주의 증권감독관 또는 기타 법정 지정 공무원 각각을 **철회 불가능하게 송달대리인으로 선임**하며; **issuer가 그 발행에 관하여 Regulation D 면제를 주장하는 경우, 그 issuer는 Rule 504(b)(3) 또는 Rule 506(d)에 규정된 사유 중 어느 하나로 인하여 Rule 504 또는 Rule 506에 기대는 것이 실격되지 아니함을 확인(certifying)**한다. + +- **쉬운 설명**: Form D는 16개 Item으로 이루어지며, 그중 E-01이 실제로 읽는 것은 소수다. + + | Item | 내용 | E-01의 사용 | + | --- | --- | --- | + | 1 | Issuer's Identity (명칭·설립지·유형) | 발행자 동일성 보조 (CIK가 주 키) | + | 4 | Industry Group (Pooled Investment Fund → Other Investment Fund + 등록투자회사 여부) | R3 정합 보조 | + | **6** | **Federal Exemptions and Exclusions Claimed** | **G4 정합 게이트의 대조 대상 (핵심)** | + | **7** | **Type of Filing + Date of First Sale** | **G6 적시성의 기산점 (핵심)** | + | 8 | Duration of Offering (1년 초과 의도?) | 연차 수정 필요성 예측 (G5 보조) | + | 9 | Type(s) of Securities Offered (Pooled Investment Fund Interests 등) | B-02·B-03 정합 보조 | + | 12 | Sales Compensation + **States of Solicitation** | 주 신고 대상 주 목록 (§11 Operator) | + | 13 | Offering and Sales Amounts (Indefinite 가능) | 참고 | + | 14 | Investors (비적격투자자 수 / 총 투자자 수) | A-03·D-01과 대조 가능 (참고, 게이트 아님) | + + **Item 6이 왜 게이트인가**: “Select all that apply”이므로 발행자는 여러 면제를 동시에 주장할 수 있다. BUIDL이 Rule 506(c)와 Section 3(c)(7)을 함께 체크한 것이 그 예다(§3.0.1). Manifest가 `issuanceFramework=RegD506c`이고 R3가 활성인데 Form D의 Item 6에 506(c)나 3(c)(7)이 없다면, **우리 시스템의 법적 자기서술과 발행자의 공적 신고가 어긋난 것**이다. 이 불일치는 B-01(manifest 정합)이 아니라 E-01이 잡는다 — B-01은 Manifest ↔ 온체인 설정의 일치를 보증하고, E-01은 Manifest ↔ **공적 신고**의 일치를 본다(§9). + + **Terms of Submission의 세 번째 항이 결정적이다**: Form D 서명은 단순 제출 행위가 아니라 **Rule 506(d)(bad actor) 미해당의 적극적 확인**이다. 그리고 표지의 18 U.S.C. 1001 경고가 그 확인에 형사책임을 붙인다. **즉 유효한 Form D의 존재는 그 자체로 E-03(bad actor 차단)에 대한 발행자의 서명된 진술이 존재한다는 뜻이다.** E-01과 E-03이 같은 R1 전용 부품이면서 서로 다른 층에서 만나는 지점이다(§9). + + 두 번째 항(송달대리인 철회불가 선임)도 실무상 중요하다 — Form D 제출은 주 감독관에게 **관할권을 부여하는 행위**를 포함한다. 이것이 §3.13의 주 정지권이 작동할 수 있는 절차적 기반이다. + +- **PASS/FAIL 반영**: 직접 ⭐ — G3(동일성: `cik`)와 G4(정합: `items[]`)의 근거. Item 6 불일치 → `FORMD_EXEMPTION_MISMATCH`(차단). + +- **ERC-3643 변환**: `formDAttestation.items: bytes32[]` — enum `{RULE_504B1, RULE_504B1_I, RULE_504B1_II, RULE_504B1_III, RULE_506B, RULE_506C, SEC_4A5, SEC_3C1, …, SEC_3C7, …}`. G4 판정: `items ∋ RULE_506C` ∧ (R3 활성 → `items ∋ SEC_3C7`). + +### 3.13 증권법 §18(b)(4)(F)·(c)(2)(A)·(c)(3) — 주(州) 통지신고와 정지권 (핵심) + +- **조항**: Securities Act of 1933 §18, 15 U.S.C. §77r(b)(4)(F), (c)(2)(A), (c)(3) — uscode.house.gov (2026-05-27 현재). 1996년 NSMIA(Pub. L. 104-290 §102(a)) 신설, 2015년 FAST Act(Pub. L. 114-94 §76001(b))로 (b)(4) 항 재지정. + +- **핵심 원문**: **(b)(4)** *Exemption in connection with certain exempt offerings.* A security is a covered security with respect to a transaction that is exempt from registration under this subchapter pursuant to— … **(F) Commission rules or regulations issued under section 77d(2) of this title, except that this subparagraph does not prohibit a State from imposing notice filing requirements that are substantially similar to those required by rule or regulation under section 77d(2) of this title that are in effect on September 1, 1996; or** … / **(c)(2)(A)** *Notice filings permitted.* Nothing in this section prohibits the securities commission (or any agency or office performing like functions) of any State from requiring the filing of any document filed with the Commission pursuant to this subchapter, together with annual or periodic reports of the value of securities sold or offered to be sold to persons located in the State (if such sales data is not included in documents filed with the Commission), solely for notice purposes and the assessment of any fee, together with a consent to service of process and any required fee. / **(c)(3)** *Enforcement of requirements.* Nothing in this section shall prohibit the securities commission (or any agency or office performing like functions) of any State from suspending the offer or sale of securities within such State as a result of the failure to submit any filing or fee required under law and permitted under this section. + +- **한국어**: **(b)(4)** *특정 면제발행 관련 적용제외.* 어느 증권은 본 편에 따라 등록이 면제되는 거래에 관하여 다음에 의할 때 covered security에 해당한다 — … **(F) 제77d(2)조[§4(a)(2)] 하에서 발령된 Commission의 rules or regulations. 다만 본 호는, 1996년 9월 1일 시점에 시행 중인 제77d(2)조 하의 rule or regulation이 요구하는 것과 실질적으로 유사한(substantially similar) notice filing 요건을 주가 부과하는 것을 금지하지 아니한다;** … / **(c)(2)(A)** *통지신고 허용.* 본조의 어떤 규정도, 주의 증권감독위원회가 — 오직 **통지 목적 및 수수료 부과를 위하여** — 본 편에 따라 Commission에 제출된 문서의 제출을, 그 주에 소재한 자에게 매도되었거나 매도될 증권 가액의 연차 또는 정기 보고서(그 판매 자료가 Commission에 제출된 문서에 포함되지 않은 경우)와 함께, 송달동의 및 요구되는 수수료와 함께 요구하는 것을 금지하지 아니한다. / **(c)(3)** *요건의 집행.* 본조의 어떤 규정도, 주의 증권감독위원회가 **법이 요구하고 본조가 허용하는 어떠한 filing 또는 fee의 미제출을 이유로** 그 주 내에서의 증권의 **offer or sale을 정지하는 것을 금지하지 아니한다**. + +- **쉬운 설명**: 이 세 조문이 함께 만드는 구조가 E-01의 실무적 존재 이유다. + + **① 선점**: (b)(4)(F)에 의해 Rule 506 증권은 covered security가 되고, 주는 등록·심사를 요구할 수 없다. 여기서 “Commission rules or regulations issued under section 77d(2)”라는 문언이 중요하다 — 506(c)가 일반청약권유를 허용함에도 여전히 §4(2) 하의 규칙으로 남는 이유는 JOBS Act §201(a)(1) 후단이 그렇게 못 박았기 때문이다(§3.3). **그 한 문장이 없었으면 506(c) 증권은 covered security가 아니었다.** + + **② 그러나 단서가 통지신고를 남겼다**: (b)(4)(F)의 “except that this subparagraph does not prohibit a State from imposing notice filing requirements that are substantially similar to those required by rule or regulation under section 77d(2) … in effect on September 1, 1996.” 1996년 9월 1일 시점의 §4(2) 하 규칙이 요구하던 notice filing — 그것이 바로 **당시의 Rule 503(Form D 제출)**이다. 즉 이 단서는 **주가 “Form D와 실질적으로 유사한 것”을 요구할 권한을 명문으로 보존**한다. (c)(2)(A)가 이를 재확인한다 — 주는 “SEC에 제출된 문서”를 통지 목적으로 요구할 수 있고, 실무상 그 문서가 Form D 사본이다. + + **③ 그리고 (c)(3)이 이빨을 준다**: 주는 filing이나 fee의 미제출을 이유로 **그 주 안에서의 offer or sale을 정지**할 수 있다. 주의하라 — 이것은 “등록을 요구한다”가 아니라 “**거래를 멈춘다**”이다. NSMIA가 주에서 빼앗은 것은 심사권이지 집행권이 아니다. + + **결론이 반직관적이다**: Form D 미제출은 **연방 면제를 깨지 않는다**(§3.5). 그런데 **주는 그 주 안에서 판매를 정지시킬 수 있다.** “면제는 살아 있는데 거래가 멈춘다” — 발행자에게는 실질적으로 같은 결과다. 그리고 우리 시스템처럼 **국경 없이 유통되는 온체인 자산**에서 “특정 주에서만 정지”는 기술적으로 매우 다루기 어려운 상태다(A-02의 관할 필터와 결합해야 한다 — §9·OD-E01-3). + + “쉽게 말하면” — 연방은 “문은 안 잠근다, 대신 벌금을 물린다”이고, 주는 “우리 동네에서는 아예 못 팔게 하겠다”다. 후자가 더 즉각적이다. + +- **PASS/FAIL 반영**: 직접 ⭐ — E-01 게이트의 **정당화 근거**다. §3.5가 “법이 요구하는 게이트가 아님”을 확정했다면, §3.13은 “그럼에도 게이트를 세워야 하는 이유”를 준다. 다만 주별 정지 상태 자체의 판정은 E-01의 범위 밖이며(Operator 대시보드 + A-02 연계), E-01은 그 선행 원인인 Form D 미제출을 막는다. + +- **ERC-3643 변환**: `stateNoticeFilings[state] = { filed: bool, feePaid: bool, suspended: bool }` (Manifest/Operator). `suspended == true`인 주가 있으면 A-02의 `allowedJurisdictions`에서 해당 주를 제외하는 것이 정합적 처리다(OD-E01-3). + +### 3.14 Release No. 33-11347 (2024-12-20) — Commission의 이중 명제 (핵심 Layer 3) + +- **조항**: *In the Matter of Pipe Technologies Inc.*, Securities Act of 1933 Release No. 11347, Administrative Proceeding File No. 3-22377 (Dec. 20, 2024) — Order Instituting Cease-and-Desist Proceedings, Pursuant to Section 8A of the Securities Act of 1933, Making Findings, and Imposing a Cease-and-Desist Order — sec.gov. 동일자 관련: SEC Press Release 2024-210 (3건 동시 제재). + +- **핵심 원문**: **¶6** — Under Rule 503 of Regulation D, an issuer offering or selling securities in reliance on Rule 504 or 506 must file a notice of sales on Form D with the Commission for each new offering of securities no later than 15 calendar days after the first sale of securities in the offering. **While a failure to provide such notice does not result in a loss of the exemption from Section 5, the failure to comply with the requirements of Rule 503 itself is a violation of the Securities Act and rules promulgated thereunder.** / **¶8** — Because Respondent engaged in general solicitation, the offerings could not have been conducted as exempt offerings under Section 4(a)(2) of the Securities Act and therefore could not have been conducted without reliance on Rule 504 or Rule 506(c) of Regulation D. Accordingly, Respondent needed to file a Form D for each offering, but Respondent failed to timely file Forms D for all of these offerings. / **¶3(발췌)** — When an issuer does not follow the requirements to file a Form D (or amend its existing Form D filing) it has multiple negative effects. … / **IV.A** — Pursuant to Section 8A of the Securities Act, Respondent cease and desist from committing or causing any violations and any future violations of Rule 503 of Regulation D of the Securities Act. + +- **한국어**: **¶6** — Regulation D의 Rule 503에 따라, Rule 504 또는 506에 기대어 증권을 offering 또는 selling하는 issuer는 각 새로운 발행마다 그 발행에서의 최초 매도 후 15역일을 넘기지 않고 Form D에 의한 notice of sales를 Commission에 제출해야 한다. **그러한 통지의 불이행이 제5조로부터의 면제 상실을 초래하지는 않지만, Rule 503의 요건 불이행 그 자체는 증권법 및 그에 따라 제정된 규칙들의 위반이다.** / **¶8** — Respondent가 general solicitation에 관여했기 때문에, 그 발행들은 증권법 제4(a)(2)조에 따른 면제발행으로 이루어질 수 없었고 따라서 Regulation D의 Rule 504 또는 Rule 506(c)에 대한 의존 없이는 이루어질 수 없었다. 따라서 Respondent는 각 발행에 대해 Form D를 제출해야 했으나, 이 모든 발행에 대해 Forms D를 적시에 제출하지 못했다. / **IV.A** — 증권법 제8A조에 따라, Respondent는 증권법 Regulation D의 Rule 503의 어떠한 위반 및 장래의 어떠한 위반도 범하거나 야기하는 것을 중지하고 삼갈 것을 명한다. + +- **쉬운 설명**: 이 문서 전체에서 가장 무거운 인용이다. 이유가 셋이다. + + **해설 1 — Commission 자신의 진술이다.** SEC의 해석은 여러 층위로 나온다. staff의 C&DI나 FAQ는 “Division의 견해이며 법적 효력이 없다”는 면책이 붙는다(§3.15). 그러나 이것은 **Commission이 발한 order**다 — 위원회 자신이 의결한 문서이고, 면책 문구가 없다. “면제는 유지된다 **∧** Rule 503 위반은 성립한다”는 이중 명제가 이보다 강한 권위로 확인된 예는 없다. + + **해설 2 — ¶8이 506(c)의 탈출구를 봉쇄한다.** Commission의 논증 순서를 그대로 따라가 보면: 일반청약권유를 했다 → 그러므로 §4(a)(2)로는 애초에 불가능했다 → 그러므로 Rule 504나 506(c)에 의존할 수밖에 없었다 → **그러므로 Form D 의무가 발생했다.** 이 사슬은 Rule 500(c)의 “비배타적 선택”이 506(c) 발행에서 작동하지 않음을 Commission이 실제 사건에서 적용한 것이다(§3.11 해설). **Decipher의 자산은 설계상 일반청약권유를 전제하므로, 이 사슬이 그대로 적용된다.** + + **해설 3 — 그러나 이것은 §8A 행정절차이지 법원 injunction이 아니다.** 제재 내용은 cease-and-desist + 민사제재금이었다. Rule 507의 방아쇠(법원의 enjoining order)는 당겨지지 않았다. 즉 **2024년 3건의 피제재자들은 면제를 잃지도, Rule 507로 실격되지도 않았다 — 돈을 내고 “다시는 안 그러겠다”는 명령을 받았다.** 규모는 $60,000(Re-Envision Wealth) / $195,000(Pipe Technologies) / $175,000(Underdog Sports Holdings)였고, Pipe의 경우 최소 1억 달러 단위(최소 $250 million 조달, 최소 100명 투자자, 최소 140명 접촉)의 발행에 대한 것이었다. **조달액 대비 제재금은 작다.** 이 비율이 곧 리스크 계산의 재료이며, “그래도 게이트를 세울 것인가”는 §6.3의 정책 판단이다 — 다만 제재금은 결과의 하나일 뿐이고, cease-and-desist 명령이 남으면 **이후 위반이 곧바로 가중 사유**가 된다는 점, 그리고 주 정지권(§3.13)은 별개라는 점을 함께 계산해야 한다. + + **해설 4 — ¶3은 Form D의 목적을 Commission이 직접 말한 유일한 최근 문헌이다.** §1(2)에서 인용한 세 가지 폐해가 그것이다. 이 문단은 향후 규제 논증서에서 “왜 우리 시스템이 Form D 상태를 게이트로 삼는가”를 설명할 때 인용 가치가 높다. + +- **PASS/FAIL 반영**: 직접 ⭐ — E-01 게이트의 **성격 규정과 정당화를 동시에** 제공한다. ¶6 전단 → E-01의 FAIL은 면제 판정이 아니다(§6.2 메시지 문안). ¶6 후단 + IV.A → 그럼에도 실재하는 제재 위험이다(§6.3 게이트 정당화). ¶8 → 506(c) 자산에서는 회피 경로가 없다(§5.1). + +- **ERC-3643 변환**: 없음(해석 층). §6.2의 매수인 대면 메시지와 내부 메시지 분리 설계에 직접 반영된다 — 매수인에게 “이 자산은 미등록 위법 증권입니다”라고 말하면 **틀린 말**이다. + +### 3.15 Form D FAQ 답변 1·5 / Release 33-9416 — 기산점·치유 경로와 미채택 제안 (보조) + +- **조항**: SEC Division of Corporation Finance, *Frequently Asked Questions and Answers on Form D* (Jan. 22, 2026; last reviewed or updated Mar. 17, 2026) 답변 1·5 — sec.gov. / SEC, *Amendments to Regulation D, Form D and Rule 156*, Release No. 33-9416; 34-69960; IC-30595; File No. S7-06-13 (July 10, 2013) (**제안**; 78 FR 44806, 2013-07-24; 의견제출기간 재개 78 FR 61222, 2013-10-03) — sec.gov. + +- **핵심 원문**: **FAQ 면책** — The statements in these FAQs represent the views of the Division of Corporation Finance. This guidance is not a rule, regulation, or statement of the Securities and Exchange Commission. Further, the Commission has neither approved nor disapproved its content. This guidance, like all staff guidance, has no legal force or effect: it does not alter or amend applicable law, and it creates no new or additional obligations for any person. / **답변 1(발췌)** — For Form D, the date of first sale is the date on which the first investor is irrevocably contractually committed to invest. … The SEC does not charge any filing fee for a Form D notice or amendment. In addition, paper filings of Forms D are not accepted. / **답변 5** — Rule 503(a) of Regulation D requires the filing of a Form D no later than 15 calendar days after the first sale of securities in an offering conducted in reliance on Regulation D. However, that requirement is not a condition to the availability of the Regulation D exemptions under Rule 504, Rule 506(b) or Rule 506(c). Rule 507 states some of the potential consequences of the failure to comply with Rule 503. Issuers who did not file a required Form D within the required 15 calendar day period should make a good faith effort to file the Form D as soon as practicable. + +- **한국어**: **면책** — 이 FAQ의 진술은 Division of Corporation Finance의 견해를 나타낸다. 이 가이던스는 rule, regulation 또는 SEC의 statement가 아니다. 나아가 Commission은 그 내용을 승인하지도 부인하지도 않았다. 모든 staff 가이던스와 마찬가지로 이 가이던스는 **법적 효력이 없다** — 적용 법률을 변경·수정하지 않으며 누구에게도 새로운 의무를 창설하지 않는다. / **답변 1(발췌)** — Form D의 목적상, **최초 매도일이란 최초의 투자자가 철회 불가능하게 계약상 투자를 약정한 날**이다. … SEC는 Form D 통지 또는 수정에 대해 어떠한 수수료도 부과하지 않는다. 또한 Form D의 종이 제출은 받아들여지지 않는다. / **답변 5** — Regulation D의 Rule 503(a)는 Regulation D에 기대어 이루어진 발행에서의 최초 매도 후 15역일을 넘기지 않고 Form D를 제출할 것을 요구한다. **그러나 그 요건은 Rule 504, Rule 506(b) 또는 Rule 506(c)에 따른 Regulation D 면제의 availability에 대한 조건이 아니다.** Rule 507은 Rule 503 불이행의 잠재적 결과 중 일부를 규정한다. 요구되는 15역일 기간 내에 요구되는 Form D를 제출하지 못한 issuer는 **실행 가능한 한 신속히 Form D를 제출하려는 선의의 노력을 기울여야 한다.** + +- **쉬운 설명**: 세 가지를 얻는다. + + **① 기산점(답변 1) — E-01 최대의 함정.** “irrevocably contractually committed to invest”는 온체인 이벤트가 아니다. Form D 서식의 지침은 한 걸음 더 나간다 — “could be the date on which the issuer receives the investor's subscription agreement or check”(청약계약서나 수표를 받은 날일 수 있다). **즉 기산점은 토큰 mint보다, 대금 결제보다, 심지어 청약 승낙보다 앞설 수 있다.** 온체인 시스템의 자연스러운 본능(“첫 mint 트랜잭션의 블록 타임스탬프를 쓰자”)을 따르면 **기산점을 늦게 잡아 마감을 놓친다.** 게다가 이 판정은 계약 조건에 달렸으므로 **기계가 도출할 수 없다** — 반드시 off-chain에서 확정해 Manifest로 주입해야 한다(§4.2·OD-E01-2). 참고로 서식 지침은 “A mandatory capital commitment call does not constitute a new offering”이라고도 하여, 의무적 캐피털 콜은 기존 발행 하의 것이므로 새 Form D가 불필요함을 밝힌다. + + **② 치유 경로(답변 5 마지막 문장).** SEC staff 자신이 지각 제출을 **권고**한다. 이것이 E-01이 `FORMD_LATE_FILED`를 차단이 아니라 flag로 처리하는 근거다 — 제출되지 않은 상태를 유지하는 것보다 늦게라도 제출하는 것이 규제당국이 원하는 방향이며, 그 상태의 자산을 우리가 차단하면 **SEC가 권장하는 시정을 한 발행자를 벌하는** 셈이 된다(§6.2). + + **③ 그러나 이것은 staff 견해다.** 면책 문구가 명시하듯 법적 효력이 없다. 다행히 답변 5의 실질(“not a condition”)은 **조문 자체(§3.5)와 Commission order(§3.14)로 독립적으로 뒷받침**되므로, staff 가이던스에 의존하지 않아도 결론이 선다. 우리 문서는 이 순서를 유지한다 — **조문 → Commission order → staff 해석**. staff 해석만이 유일한 근거인 명제(예: 기산점 정의의 구체화)는 그 취약성을 명시한다(OD-E01-2). + + **④ Release 33-9416 — 채택되지 않은 미래.** 2013년 SEC는 506(c) 도입과 **같은 날** 제안을 냈다: (a) 506(c) 발행에서 general solicitation 개시 **15일 전** Form D 사전제출(Advance Form D), (b) 발행 종료 후 closing amendment, (c) 일반청약권유 자료의 legend·제출, (d) **Form D 요건 미준수 시 1년간 Rule 506 사용 금지**. 만약 (d)가 채택되었다면 **E-01은 성격이 완전히 달랐을 것이다** — Form D 불이행이 곧 면제 차단이 되어 진짜 법정 게이트가 된다. 그러나 채택되지 않았다. 증거는 조문 자체다 — 현행 Rule 503에 사전제출·closing amendment 조항이 없고, 현행 Rule 507은 여전히 법원 injunction을 요구한다(§3.9). **제안 텍스트를 현행법으로 인용하는 실무 문헌이 드물지 않으므로 주의한다.** 이 제안이 장래 채택되면 E-01의 `legalNature`가 `OPERATIONAL_GATE`에서 `EXEMPTION_CONDITION`으로 바뀌어야 하며, 그것이 본 부품의 최대 변경 위험이다(OD-E01-7). + +- **PASS/FAIL 반영**: 보조 △ — 답변 1은 `dateOfFirstSale`의 정의(G6 입력), 답변 5는 `FORMD_LATE_FILED`의 비차단 처리(§6.2)의 근거. 33-9416은 게이트 근거가 아니라 **부(不)근거** — 채택되지 않았음을 명시하기 위한 인용이다. + +- **ERC-3643 변환**: `dateOfFirstSale`은 온체인 이벤트에서 도출 금지 — Manifest 주입 필드로 고정하고, 그 산출 근거(청약계약 확정일)를 Operator가 문서화한다(§11). + + +### 3.19 Sub-요건 분해 매트릭스 — 모든 PASS/FAIL 경로 + +법조문의 요건을 더 못 쪼개는 사실 단위로 분해하고, 각 단위가 어느 게이트·어느 코드로 귀결되는지를 전부 나열한 표다. “예시”가 아니라 **전수**다. + +| # | Sub-요건 (사실 단위) | 근거 | 게이트 | 충족 시 | 불충족 시 | 판정 가능성 | +| --- | --- | --- | --- | --- | --- | --- | +| S1 | 이 자산의 발행이 Rule 504 또는 506에 기대고 있는가 | Rule 503(a)(1) 수범자 요건 | G0 | 다음 단계 | **P0 PASS (미부착)** — Reg D 발행이 아니면 Rule 503 의무 자체가 없음 | 결정론 ○ (Manifest) | +| S2 | 그 발행에 대한 Form D notice of sales가 Commission에 제출되었는가 | Rule 503(a)(1) “must file” | G1 | 다음 단계 | **FAIL `FORMD_NOT_FILED`** | 결정론 ○ (EDGAR) | +| S3 | 그 제출 사실이 신뢰할 수 있는 경로로 온체인에 전달되었는가 | Rule 503(b)(1) EDGAR + 시스템 신뢰 구조 | G2 | 다음 단계 | **FAIL `FORMD_ATTESTATION_INVALID`** | 결정론 ○ (서명 검증) | +| S4 | 제출자가 이 자산의 발행자와 동일한가 (CIK 일치) | Rule 500(d) 발행자 전용 + Rule 503(a)(1) | G3 | 다음 단계 | **FAIL `FORMD_ISSUER_MISMATCH`** | 결정론 ○ | +| S5 | 그 Form D가 이 발행(offering)에 대한 것인가 | Rule 503(a)(1) “for each new offering” | G3 | 다음 단계 | **FAIL `FORMD_ISSUER_MISMATCH`** (offeringId 불일치 포함) | 결정론 △ — “new offering” 경계는 Rule 152 통합 판단에 의존 (OD-E01-4) | +| S6 | Item 6에 Rule 506(c)가 선택되어 있는가 | Form D Item 6 + Manifest `issuanceFramework` | G4 | 다음 단계 | **FAIL `FORMD_EXEMPTION_MISMATCH`** | 결정론 ○ | +| S7 | (R3 활성 시) Item 6에 Section 3(c)(7)이 선택되어 있는가 | Form D Item 6 + R3 Recipe | G4 | 다음 단계 | **FAIL `FORMD_EXEMPTION_MISMATCH`** | 결정론 ○ | +| S8 | 발행이 계속 중인가 | Rule 503(a)(3)(iii) “if the offering is continuing at that time” | G5 | S9로 | S9 건너뜀 (종료된 발행은 수정 의무 없음 — 503(a)(3)(ii) 단서) | 결정론 △ — “계속 중” 판단은 Rule 152(d)(1)에 의존 (OD-E01-4) | +| S9 | 최근 제출·수정으로부터 1주년이 지나지 않았는가 (≤ 1주년) | Rule 503(a)(3)(iii) “on or before the first anniversary” | G5 | 다음 단계 | **FAIL `FORMD_AMENDMENT_OVERDUE`** | 결정론 ○ | +| S10 | 최초 매도 후 조정된 마감일 이내에 제출되었는가 (≤ 마감일) | Rule 503(a)(1) “no later than 15 calendar days” + 주말·공휴일 연장 | G6 | **P1 PASS** | **PASS + FLAG `FORMD_LATE_FILED`** (차단 아님 — §3.15 답변 5) | 결정론 ○ (마감일은 off-chain 확정) | +| S11 | 중요한 사실의 착오·오류가 있는가 | Rule 503(a)(3)(i) “material mistake of fact or error” | — | — | **게이트 없음** → Operator flag (§11) | **판정 불가 ✕** — “material” 판단은 기계 밖 | +| S12 | 기재 정보에 변경이 있었고 반영되었는가 | Rule 503(a)(3)(ii) “as soon as practicable after the change” | — | — | **게이트 없음** → Operator flag (§11) | **판정 불가 ✕** — “as soon as practicable”은 날짜로 환산 불가 | +| S13 | 서명자가 발행자로부터 정당한 권한을 부여받았는가 | Rule 503(b)(2) “duly authorized by the issuer” | — | — | **게이트 없음** — EDGAR 접수로 갈음 | **판정 불가 ✕** — 내부 수권의 존부는 외부에서 확인 불가 | +| S14 | Terms of Submission의 Rule 506(d) certification이 진실한가 | Form D Terms of Submission | — | — | **E-03 소관** (§9) | 판정 불가 ✕ (E-01 범위 밖) | +| S15 | 주(州) notice filing이 되어 있는가 / 정지 상태인가 | §18(b)(4)(F) 단서 · (c)(2)(A) · (c)(3) | — | — | **게이트 없음** → Operator 대시보드 + A-02 연계 (OD-E01-3) | 결정론 △ — 주별 확인 경로 미확립 | + +**이 표가 말하는 것.** 15개 사실 단위 중 **기계가 판정하는 것은 8개(S1~S10 중 S8 일부 제외)**, **판정하지 않고 넘기는 것이 5개(S11~S15)**다. Pattern A 부품의 규율은 여기서 나온다 — **“as soon as practicable”·“material”·“duly authorized” 같은 문언은 코드가 판정할 수 없으며, 판정하는 척하면 법적으로 틀린다.** 이들은 게이트가 아니라 Operator 층의 감시 대상으로 내려간다(§11). 이 분리를 흐리는 순간, 코드가 할 수 없는 판단을 하는 척하게 된다(리서치 플랜 §5의 패턴 지정 원칙). + +**결정성 확보의 세 지점.** S5·S8은 “무엇이 하나의 offering인가”라는 Rule 152 통합 문제에 의존하므로 본래 △(비결정)다. E-01은 이를 **Manifest의 `offeringId` 지정으로 결정화**한다 — 즉 법적 통합 판단은 off-chain에서 변호사가 하고, 그 결과가 식별자로 주입되면 E-01은 그 식별자를 결정론적으로 대조한다. 같은 기법으로 S10의 마감일도 off-chain에서 달력 연산(주말·공휴일)을 마친 확정 날짜로 주입한다. **비결정성을 결정성으로 바꾸는 방법은 “코드가 더 똑똑해지는 것”이 아니라 “판단 주체를 명시하고 그 산출물을 입력으로 받는 것”이다.** + +### 3.20 ERC-3643 변환 총정리 — Compliance Module 매핑 (claim.basis 해당 없음) + +E-01은 기계 판정형이며 **사람의 자격을 판정하지 않으므로** A-13류의 claim.topic·claim.basis enum을 쓰지 않는다. ONCHAINID도 조회하지 않는다 — 검사 대상이 매수인이 아니라 **자산·발행자**이기 때문이다. 변환 형태는 ERC-3643/T-REX의 Modular Compliance에 결합하는 커스텀 모듈(`FormDNoticeModule`, `IModule` 구현) + Manifest 필드다. + +**Manifest 필드 (B-01이 정합 보증)** + +| 필드 | 의미 | 근거 | +| --- | --- | --- | +| `issuanceFramework` | 발행 근거 (`RegD506c` 등) — E-01 부착 여부를 결정 | Rule 506(a)·(c) | +| `issuerCIK` | 발행자의 EDGAR 중앙색인키 (10자리, 선행 0 포함) | Rule 500(d); EDGAR | +| `offeringId` | 이 자산이 표창하는 **하나의 발행**의 식별자 (법적 통합 판단 결과의 주입) | Rule 503(a)(1) “each new offering”; Rule 152 | +| `dateOfFirstSale` | 최초 투자자가 철회 불가능하게 계약상 구속된 날 — **온체인 이벤트에서 도출 금지** | Rule 503(a)(1); Form D Item 7; FAQ 답변 1 | +| `formDDueDate` | 주말·공휴일 조정을 마친 확정 마감일 (off-chain 계산 결과) | Rule 503(a)(1) 단서 | +| `offeringOngoing` | 발행 계속 여부 (연차 수정 라인 활성 조건) | Rule 503(a)(3)(iii); Rule 152(d)(1) | +| `generalSolicitationUsed` | 일반청약권유 사용 여부 — true면 §4(a)(2) 후퇴 불가 | §4(b); Release 33-11347 ¶8 | +| `trustedFormDOracles[]` | Form D 사실을 온체인에 전달할 수 있는 서명자 명단 | 시스템 신뢰 구조 (§10) | +| `stateNoticeFilings[]` | 주별 통지신고·수수료·정지 상태 (Operator 층) | §18(b)(4)(F) 단서·(c)(2)(A)·(c)(3) | +| `e01BypassUntil` | 예외승인 만료 시각 (기본 0 = 없음) | 정책 (§6.2·§11) | + +**오라클 attestation 스키마** + +``` +formDAttestation { + accessionNumber : string # 예: 0002014390-24-000001 — EDGAR 원본 역추적 키 + cik : string # 10자리, 선행 0 포함 + offeringId : bytes32 # Manifest와 대조 + formType : enum { D, D_A } + filingDate : date # EDGAR 접수일 + dateOfFirstSale : date # Item 7 기재값 + items : bytes32[] # Item 6 선택 집합 + offeringOngoing : bool # Item 8 + Operator 판단 + signer : address # ∈ trustedFormDOracles + sig : bytes + observedAt : timestamp # 관측 시각 (신선도 — A-11 규율 준용) +} +``` + +**Item 6 enum (`items`)**: `RULE_504B1` · `RULE_504B1_I` · `RULE_504B1_II` · `RULE_504B1_III` · `RULE_506B` · **`RULE_506C`** · `SEC_4A5` · `SEC_3C1` · `SEC_3C2` · `SEC_3C3` · `SEC_3C4` · `SEC_3C5` · `SEC_3C6` · **`SEC_3C7`** · `SEC_3C9` · `SEC_3C10` · `SEC_3C11` · `SEC_3C12` · `SEC_3C13` · `SEC_3C14` (Form D Item 6 체크박스와 1:1). BUIDL의 실제 값은 `{RULE_506C, SEC_3C7}`(§3.0.1). + +**IModule 훅 → 조문 매핑** + +| 훅 | 시점 | 역할 | 조문 | +| --- | --- | --- | --- | +| `moduleCheck(from, to, value, compliance)` | pre-trade 게이트 | G0~G6 순차 판정 → bool + reasonCode. **from·to를 사용하지 않는다** — 자산 상태만 본다 | Rule 503; 506(c)(1) | +| `moduleMintAction(to, value)` | 발행 commit | 발행 경로에서도 동일 게이트 적용 (mint bypass 차단 — §8.3) | Rule 503(a)(1) | +| `moduleTransferAction` / `moduleBurnAction` | post-trade | **사용하지 않음** — STATELESS, 갱신할 상태 없음 | — | + +**reasonCode enum**: `FORMD_NOT_FILED` · `FORMD_ATTESTATION_INVALID` · `FORMD_ISSUER_MISMATCH` · `FORMD_EXEMPTION_MISMATCH` · `FORMD_AMENDMENT_OVERDUE` · `FORMD_LATE_FILED`(flag 전용, 차단 아님) (§6.1·§3.19와 일치). + +**법적 성격 상수(중요)**: `E01.legalNature = OPERATIONAL_GATE`. Rule 506(c)(1)이 §230.503을 조건으로 열거하지 않으므로(§3.5), 이 모듈의 실패는 **면제 불성립을 의미하지 않는다.** 이 상수는 두 곳을 지배한다 — (1) §6.2의 매수인 대면 메시지는 “위법 증권”이 아니라 “발행자 신고 상태 확인 중”으로 표현되어야 하고, (2) §11의 Operator 예외승인이 **법적으로는** 가능하다(면제 조건이라면 승인 자체가 월권이 된다). 만약 Release 33-9416류의 제안이 장래 채택되어 Form D가 506의 조건이 되면 이 상수는 `EXEMPTION_CONDITION`으로 바뀌고, 예외승인 경로는 **제거**되어야 한다(OD-E01-7). + +**A-계열과의 구조적 차이(단정 금지 사항)**: E-01 모듈은 `from`·`to`를 받지만 쓰지 않는다. 이는 구현상의 낭비가 아니라 **의도된 서명**이다 — `IModule` 인터페이스 준수를 위해 파라미터를 받되, 판정은 자산 상태에만 의존함을 코드로 드러낸다. 리뷰어가 “매수인별 분기가 빠졌다”고 오해하지 않도록 주석으로 명시한다. + + +## §4. 입력 사실 (Input Facts) + +### 4.1 판정에 필요한 데이터 + +| 입력 | 의미 | 출처 | +| --- | --- | --- | +| `issuanceFramework` | 이 자산의 발행 근거 (`RegD506c`면 E-01 부착) | Manifest (B-01) | +| `issuerCIK` | 발행자 EDGAR 중앙색인키 | Manifest (B-01) | +| `offeringId` | 이 자산이 표창하는 하나의 발행 식별자 | Manifest (B-01) — 법적 통합 판단 결과 주입 | +| `formDAttestation` | Form D 제출 사실의 서명된 관측 (스키마 §3.20) | 신뢰 오라클 (§10) | +| `formDAttestation.items` | Item 6 선택 집합 | EDGAR primary_doc.xml → 오라클 | +| `formDAttestation.filingDate` | EDGAR 접수일 | EDGAR | +| `dateOfFirstSale` | 최초 투자자의 철회 불가능한 계약상 구속일 | **Manifest (off-chain 확정)** — 온체인 도출 금지 | +| `formDDueDate` | 주말·공휴일 조정 후 확정 마감일 | **Manifest (off-chain 계산)** | +| `offeringOngoing` | 발행 계속 여부 | Manifest + Operator | +| `lastFilingOrAmendmentDate` | 최근 Form D 또는 D/A 제출일 | EDGAR → 오라클 | +| `amendmentDueAt` | 연차 수정 마감 (= 위 + 1년, 조정 반영) | off-chain 계산 → Manifest | +| `r3Active` | R3(§3(c)(7)) Recipe 활성 여부 | Recipe 해석 결과 | +| `trustedFormDOracles[]` | 신뢰 서명자 명단 | Manifest (B-01) | +| `e01BypassUntil` | 예외승인 만료 시각 | Manifest (Operator 승인, §11) | + +### 4.2 데이터 출처와 책임경계 + +- **원천 사실은 공적 등록부다.** Form D의 존부·접수일·Item 6·수정 이력은 모두 SEC EDGAR의 공개 데이터다. 발행자의 자기주장이 아니라 **연방정부가 접수·공시한 사실**이라는 점이 E-01의 신뢰 구조를 A-계열과 근본적으로 다르게 만든다(§8.1). + +- **그러나 온체인은 EDGAR를 직접 못 본다(핵심 제약).** 컨트랙트는 HTTP를 호출할 수 없다. 따라서 공적 사실이 온체인에 도달하려면 **오라클 또는 Manifest 주입**이라는 마지막 한 구간을 건너야 하고, 그 구간에서 신뢰 가정이 재도입된다. **E-01의 실질적 취약점은 “발행자가 거짓말하는 것”이 아니라 “공적 사실의 전달 경로가 오염·지연되는 것”이다** — 대응도 달라진다(§10·OD-E01-1). + +- **`dateOfFirstSale`은 기계가 도출할 수 없다(중요).** “irrevocably contractually committed to invest”는 청약계약의 조건에 달린 법적 판단이다(§3.15 답변 1). 온체인 mint·결제 이벤트에서 유추하면 **기산점이 늦어져 마감을 놓친다.** 이 값은 발행자 측 법무가 확정해 Manifest로 주입하며, 그 산출 근거(계약 조항·수령일)를 Operator가 문서화해 보관한다(OD-E01-2). + +- **`formDDueDate`도 마찬가지다.** 주말·공휴일 연장(§3.6)은 미국 연방 공휴일 달력이 필요하고, 그 달력은 온체인에 없다. 따라서 **확정 날짜를 주입**하고 온체인은 `filingDate <= formDDueDate` 비교만 한다. 온체인에서 달력 연산을 시도하면 공휴일 누락으로 **적법한 발행에 지각 flag를 잘못 붙인다**(§5.3). + +- **`offeringId`는 법적 판단의 산물이다.** “무엇이 하나의 offering인가”는 Rule 152의 통합 문제이며(§9), 기계가 답할 수 없다. Manifest가 지정한 식별자를 E-01은 그대로 신뢰한다 — **E-01은 통합 판단을 재수행하지 않는다.** + +- **`issuerCIK`의 정합은 B-01이 보증한다.** E-01은 Manifest의 CIK가 실제 발행자의 것인지 검증하지 않는다 — Manifest ↔ 실제 설정의 일치는 B-01의 소관이고, E-01은 Manifest ↔ **공적 신고**의 일치를 본다. 두 검사가 겹치지 않도록 경계를 유지한다(§9). + +- **책임의 최종 소재**: EDGAR가 authoritative하다. 온체인 attestation은 그 **mirror**이며, 불일치 시 EDGAR가 우선한다. `accessionNumber`를 스키마에 포함시키는 이유가 이것이다 — 언제든 원본으로 역추적해 대사(reconciliation)할 수 있어야 한다(§11). 이 구조는 D-01이 “ONCHAINID counter는 transfer agent 법적 명부의 mirror”라고 한 것과 **정확히 같은 형태**다(§9). + +### 4.4 갈래별 필수 확인 항목 (전체 표) + +공통 행(모든 갈래) + 갈래별 항목. “예시”가 아니라 반드시 확인해야 하는 항목 **전체**다. + +| 갈래 | 공통 필수 | 갈래별 필수 | +| --- | --- | --- | +| **R1 단독 (506(c) 발행, R3 비활성)** | ① `issuanceFramework == RegD506c` ② attestation 존재·서명 유효·서명자 ∈ 신뢰명단 ③ `cik` 일치 ④ `offeringId` 일치 | ① `items ∋ RULE_506C` ② (계속 발행 시) `now <= amendmentDueAt` ③ `filingDate <= formDDueDate` (초과 시 flag) | +| **R1 + R3 (506(c) + §3(c)(7) 펀드, BUIDL-like)** | 상동 | ① `items ∋ RULE_506C` **AND** `items ∋ SEC_3C7` (**AND 게이트** — 둘 중 하나라도 없으면 공적 신고와 시스템의 법적 자기서술이 어긋남) ② 상동 ③ 상동 | +| **R1 + 506(b) 분기 (dormant)** | 상동 | ① `items ∋ RULE_506B` ② 비적격투자자 수 35명 초과 시 수정 의무 발생(Rule 503(a)(3)(ii)(G)) → Operator flag ③ 상동 | +| **Reg D 아님 (R2 재판매·비-Reg D 자산)** | — | **E-01 미부착 (P0)** — Rule 503의 수범자가 아님. 재판매 매도인은 Reg D에 기대지 않으므로(Rule 500(d)) Form D 의무 없음 | + +**AND 게이트 해설.** R1+R3가 동시에 활성인 자산(BUIDL-like)에서 Item 6은 **두 항목을 모두** 담아야 한다. 이유는 두 면제가 서로 다른 법률의 것이기 때문이다 — Rule 506(c)는 1933년 증권법 §5 면제이고, Section 3(c)(7)은 1940년 투자회사법 등록의무 적용제외다. 하나의 발행이 두 법률의 면제에 동시에 기댄다면 Form D Item 6에 둘 다 표시되는 것이 정상이며, 실제 BUIDL이 그렇다(§3.0.1). **하나만 있으면 우리 Manifest가 틀렸거나 발행자의 신고가 틀렸거나 둘 중 하나이며, 어느 쪽이든 사람이 봐야 한다.** + +## §5. 판정 로직 (Decision Logic) + +### 5.1 개념 — 자산 상태에 대한 STATELESS 게이트 + +E-01은 매 거래마다 **자산의 발행 통지 상태**를 확인하는 단일 pre-trade 게이트다. A-계열과 세 가지가 다르다. + +- **대상이 다르다**: 매수인(`to`)도 매도인(`from`)도 보지 않는다. 자산과 그 발행자만 본다. 따라서 매수인을 바꿔도 결과가 같다 — **자산 단위 차단**이다(§8.4). +- **상태가 없다**: 판정이 과거 거래의 누적에 의존하지 않는다. 자산 상태(Form D 존부·정합·신선도)만 보므로 STATELESS이며, post-trade commit이 없다. Rule 503(a)(3)(ii)의 예외 목록이 “총 투자자 수·판매량 변경은 수정 불요”라고 하므로(§3.7), **거래가 일어나도 Form D 의무 상태가 변하지 않는다** — 이것이 STATELESS의 조문상 근거다. +- **법정 게이트가 아니다**: §3.5가 확정했듯 Form D는 506(c)의 조건이 아니다. E-01의 차단은 **법이 요구해서가 아니라 우리가 선택해서** 세운 것이다. + +**그러면 왜 세우는가(핵심).** 세 가지 위험이 실재하기 때문이다. **① 연방 제재** — Rule 503 위반은 그 자체로 위법이며(Release 33-11347 ¶6), 2024-12-20 SEC가 미제출만으로 3건을 제재했다(§3.14). **② Rule 507 실격** — 위반을 이유로 법원 유지명령을 받으면 이후 504·506 발행이 전부 막힌다(§3.9). **③ 주 정지권** — §18(c)(3)에 따라 주는 filing 미제출을 이유로 그 주 내 offer·sale을 정지시킬 수 있다(§3.13). **그리고 506(c) 자산에는 회피 경로가 없다** — 일반청약권유를 한 이상 §4(a)(2)로 후퇴할 수 없으므로 Form D 의무가 확정된다(Release 33-11347 ¶8, §3.14 해설 2). + +**D-01과의 대칭(중요).** 두 부품 모두 “법문 직접 트리거가 아닌 보수적 운영 게이트”라는 점에서 같지만, 무엇을 예방하는지가 다르다. + +| | D-01 (보유자 수) | E-01 (Form D) | +| --- | --- | --- | +| 법문 트리거 | 회계연도 종료일 기준 §12(g) 등록의무 | 최초 매도 후 15역일 경과 시 Rule 503 위반 | +| 게이트가 막는 것 | 기준일에 상한을 넘겨 **등록회사가 되는 것** | 위반이 발생·누적되어 **제재·실격·주 정지에 이르는 것** | +| 실패 시 법적 상태 | 상한 도달 자체는 위법 아님 (등록의무 발생일 뿐) | 미제출 자체가 **위법** (다만 면제는 유지) | +| 치유 가능성 | 구조적 — 개별 서류로 못 품 | **가능** — 늦게라도 제출하면 상태 해소 (§6.2) | +| 대상 | 보유자 집합 (집계) | 발행자·자산 (단일 사실) | + +**해설.** 흥미로운 역전이 있다. D-01은 **상한 도달 자체가 위법이 아닌데** 게이트가 구조적이라 치유가 불가능하다. E-01은 **미제출 자체가 위법인데** 치유가 가능하다 — 제출하면 끝난다. 즉 “법적으로 더 나쁜 쪽이 실무적으로는 더 쉽다.” 이 비대칭이 §6.2의 해소 경로 설계를 지배한다. + +### 5.2 판정 순서 (싸고 탈락 잘 되는 검사·선행조건 먼저) + +증명서형(A-13)의 “존재 → 진위 → 신선도 → 갈래” 순서를 따르되, 앞에 **관련성**을, 뒤에 **비차단 적시성**을 붙인 6단 구조다. + +- **G0 관련성**: `issuanceFramework != RegD506c`이면 즉시 PASS(P0). Reg D 발행이 아니면 Rule 503의 수범자가 아니다 — 가장 싸고, R2·R3 단독 자산에서 가장 흔한 경로. +- **G1 존재**: attestation이 있는가. 없으면 즉시 FAIL — 가장 싼 탈락 지점. +- **G2 진위**: 서명이 유효하고 서명자가 신뢰명단에 있는가. 위조된 attestation을 이후 단계에 태우지 않는다. +- **G3 동일성**: `cik`·`offeringId`가 Manifest와 일치하는가. **다른 발행의 Form D로 이 발행을 덮는 것**을 막는 지점이다(발행자가 과거 발행의 Form D를 가리키며 “냈다”고 주장하는 전형적 회피). +- **G4 정합**: Item 6이 우리의 법적 자기서술과 일치하는가. R3 활성이면 AND 게이트(§4.4). +- **G5 신선도**: 발행이 계속 중인데 연차 수정 마감을 넘겼는가. A-11의 freshness 규율과 형태는 같으나 **1년은 법정 수치**다(§6.3). +- **G6 적시성(비차단)**: 조정된 마감일을 넘겨 제출되었는가. **넘겼어도 차단하지 않고 flag만 남긴다** — 면제가 유지되고 SEC가 사후 제출을 권고하므로(§3.15 답변 5). + +**순서의 근거.** G0가 맨 앞인 이유는 라이브러리 부품의 대부분 호출이 미부착으로 끝나기 때문이고, G2가 G3 앞인 이유는 **서명 검증 전의 데이터로 판정 분기를 하지 않기 위해서**다(위조 attestation의 `cik`를 믿고 비교하는 것은 무의미하다). G6가 맨 뒤인 이유는 그것만이 유일한 비차단 게이트이므로, 앞의 차단 게이트를 모두 통과한 뒤에야 의미가 있기 때문이다. + +### 5.3 경계 매트릭스 (부등호 규율) + +| 기준 | 연산 | 위반(FAIL/FLAG) | 안전구간(PASS) | 근거 | +| --- | --- | --- | --- | --- | +| Form D 제출 기한 | `filingDate` vs `formDDueDate` | **`>` 마감일 → FLAG** (차단 아님) | `<=` 마감일 | Rule 503(a)(1) “no later than 15 calendar days” | +| 15역일 계산 | `filingDate − dateOfFirstSale` | 경과 **> 15역일**이면 원칙적 지각 | 경과 **≤ 15역일** (15일째 당일 적법) | Rule 503(a)(1) | +| 주말·공휴일 조정 | 마감일이 토·일·공휴일 | — | **다음 최초 영업일로 연장** → 경과 > 15여도 적법할 수 있음 | Rule 503(a)(1) 단서 | +| 연차 수정 | `now` vs `amendmentDueAt` | **`>` 1주년 → FAIL** | **`<=` 1주년** (1주년 당일 적법) | Rule 503(a)(3)(iii) “on or before the first anniversary” | +| 비적격투자자 수 (dormant) | 수정 필요성 | **`>` 35명**으로 증가 시 수정 의무 | `<=` 35명 유지 시 수정 불요 | Rule 503(a)(3)(ii)(G) | +| Item 6 정합 | 집합 포함 | `items ∌ RULE_506C` → FAIL | `items ∋ RULE_506C` | Form D Item 6 | + +**해설 — “> 15일이면 위반”은 틀렸다(중요).** 두 개의 서로 다른 비교를 혼동하면 안 된다. **법적 기준**은 “경과 ≤ 15역일”이지만, **조정된 마감일**이 그 위에 얹힌다. 예: 최초 매도일이 어느 목요일이면 15일 후는 그 다음다음 주 금요일이지만, 만약 그날이 연방 공휴일이면 마감은 **그 다음 월요일**이고, 그때 제출하면 경과는 18일이어도 **적법**하다. 그래서 온체인은 원시 일수를 세지 않고 **off-chain에서 확정된 `formDDueDate`와만 비교**한다(§4.2). 이 설계를 어기고 온체인에서 `now - dateOfFirstSale > 15 days`를 계산하면 **적법한 발행에 지각 flag를 잘못 붙인다** — C-08의 “3개월 vs 4주” 혼동, C-01의 대응일 계산과 같은 계열의 함정이다. + +**의사코드 (R1 활성, BUIDL-like R1+R3 기준):** + +``` +moduleCheck(from, to, asset, value, context): + m = manifest(asset) + + # G0 관련성 — from·to를 쓰지 않는다 (자산 상태만 본다) + if m.issuanceFramework != REG_D_506C: + return PASS # P0 — Rule 503 수범자 아님 + + # 예외승인 (정책, 법정 아님 — §6.2·§11) + if m.e01BypassUntil > now: + return PASS + FLAG(E01_BYPASS_ACTIVE) + + a = formDAttestation(asset) + + # G1 존재 + if a == null: + return FAIL(FORMD_NOT_FILED) + + # G2 진위 — 서명 검증 전 데이터로 분기하지 않는다 + if not verify(a.sig, a.signer) or a.signer not in m.trustedFormDOracles: + return FAIL(FORMD_ATTESTATION_INVALID) + + # G3 동일성 — 다른 발행의 Form D로 덮는 것을 차단 + if a.cik != m.issuerCIK or a.offeringId != m.offeringId: + return FAIL(FORMD_ISSUER_MISMATCH) + + # G4 정합 — R3 활성 시 AND 게이트 + if RULE_506C not in a.items: + return FAIL(FORMD_EXEMPTION_MISMATCH) + if r3Active(asset) and SEC_3C7 not in a.items: + return FAIL(FORMD_EXEMPTION_MISMATCH) + + # G5 신선도 — 1년은 법정 수치 (≤ 1주년 적법) + if m.offeringOngoing and now > m.amendmentDueAt: + return FAIL(FORMD_AMENDMENT_OVERDUE) + + # G6 적시성 — 유일한 비차단 게이트 + if a.filingDate > m.formDDueDate: # 조정된 마감일과만 비교 + return PASS + FLAG(FORMD_LATE_FILED) # 면제 유지 + SEC가 사후제출 권고 + + return PASS # P1 +``` + +**단계별 해설.** + +1. **`from`·`to` 미사용**: 인터페이스상 받되 쓰지 않는다. 이것이 E-01이 A-계열과 다른 부품임을 코드로 드러낸다(§3.20). +2. **예외승인이 G0 직후**: 승인이 있으면 이후 게이트를 태우지 않는다. 다만 flag는 남겨 감사 추적을 보존한다 — **승인은 위험을 없애는 것이 아니라 이전(移轉)하는 것**이므로 기록이 남아야 한다(§11). +3. **G2가 G3 앞**: 위조 데이터로 비교하지 않는다. +4. **G4의 AND**: R3 활성 시 두 체크박스를 모두 요구. 실제 BUIDL이 `{RULE_506C, SEC_3C7}`이므로 이 요구가 비현실적이지 않다. +5. **G5의 `offeringOngoing` 선행조건**: 종료된 발행은 수정 의무가 없다(Rule 503(a)(3)(ii) 단서). 이 조건을 빠뜨리면 **종료된 발행의 자산이 1년 뒤 영구 차단**된다 — 유통 중인 2차 시장이 통째로 멈추는 심각한 버그다. +6. **G6의 반환값이 PASS**: 지각은 flag이지 차단이 아니다. 코드에서 `return FAIL`로 바꾸는 것은 한 글자 차이지만 **법적으로 틀린 시스템**이 된다. +7. **post-trade 훅 없음**: STATELESS이므로 commit 대상이 없다. + + +## §6. 거절·예외 처리 (Rejection & Exception) + +### 6.1 거절 코드 + +| reasonCode | 발동 조건 | 차단 여부 | 근거 | +| --- | --- | --- | --- | +| `FORMD_NOT_FILED` | 이 발행에 대한 Form D attestation이 없음 | **차단** | Rule 503(a)(1) | +| `FORMD_ATTESTATION_INVALID` | 서명 무효 또는 서명자가 신뢰명단 밖 | **차단** | Rule 503(b)(1) + 시스템 신뢰 구조 | +| `FORMD_ISSUER_MISMATCH` | `cik` 또는 `offeringId`가 Manifest와 불일치 | **차단** | Rule 503(a)(1) “each new offering”; Rule 500(d) | +| `FORMD_EXEMPTION_MISMATCH` | Item 6에 `RULE_506C` 없음, 또는 R3 활성인데 `SEC_3C7` 없음 | **차단** | Form D Item 6 | +| `FORMD_AMENDMENT_OVERDUE` | 발행 계속 중인데 `now > amendmentDueAt` | **차단** | Rule 503(a)(3)(iii) | +| `FORMD_LATE_FILED` | `filingDate > formDDueDate` | **차단 안 함 (flag)** | Rule 503(a)(1) 위반이나 면제 유지 + FAQ 답변 5 사후제출 권고 | +| `E01_BYPASS_ACTIVE` | Operator 예외승인 유효 기간 중 | **차단 안 함 (flag)** | 정책 (§6.2) | + +### 6.2 예외·해소 경로 — 치유되는 게이트 + +D-01의 상한 초과는 **구조적**이라 개별 서류로 풀 수 없었다. E-01은 반대다 — **거의 모든 FAIL이 치유 가능**하다. 발행자가 서류를 내면 끝나기 때문이다. + +- **`FORMD_NOT_FILED` → 제출하면 해소.** SEC 수수료는 없고(FAQ 답변 1), 절차는 EDGAR 온라인 제출이며, staff 스스로 “실행 가능한 한 신속히 제출하려는 선의의 노력”을 권고한다(§3.15 답변 5). **지각 제출로 넘어가도 차단이 풀린다** — 즉 이 게이트의 목적은 발행자를 벌하는 것이 아니라 **제출하게 만드는 것**이다. 게이트가 “영구 처벌”이 아니라 “압박”으로 설계되어야 하는 이유가 여기 있다. + +- **`FORMD_EXEMPTION_MISMATCH` → 두 방향의 치유.** Item 6이 틀렸다면 발행자가 수정(Form D/A)을 내면 되고(Rule 503(a)(3)(i) 오류정정), 우리 Manifest가 틀렸다면 B-01 경로로 Manifest를 고친다. **어느 쪽이 틀렸는지는 기계가 모른다** — 반드시 사람이 판단한다(§11). + +- **`FORMD_AMENDMENT_OVERDUE` → 연차 수정 제출로 해소.** 단 Rule 503(a)(4)에 따라 **Form D 전체를 현재 정보로 다시 채워야** 하므로(§3.7) 즉시 해소되지 않을 수 있다. 마감 60일 전 경보가 필요한 이유다(§11). + +- **`FORMD_ISSUER_MISMATCH` → 치유 어려움.** CIK가 다르다면 그것은 “서류를 안 낸 것”이 아니라 **다른 발행의 서류를 이 발행에 갖다 붙인 것**이다. 진짜 발행에 대한 Form D를 새로 내야 하며, 그 사이 이 자산은 차단 상태다. **가장 무거운 코드**다. + +- **예외승인(`e01BypassUntil`) — 법적으로는 가능하다.** Form D가 506(c)의 조건이 **아니므로**(§3.5), Operator가 한시적으로 게이트를 우회시켜도 면제가 깨지지 않는다. 만약 이것이 면제 조건이었다면 예외승인 자체가 월권이었을 것이다. 그러나 **가능하다는 것과 해야 한다는 것은 다르다** — 승인은 위험을 제거하지 않고 우리에게 이전한다. 설계 요건: (a) 만료 시각 필수(무기한 금지), (b) 승인 사유·승인자 기록, (c) flag 유지로 감사 추적 보존, (d) 2-of-3 다중서명(부품 update governance와 동일 수준). 상세는 §11·OD-E01-8. + +**매수인 대면 메시지 vs 내부 메시지 (중요).** 이 분리가 E-01에서는 **법적 정확성 문제**다. + +| 상황 | 매수인에게 보이는 메시지 | 내부(Operator) 메시지 | +| --- | --- | --- | +| `FORMD_NOT_FILED` | “이 자산은 발행자 측 규제 신고 확인이 완료되지 않아 현재 거래할 수 없습니다. 발행자 확인 후 재개됩니다.” | `E-01 FAIL / FORMD_NOT_FILED / assetId=… / issuerCIK=… / offeringId=… / 조치: 발행자에 Form D 제출 촉구, EDGAR 재확인 주기 24h` | +| `FORMD_EXEMPTION_MISMATCH` | 상동 (사유 미상세) | `E-01 FAIL / Item6=[RULE_506B] but Manifest=RegD506c / 조치: 어느 쪽이 오류인지 법무 확인 — Form D/A 또는 Manifest 정정` | +| `FORMD_LATE_FILED` | (메시지 없음 — 거래 진행) | `E-01 PASS+FLAG / filingDate 2024-04-05 > dueDate 2024-04-02 / 조치: 지각 사실 기록, Rule 503 위반 이력으로 관리` | + +**절대 쓰면 안 되는 표현**: “이 자산은 미등록 증권입니다”, “이 발행은 위법입니다”, “증권법 §5 위반”. **전부 틀렸다.** Form D 미제출로 면제가 깨지지 않으므로(§3.5·§3.14 ¶6) 그 자산은 여전히 적법하게 면제된 증권이다. 이런 문구는 부정확할 뿐 아니라 **발행자에 대한 허위 진술로서 별도의 책임**을 부를 수 있다. 매수인 대면 문구는 “발행자 측 규제 신고 확인 미완료”라는 **사실 그대로의 서술**에 머문다. + +### 6.3 정책 vs 법정 구분 (중요) + +- **법정**: 15역일(Rule 503(a)(1)), 1주년(Rule 503(a)(3)(iii)), 35명(Rule 503(a)(3)(ii)(G)), 주말·공휴일 연장(Rule 503(a)(1) 단서), Item 6 체크박스 집합(Form D). 이 수치·집합은 조문상 확정이며 우리가 조정할 수 없다. + +- **정책**: (a) **게이트를 세울지 자체**가 정책이다 — 법은 Form D 미제출을 이유로 거래를 막으라고 요구하지 않는다(§3.5). (b) `FORMD_LATE_FILED`를 차단이 아니라 flag로 두는 선택. (c) 예외승인 허용 여부·기간·승인 권한. (d) 연차 수정 마감 경보 시점(예: 60일 전). (e) attestation 관측 신선도 상한(`observedAt` 유효기간 — A-11 규율 준용). + +- **A-11·D-01과의 3자 대비(정리).** 세 부품 모두 “기한”을 다루지만 법정성이 다르다. + + | 부품 | 기한의 성격 | 조정 가능성 | + | --- | --- | --- | + | A-11 (claim freshness) | **정책 proxy** — 법이 “증명서는 N개월 유효”라고 말한 적 없음 (다만 506(c)(2)(ii)(E)의 5년 등 개별 법정 상한은 별개) | 조정 가능 | + | D-01 (holder count) | **법정 수치 + 정책 buffer** — 2,000은 법정, 어디서 멈출지는 정책 | 상한은 불가, buffer는 가능 | + | **E-01 (Form D)** | **법정 기한 + 정책 게이트** — 15일·1년은 법정이나, **그 위반에 거래 차단을 붙일지가 정책** | 기한은 불가, **게이트 자체가 정책** | + + **해설.** 방향이 셋 다 다르다. A-11은 기한이 정책이고 게이트가 법정에 가깝다(자격 미검증자는 못 산다). D-01은 기한도 게이트도 준(準)법정이다(상한을 넘기면 등록의무가 생긴다). **E-01만이 기한은 법정인데 게이트가 순수 정책이다.** 이 조합이 E-01을 미묘하게 만든다 — 우리는 “법이 정한 날짜”를 “법이 요구하지 않은 방식”으로 강제하고 있다. 그래서 §6.2의 예외승인이 법적으로 열려 있고, 동시에 그 남용이 게이트를 무의미하게 만든다. + +- **게이트 정당화의 명시적 논거(향후 규제 논증서용).** “법이 요구하지 않는데 왜 막는가”에 답해야 한다면 세 가지다 — (1) Rule 503 위반은 실재하는 위법이고 2024년 SEC가 실제로 제재했다(§3.14), (2) Rule 507 실격은 확률은 낮으나 회사의 사모 조달 능력을 영구히 끊는다(§3.9), (3) §18(c)(3)의 주 정지권은 연방 면제와 무관하게 특정 주에서 거래를 멈출 수 있고, **국경 없이 유통되는 온체인 자산에서 이 상태는 사후 대응이 극히 어렵다**(§3.13). 즉 E-01은 사후 수습이 불가능한 위험을 사전에 값싸게 막는 장치다. + +## §7. 테스트 케이스 (통과·거절·경계) + +| # | 시나리오 | 기대 | reasonCode | +| --- | --- | --- | --- | +| T1 | 506(c) 자산, Form D 제출됨(Item 6 = {506(c)}), 발행 종료, 기한 내 제출 | PASS | — (P1) | +| T2 | 506(c) 자산, Form D 없음 | FAIL | `FORMD_NOT_FILED` | +| T3 | Reg D 발행이 아닌 자산(R2 재판매 전용·비-Reg D) | PASS | — (P0, 미부착) | +| T4 (경계) | `dateOfFirstSale` = 2024-03-01, `formDDueDate` = 2024-03-16, `filingDate` = **2024-03-16** (15일째 당일) | PASS | — (≤ 마감일) | +| T5 (경계) | 위와 동일, `filingDate` = **2024-03-17** (16일째) | **PASS + FLAG** | `FORMD_LATE_FILED` (**차단 아님**) | +| T6 (경계·주말) | 15일째가 토요일이라 `formDDueDate`가 다음 월요일로 연장, `filingDate` = 그 월요일 (경과 17일) | PASS | — (연장 반영 시 적법. **원시 일수로 계산하면 오탐**) | +| T7 (BUIDL-like) | R1+R3 활성, Item 6 = **{506(c), 3(c)(7)}** | PASS | — (§3.0.1 실제 BUIDL 값) | +| T8 (경계·AND) | R1+R3 활성, Item 6 = **{506(c)}만** (3(c)(7) 누락) | FAIL | `FORMD_EXEMPTION_MISMATCH` | +| T9 | R1 활성, Item 6 = {506(b)} (Manifest는 `RegD506c`) | FAIL | `FORMD_EXEMPTION_MISMATCH` | +| T10 | 발행자가 **과거 다른 발행**의 Form D를 제시(`offeringId` 불일치) | FAIL | `FORMD_ISSUER_MISMATCH` | +| T11 | attestation의 `cik`는 맞으나 서명자가 신뢰명단 밖 | FAIL | `FORMD_ATTESTATION_INVALID` | +| T12 (실데이터) | BUIDL 실제 값 주입: `cik=0002013810`, `accession=0002014390-24-000001`, `filingDate=2024-03-18`, Item 6={506(c), 3(c)(7)} | PASS | — (**L4 테스트 벡터로 권장** — §3.0.1) | +| T13 (경계·연차) | 발행 **계속 중**, `lastFilingOrAmendmentDate` = 2025-07-18, `now` = **2026-07-18** (1주년 당일) | PASS | — (≤ 1주년) | +| T14 (경계·연차) | 위와 동일, `now` = **2026-07-19** (1주년 다음날) | FAIL | `FORMD_AMENDMENT_OVERDUE` | +| T15 (중대) | 발행 **종료**, `lastFilingOrAmendmentDate`로부터 3년 경과 | **PASS** | — (종료된 발행은 수정 의무 없음 — **이 케이스가 실패하면 유통 중 자산이 영구 차단됨**) | +| T16 (매수인 무관) | 동일 자산, `FORMD_NOT_FILED` 상태에서 매수인을 A→B로 교체 | FAIL (동일) | `FORMD_NOT_FILED` (**자산 단위 차단 — 매수인 교체로 치유 불가**) | +| T17 (치유) | T2 상태에서 발행자가 지각 제출 → attestation 갱신 | **PASS + FLAG** | `FORMD_LATE_FILED` (차단 해소) | +| T18 (mint 경로) | 발행(mint) 경로로 `FORMD_NOT_FILED` 자산을 신규 발행 시도 | FAIL | `FORMD_NOT_FILED` (**mint bypass 차단 확인** — §8.3) | +| T19 (예외승인) | `e01BypassUntil` 유효 중, Form D 없음 | PASS + FLAG | `E01_BYPASS_ACTIVE` (감사 추적 남음) | +| T20 (경계·승인만료) | `e01BypassUntil` = `now` (만료 시각 도달) | FAIL | `FORMD_NOT_FILED` (`>` 비교이므로 만료 시각 당일 차단) | + +**읽는 법.** BUIDL-like에서 자주 발생하는 경로는 T1·T7·T13·T15다. **T5·T6·T15·T16·T18이 이 부품의 핵심 회귀 테스트**다 — T5는 “지각을 차단으로 바꾸면 법적으로 틀린다”, T6은 “원시 일수 계산의 오탐”, T15는 “종료된 발행의 영구 차단 버그”, T16은 “자산 단위 차단의 성질”, T18은 “mint 우회”를 각각 잡는다. T9·T12는 dormant가 아니라 실데이터 기반이므로 CI에 상시 포함할 가치가 있다. T19·T20은 정책 기능이므로 승인 프로세스가 확정된 뒤 활성화한다(OD-E01-8). + +**T15 해설(가장 중요한 함정).** 데모에서 놓치기 쉽다. BUIDL-like 자산이 발행을 종료한 뒤에도 2차 시장에서 계속 유통되는데, G5의 `offeringOngoing` 선행조건을 빠뜨리면 **발행 종료 1년 뒤 모든 거래가 `FORMD_AMENDMENT_OVERDUE`로 멈춘다.** Rule 503(a)(3)(ii) 단서와 (iii)의 “if the offering is continuing at that time”이 그것을 막는 조문상 근거다. 종료된 발행에는 수정 의무가 없다. + + +## §8. 검증 패턴 — 기계 판정형 / 공적 데이터 확인 (Pattern A) + +### 8.1 증명서형·상태추적형과의 대비 + +프로젝트의 세 패턴 중 E-01은 **패턴 A(기계 판정형)**다. 다만 같은 패턴 A 안에서도 성격이 갈린다. + +| | A-13·A-03 (패턴 B 증명서형) | D-01 (상태추적형) | **E-01 (패턴 A, 공적 데이터 확인)** | +| --- | --- | --- | --- | +| 판정 대상 | 사람의 자격 | 보유자 집합의 크기 | **자산 발행의 신고 상태** | +| 사실의 출처 | 검증기관이 발급한 **사인(私人)의 서명** | on-chain 누적 카운터 | **연방정부의 공적 등록부(EDGAR)** | +| 판정의 본질 | 서명·발급자·만료 확인 (**판단은 밖에서**) | 누적 집계와 경계 비교 | **공적 사실의 존부·일치 대조** | +| 신뢰 대상 | 신뢰 발급기관 (Sumsub 등) | 자신의 카운터 + A-04 매핑 | **EDGAR + 전달 경로(오라클)** | +| 위조 위험 | 증명서 위조·허위 attestation | 지갑 분할 회피 | **전달 경로 오염** (원천 위조는 사실상 불가) | +| Stateful | STATELESS | **STATEFUL** | STATELESS | + +**해설 — E-01의 신뢰 구조가 가장 강하다.** A-13은 “이 사람이 QP인가”라는 **판단**을 검증기관에 위임하고 그 서명만 확인한다. 판단이 밖에 있으므로 그 판단이 틀릴 수 있다. E-01은 다르다 — “Form D가 제출되었는가”는 판단이 아니라 **사실**이고, 그 사실은 SEC가 접수하고 공시한다. **발행자가 “냈다”고 주장해도 EDGAR에 없으면 안 낸 것이다.** 사인의 진술을 신뢰할 필요가 없다는 점에서 E-01은 A-계열보다 인식론적으로 우월한 위치에 있다. + +**그러나 마지막 한 구간이 문제다.** 온체인 컨트랙트는 EDGAR를 못 본다(§4.2). 그래서 “공적 사실”이 “서명된 attestation”으로 변환되는 순간, **A-13이 겪는 것과 형태가 같은 신뢰 문제가 재등장한다** — 다만 대상이 다르다. A-13은 “검증기관의 판단을 믿을 수 있는가”이고, E-01은 “**오라클이 EDGAR를 정확히·최신으로 옮겼는가**”다. 후자는 검증 가능하다 — `accessionNumber`로 언제든 원본과 대사할 수 있기 때문이다. **판단은 대사할 수 없지만 사실은 대사할 수 있다.** 이것이 E-01의 3-Layer 설계가 A-13과 달라지는 이유다(§10). + +### 8.2 공적 데이터 확인의 3단 구조 + +E-01의 데이터 경로는 세 마디다. + +- **① 원천 (EDGAR)**: SEC가 접수·공시. authoritative. 기계 조회 경로가 공식 제공된다 — `https://data.sec.gov/submissions/CIK##########.json`(10자리 CIK, 선행 0 포함, 인증·API 키 불필요, 실시간 갱신). 개별 제출의 구조화 원문은 `.../Archives/edgar/data/{cik}/{accession-no-dashes}/primary_doc.xml`로 접근하며, Item 6 선택 집합이 XML 요소로 들어 있다. SEC의 fair-access 정책상 서술적 User-Agent 헤더가 요구되고, 대량 취득은 야간 갱신 bulk ZIP을 쓰는 것이 권장된다. + +- **② 관측·서명 (오라클)**: EDGAR를 폴링해 사실을 추출하고 서명한다. `observedAt`을 반드시 남긴다 — **관측 시각이 없으면 “언제 기준의 사실인가”를 알 수 없다.** 관측 신선도 상한은 A-11의 규율을 준용한다(정책). + +- **③ 대조 (온체인 모듈)**: 서명 검증 후 Manifest와 대조. 달력 연산·통합 판단·법적 해석을 **하지 않는다** — 이미 결정화된 값과만 비교한다(§3.19 “결정성 확보의 세 지점”). + +**설계 원칙**: **온체인은 비교만, 판단은 밖에서, 원본은 항상 역추적 가능하게.** `accessionNumber`가 이 원칙의 물리적 구현이다. + +### 8.3 우회 경로 — mint와 forcedTransfer + +프로젝트의 알려진 위험(ERC-3643 compliance module bypass)이 E-01에도 그대로 적용된다. + +- **mint 경로**: 발행 자체가 E-01의 관심사이므로, `moduleMintAction`에서도 동일 게이트가 걸려야 한다. **역설적이지만 mint야말로 Form D 의무를 발생시키는 행위**다 — 최초 매도가 있어야 15일 시계가 돌기 시작한다. mint를 게이트 밖에 두면 “Form D 없이 발행하고, 그 다음 거래부터만 막히는” 앞뒤가 뒤바뀐 구조가 된다(T18). + +- **forcedTransfer / recovery**: 이 경로는 **의도적으로 열어 둔다.** 이유가 있다 — forcedTransfer는 발행자·Operator가 법적 명령이나 오류 정정을 이행하는 통로이며, Form D 미제출 상태에서도 **투자자 보호를 위한 정정은 가능해야** 한다. Form D 미제출로 §5 면제가 깨지지 않으므로(§3.5), 기존 보유자의 지위를 동결할 법적 이유가 없다. **다만 L4 테스트 벡터로 이 경로가 열려 있음을 명시적으로 확인**하고, 남용 감시는 F-계열에 맡긴다(OD-E01-9). + +- **AMM pool**: E-01은 lot lineage를 다루지 않으므로 C-01류의 commingling 문제와 무관하다. 다만 pool 컨트랙트가 자산을 보유·이전할 때도 `moduleCheck`가 걸리므로, **Form D 미제출 자산은 pool 진입 자체가 막힌다** — 이것이 자산 단위 차단의 실질적 효과다. + +### 8.4 자산 단위 게이트 — 글로벌 게이트도 아니고 매수인 게이트도 아니다 + +E-01의 부착 성격은 세 축으로 규정된다. + +- **A-01·A-02 같은 글로벌 게이트가 아니다.** 이들은 모든 Recipe·모든 거래에 transaction-level로 걸리는 제재·관할 게이트다(`manifest.globalGates`). E-01은 **R1 전용**이며, Manifest의 `issuanceFramework`가 `RegD506c`인 자산에만 부착된다. + +- **A-계열 같은 매수인 게이트도 아니다.** A-03·A-13은 “이 사람이 살 수 있는가”를 묻는다. E-01은 “**이 자산이 유통될 수 있는가**”를 묻는다. 결과가 다르다 — A-03 FAIL은 다른 매수인이면 통과하지만, E-01 FAIL은 **누가 사도 실패한다**(T16). 이 성질을 UI에 반영해야 한다: A-03 실패는 “귀하의 자격” 문제로, E-01 실패는 “이 자산” 문제로 표시된다. + +- **R1 전용 3인방의 성격.** E-01·E-03·F-04는 모두 R1에만 부착되고 모두 **발행자 측**을 본다 — E-01은 신고, E-03은 발행자의 전과(Rule 506(d)), F-04는 판매 중 발행자 매수 금지. 세 부품 모두 “매수인이 아니라 발행자가 결격이면 발행 전체가 막힌다”는 공통 구조다. **A-계열이 개별 거래를 거르는 체라면, E·F-계열은 발행 자체의 자격을 보는 문**이다. + + +## §9. Coordination — 다른 부품과의 협응 + +| 상대 부품 | 관계 | 협응 내용 | +| --- | --- | --- | +| **B-01 manifest 정합** | **강한 의존 (hard)** | `issuerCIK`·`offeringId`·`issuanceFramework`·`dateOfFirstSale`·`formDDueDate`·`amendmentDueAt`·`trustedFormDOracles`·`e01BypassUntil`을 공급. **책임 분할이 미묘하다** — B-01은 *Manifest ↔ 온체인 설정*의 일치를 보증하고, E-01은 *Manifest ↔ 공적 신고(EDGAR)*의 일치를 본다. 즉 B-01은 “우리가 우리 말대로 설정했는가”, E-01은 “우리 말이 SEC에 신고된 말과 같은가”. 두 검사가 겹치지 않는다. | +| **E-03 bad actor** | **형제 (R1 전용) + 실체적 연결** | 두 방향의 연결이 있다. **(1) Form D 서명 = Rule 506(d) certification** — Terms of Submission 세 번째 항이 “issuer is not disqualified … for one of the reasons stated in Rule 504(b)(3) or Rule 506(d)”를 확인하고, 표지의 18 U.S.C. 1001이 그 확인에 형사책임을 붙인다(§3.12). 즉 **유효한 Form D의 존재는 발행자가 E-03 항목에 대해 서명·확인했다는 공적 사실**이다. E-03은 이를 보조 증거로 쓸 수 있으나 **그것만으로 E-03을 충족시킬 수는 없다**(certification은 발행자의 진술이지 조회 결과가 아니다). **(2) Rule 507 injunction 조회** — §230.503 관련 법원 유지명령의 존부는 E-03의 조회 인프라(법원·행정명령 데이터)와 같은 계열이다. 어느 부품이 507을 담당할지는 미결(OD-E01-5). | +| **F-04 판매 중 발행자 매수 금지** | 형제 (R1 전용) | 같은 “발행자 측” 축. F-04는 발행 진행 중이라는 사실에 의존하고, E-01의 `offeringOngoing`이 같은 사실을 쓴다 — **두 부품이 같은 Manifest 필드를 소비하므로 정의가 어긋나면 모순**이 생긴다. “발행이 계속 중”의 판단 기준(Rule 152(d)(1))을 공유해야 한다(OD-E01-4). | +| **A-01 제재 / A-02 국가** | 선행 (글로벌 게이트) | Recipe 해석 이전에 실행되는 transaction-level 게이트. E-01보다 앞선다. **A-02와는 §18(c)(3) 주 정지 대응에서 만난다** — 특정 주가 offer·sale을 정지시키면 그 주를 `allowedJurisdictions`에서 제외하는 것이 정합적 처리이며, 이는 A-02의 필터 갱신으로 구현된다(OD-E01-3). | +| **A-03 적격투자자** | 병행 (같은 R1, 다른 축) | A-03은 506(c)(2)(i)의 “전원 AI”라는 **면제 조건**을 담당하고, E-01은 조건이 **아닌** Rule 503을 담당한다. **대비가 교육적이다** — A-03 FAIL은 면제가 실제로 깨지는 상황이고, E-01 FAIL은 면제가 유지되는 상황이다. 같은 Recipe 안에 성격이 정반대인 두 부품이 공존한다. Form D Item 14(비적격투자자 수)와 A-03 집계를 대사할 수 있으나 게이트로 삼지 않는다(참고용). | +| **D-01 보유자 수** | 패턴 형제 (보수적 운영 게이트) | 둘 다 “법문 직접 트리거가 아닌 예방 게이트”다(§5.1 표). 다만 D-01은 STATEFUL·집계·치유 불가, E-01은 STATELESS·단일 사실·치유 가능. **mirror 구조가 동일하다** — D-01의 ONCHAINID counter가 transfer agent 법적 명부의 mirror이듯, E-01의 attestation은 EDGAR의 mirror이며 불일치 시 원본이 우선한다(§4.2). | +| **A-11 증명 유효기간** | 보조 (형태 유사, 근거 상이) | attestation의 `observedAt` 신선도에 A-11의 일반 규율을 준용한다. 단 **G5의 1년은 A-11류의 정책 proxy가 아니라 법정 수치**다(§6.3 3자 대비표). 이 구분을 흐리면 “유효기간이니 정책으로 조정 가능”이라는 잘못된 결론에 이른다. | +| **C-00 전매 경로 / C-01 보유기간** | 무관 (직교) | R2 재판매 라인. 재판매 매도인은 Reg D에 기대지 않으므로(Rule 500(d)) Form D 의무가 없다. **다만 Form D 미제출 자산이 2차 시장에서 유통 중일 때 E-01이 그 거래를 막는다는 점에서 간접 충돌**한다 — R2 거래인데 R1 부품 때문에 막히는 구조다. 이는 버그가 아니라 자산 단위 차단의 의도된 효과이나, Recipe 조합 규칙에서 명시되어야 한다(OD-E01-10). | + +**책임경계 요약**: E-01 = 발행 통지 상태 전담(존재·동일성·정합·연차 신선도). 면제 조건 판정 = A-03·B-03 등 506(c)(2) 라인. 발행자 전과 = E-03. 설정 정합 = B-01. 관할 필터 = A-02. 통합 판단(무엇이 하나의 offering인가) = 법무 → Manifest 주입. E-01은 이들 결과를 입력으로 받아 **공적 등록부와 대조만** 한다. + +**Recipe 조합에서의 위치.** R1(Reg D 506(c) Issuance)의 필수 부품 목록에 E-01이 있다 — A-01·A-02·A-03·A-04·A-11·**E-01**·E-03·F-04·B-01·B-02·B-03(조건부: A-08·A-09). Recipe의 결합 규칙은 “필수 부품 모두 cumulative AND, 한 부품이라도 fail → Recipe 전체 fail”이며 거절 코드는 `RECIPE_R1_REGD_ISSUANCE_FAIL` + 원인 부품 ID propagate다. **여기서 §3.5의 함의가 Recipe 층에 올라온다** — R1의 법률효과는 “§5 등록 면제 성립”인데, E-01이 fail이어도 그 법률효과는 실제로는 성립한다. 즉 **R1 Recipe는 법률효과의 성립 조건보다 넓다** — 면제 조건(A-03 등)에 운영 게이트(E-01)를 얹은 합집합이다. Recipe Spec Sheet ①(법률효과)과 ②(부품 subset)를 작성할 때 이 초과분을 명시해야 하며, 그러지 않으면 “E-01 fail = §5 위반”이라는 오독이 Recipe 문서에 고착된다(OD-E01-10). + +## §10. 3-Layer Solution — Element / Recipe / Manifest / Operator 매핑 + +E-01은 프로젝트의 4-Layer 아키텍처(법률을 코드로 번역) 안에서 다음처럼 배치된다. + +- **법 계층(Layer 1→2→3)**: Layer 1 = §5(§77e, 등록 원칙)·§4(a)(2)(§77d(a)(2))·§4(b)(§77d(b))·**§18(b)(4)(F)·(c)(2)(A)·(c)(3)(§77r)**·§8A(§77h-1); Layer 2 = **Rule 503**(의무 본체)·**Rule 506(c)(1)**(조건 목록에 §230.503 부재)·506(a)·507·508·500(b)(c)(d)·**Form D(§239.500)**; Layer 3 = **Release 33-11347**(Commission order, 2024-12-20 — “면제 유지 ∧ 위법 성립”)·Press Release 2024-210·Form D FAQ 답변 1·5(staff, 비구속)·CFI 257.02–257.08·Release 33-8891(전자제출 채택)·**Release 33-9416(미채택 제안 — 현행법 아님)**. + +- **Element (E-01)**: pre-trade STATELESS 게이트. G0~G6 6단. “이 자산의 발행 통지가 존재하고 일치하며 지연되지 않았는가”만 판정. `from`·`to`를 쓰지 않는다. + +- **Recipe**: R1(Reg D 506(c) Issuance)이 E-01을 **필수** 부품으로 부착한다. R2·R3·R4에는 부착되지 않는다. 다만 R1+R3 동시 활성 시 G4가 AND 게이트로 확장된다(Item 6 ⊇ {506(c), 3(c)(7)}) — **Recipe 간 cumulative 관계가 Element 내부 판정을 바꾸는 드문 사례**이며, R3의 활성 여부(`r3Active`)를 E-01이 입력으로 받아야 하는 이유다. + +- **Manifest**: `issuanceFramework`·`issuerCIK`·`offeringId`·`dateOfFirstSale`·`formDDueDate`·`offeringOngoing`·`amendmentDueAt`·`generalSolicitationUsed`·`trustedFormDOracles[]`·`stateNoticeFilings[]`·`e01BypassUntil`을 지정. **이 중 `dateOfFirstSale`·`formDDueDate`·`offeringId`·`amendmentDueAt` 네 개가 “법적 판단의 결정화 산물”**이며, 나머지와 성격이 다르다 — 값이 틀리면 B-01의 정합 검사로는 잡히지 않는다(B-01은 Manifest ↔ 설정 일치만 보므로, Manifest 자체가 틀린 법적 판단을 담고 있으면 통과한다). 이 네 필드는 **법무의 서명된 산출물**로 관리되어야 한다(OD-E01-2). + +- **신뢰 분배(A-13과의 대비)**: A-13의 3-Layer는 Self-Attest → Trusted Issuer → Spot-Check 구조로, 각 층이 **판단의 신뢰도**를 높인다. E-01은 다르다 — **판단이 없으므로 층의 목적이 “사실 전달의 정확성”**이다. (1) **원천 층**: EDGAR가 authoritative, 위조 불가. (2) **전달 층**: 오라클이 관측·서명, `observedAt`으로 신선도 관리, 복수 오라클로 다중화 가능. (3) **대사 층**: `accessionNumber`로 원본 역추적, 정기 대사, 불일치 시 EDGAR 우선. **책임 소재**: 전달 오류의 책임은 오라클 운영자에게, 법적 판단 필드(위 네 개)의 오류 책임은 발행자·법무에게, 게이트 정책의 책임은 Decipher에게 있다. + +- **Operator**: EDGAR 폴링·대사, 연차 마감 경보, 주(州) 신고 상태 관리, 예외승인, 지각 이력 관리(§11). + +*그림 5.0 — 런타임 검증 흐름: G0 관련성 → G1 존재 → G2 진위 → G3 동일성 → G4 정합 → G5 신선도 → G6 적시성(비차단) (개발자용)* + +![그림 5.0 — 런타임 검증 흐름: G0 관련성 → G1 존재 → G2 진위 → G3 동일성 → G4 정합 → G5 신선도 → G6 적시성(비차단) (개발자용)](fig50.png) + +## §11. Operator Layer — Frontend·Off-chain 운영 + +E-01은 온체인 게이트가 단순한 대신 **off-chain 운영이 부품의 실질**이다. 판정에 필요한 사실 전부가 밖에서 오기 때문이다. + +- **EDGAR 폴링·대사**: `https://data.sec.gov/submissions/CIK##########.json`을 주기적으로 조회해 발행자의 Form D·D/A 이력을 추적한다. 인증·수수료가 없으나 SEC fair-access 정책상 서술적 User-Agent 헤더가 요구되고 요청 빈도 조절이 요구된다. 개별 제출의 Item 6은 `primary_doc.xml`에서 추출한다. **대사 주기**: 정상 상태 일 1회, `FORMD_NOT_FILED` 차단 상태에서는 더 촘촘히(예: 시간당) — 발행자가 제출하는 즉시 차단이 풀려야 한다(§6.2). + +- **대시보드**: 자산별 Form D 상태(제출·지각·수정 마감까지 잔여일)·`offeringOngoing` 여부·현재 flag 목록·주별 통지신고 상태·예외승인 잔여 시간·최근 대사 시각. + +- **연차 수정 경보(중요)**: 마감 **60일 전** 경보를 권고한다. 이유는 Rule 503(a)(4) 때문이다 — 연차 수정은 날짜만 갱신하는 형식 절차가 아니라 **Item 1~16 전체를 현재 정보로 재작성**해야 하므로(§3.7), 발행자 측 법무·회계의 실제 작업이 필요하다. 마감 1주일 전 경보로는 늦다. + +- **`dateOfFirstSale` 확정 워크플로**: 발행자 법무가 청약계약 조건을 검토해 “최초 투자자가 철회 불가능하게 구속된 날”을 확정하고(§3.15 답변 1), 그 근거(계약 조항·수령일)를 문서화해 보관한다. 이 값이 확정되어야 `formDDueDate`가 계산된다. **온체인 이벤트에서 자동 도출하는 파이프라인을 만들지 않는다** — 만들면 반드시 틀린다(OD-E01-2). + +- **주(州) 신고 관리**: Form D Item 12의 “States of Solicitation”에 표시된 주 각각에 대해 notice filing·수수료·송달동의를 관리한다(§18(c)(2)(A)). NASAA의 전자신고 창구(Electronic Filing Depository)가 실무 경로다. **정지 통지를 받은 주가 있으면 A-02의 `allowedJurisdictions`에서 즉시 제외**한다 — 이것이 §18(c)(3) 대응의 실질이며, 온체인 자산에서 “특정 주에서만 정지”를 구현하는 유일한 현실적 방법이다(OD-E01-3). + +- **지각 이력 관리**: `FORMD_LATE_FILED` flag는 차단이 아니지만 **Rule 503 위반 이력**이다. 2024년 제재가 보여주듯 SEC는 이를 집행 대상으로 삼는다(§3.14). 지각 건수·기간을 누적 기록하고, 반복되면 발행자 온보딩 심사에 반영한다. **cease-and-desist 명령을 이미 받은 발행자의 재위반은 가중 사유**이므로 특히 중요하다. + +- **오류·변경 수정 감시(S11·S12)**: 기계가 판정할 수 없는 Rule 503(a)(3)(i)·(ii) 의무를 사람이 본다. Manifest·온체인 설정에 변경이 생겼을 때 “이것이 Form D 기재사항의 변경인가”를 검토하는 체크리스트를 운영한다. 특히 Item 3(관련자)·Item 12(판매보수·권유 주)·Item 11(최소투자금액 10% 초과 감소)이 실무상 자주 변한다. + +- **예외승인 절차**: (a) 만료 시각 필수, (b) 사유·승인자 기록, (c) 2-of-3 다중서명, (d) flag 유지. **승인 전 확인 질문**: “Form D를 지금 낼 수 없는 이유가 무엇인가?” 대부분의 경우 답이 없다 — 수수료도 없고 온라인 제출이며 SEC가 사후 제출을 권고한다. **즉 예외승인이 필요한 상황은 거의 존재하지 않아야 정상**이다. 승인 요청이 반복된다면 그것은 게이트 문제가 아니라 발행자 문제다(OD-E01-8). + + +## §12. Open Issues + +- **OD-E01-1 (전달 경로 신뢰·중요)**: EDGAR가 authoritative하나 온체인은 이를 직접 못 본다(§4.2·§8.2). 오라클의 관측 신선도 상한, 복수 오라클 다중화 방식, `accessionNumber` 기반 대사 주기, 불일치 시 처리(EDGAR 우선)를 확정해야 한다. **원천 위조는 사실상 불가능하나 전달 지연·오염은 실재하는 위험**이며, A-13의 “증명서 신뢰”와 형태는 같으나 대상이 다르다(판단이 아니라 사실). 변호사·오라클 운영자 확인 사안. + +- **OD-E01-2 (법적 판단 필드의 결정화·최우선)**: `dateOfFirstSale`·`formDDueDate`·`offeringId`·`amendmentDueAt` 네 필드는 기계가 도출할 수 없고 B-01 정합 검사로도 잡히지 않는다(§10). 특히 `dateOfFirstSale`은 “irrevocably contractually committed to invest”라는 계약 조건 의존 판단이며(§3.15 답변 1), 온체인 이벤트에서 유추하면 마감을 놓친다. 이 네 필드를 **법무의 서명된 산출물**로 관리하는 절차, 그 근거 문서화·보관 방식, Manifest 주입 시 검증 체계를 확정해야 한다. staff FAQ만이 유일 근거인 명제(기산점 정의의 구체화)의 취약성도 함께 관리한다. 변호사 위임 사안(최우선). + +- **OD-E01-3 (주 정지권 대응·중요)**: §18(c)(3)에 따라 주는 Form D 미제출을 이유로 그 주 내 offer·sale을 정지시킬 수 있으나(§3.13), 국경 없이 유통되는 온체인 자산에서 “특정 주에서만 정지”는 기술적으로 극히 어렵다. (a) 주별 정지 상태의 확인 경로(NASAA EFD 조회 자동화 가능성), (b) 정지 주를 A-02 `allowedJurisdictions`에서 제외하는 메커니즘, (c) 이미 그 주 보유자에게 유통된 자산의 처리, (d) “주 소재” 판단 기준(A-02의 거주·국적 로직과 결합)이 미결이다. A-02·Reg S 경로와 맞물린다. 변호사 위임 사안. + +- **OD-E01-4 (offering 통합 판단)**: S5·S8이 “무엇이 하나의 offering인가”라는 Rule 152 통합 문제에 의존한다(§3.19). `offeringId` 지정과 `offeringOngoing` 판단이 Rule 152(c)(2)(발행 개시)·152(d)(1)(발행 종료)에 정합하는지, F-04와 “발행 계속 중” 기준을 어떻게 공유하는지 확정해야 한다. 여러 tranche·후속 발행이 하나의 offering인지 별개인지가 Form D 제출 단위를 좌우한다. + +- **OD-E01-5 (Rule 507·E-03 경계)**: §230.503 관련 법원 유지명령의 존부 조회(Rule 507 전제)를 E-01이 담당할지 E-03이 담당할지 미결(§9). E-03이 bad actor(Rule 506(d)) 조회 인프라를 갖추므로 507 조회도 그쪽에 통합하는 것이 자연스러우나, 507은 503 위반에서 파생되므로 E-01과의 연결이 있다. 책임 배분 확정 필요. + +- **OD-E01-6 (§4(a)(2) 후퇴 가능성)**: `generalSolicitationUsed == false`인 자산에 한해 Form D 미제출 시 §4(a)(2)로 후퇴 가능한지(Rule 500(c), §3.11) 검토. Decipher 자산은 설계상 일반청약권유를 전제하므로 대부분 후퇴 불가(Release 33-11347 ¶8)이나, 일반청약권유 없이 발행한 자산이 섞이면 분기가 필요하다. 이 경우 E-01의 FAIL을 완화할 여지가 생긴다. + +- **OD-E01-7 (Release 33-9416 채택 시 성격 전환·최대 변경 위험)**: 2013년 제안(사전 Form D·closing amendment·1년 실격)이 장래 채택되면(§3.15) Form D가 506의 조건이 되어 `E01.legalNature`가 `OPERATIONAL_GATE`에서 `EXEMPTION_CONDITION`으로 바뀌어야 한다. 그 경우 (a) 예외승인 경로 제거, (b) 매수인 대면 메시지 변경(“면제 조건 미충족”), (c) `FORMD_LATE_FILED`의 비차단 처리 재검토가 필요하다. **본 부품 최대의 규제 변경 위험**이며 SEC 규칙제정 동향을 모니터링해야 한다. (2026-07 현재 미채택 확인.) + +- **OD-E01-8 (예외승인 정책)**: 법적으로는 가능하나(§3.5) 남용 시 게이트가 무의미해진다(§6.2·§11). 승인 권한(2-of-3 다중서명 수준), 최대 기간, 승인 사유 심사 기준, flag 유지·감사 절차를 확정해야 한다. **정상 상태에서는 승인이 거의 불필요**해야 하므로(Form D 제출에 장벽이 없음), 승인 요청 빈도 자체를 발행자 문제의 지표로 삼는다. + +- **OD-E01-9 (forcedTransfer 경로)**: mint는 게이트에 포함하되(§8.3·T18) forcedTransfer/recovery는 의도적으로 연다 — Form D 미제출 상태에서도 투자자 보호 정정은 가능해야 하기 때문이다. 이 경로가 열려 있음을 L4 테스트로 명시 확인하고, 남용 감시를 F-계열에 배분하는 방식을 확정한다. + +- **OD-E01-10 (Recipe 초과분 명시)**: R1의 법률효과는 “§5 등록 면제 성립”인데 E-01 fail이어도 그 효과는 실제로 성립한다(§9). R1 Recipe가 법률효과 성립 조건보다 넓은 합집합임을 Recipe Spec Sheet ①·②에 명시해야 하며, 그러지 않으면 “E-01 fail = §5 위반”이라는 오독이 고착된다. 또한 R2 거래가 Form D 미제출 R1 자산 때문에 막히는 간접 충돌(§9 C-00 항)을 Recipe 조합 규칙에 반영해야 한다. + +## §13. 파일명 + +- Element 문서: E-01_FormD확인.md (본 문서) + +- 빌드 산출물: E-01_FormD확인.docx (pandoc + Noto Sans CJK KR 패치) + +- 위치: 산출물/elements/ (spec-sheets/elements/) + +## 부록 A — 관련 조문·URL 빠른참조 + +| 조문 | 인용 | 1차 출처 | +| --- | --- | --- | +| 증권법 §5 | 15 U.S.C. §77e | uscode.house.gov | +| 증권법 §4(a)(2)·(b) | 15 U.S.C. §77d(a)(2)·(b) | uscode.house.gov | +| 증권법 §8A | 15 U.S.C. §77h-1 | uscode.house.gov | +| 증권법 §18(b)(4)(F)·(c)(2)(A)·(c)(3) | 15 U.S.C. §77r | uscode.house.gov | +| Rule 500 | 17 C.F.R. §230.500 | ecfr.gov | +| Rule 503 | 17 C.F.R. §230.503 | ecfr.gov | +| Rule 506 | 17 C.F.R. §230.506 | ecfr.gov | +| Rule 507 | 17 C.F.R. §230.507 | ecfr.gov | +| Rule 508 | 17 C.F.R. §230.508 | ecfr.gov | +| Form D | 17 C.F.R. §239.500 + 서식 SEC1972 (5/17) | ecfr.gov · sec.gov | +| Release 33-11347 (Pipe Technologies) | Securities Act Rel. No. 11347 (2024-12-20) | sec.gov | +| Press Release 2024-210 | 2024-12-20 (3건 제재) | sec.gov | +| Form D FAQ | Div. of Corp. Fin. (2026-03-17 갱신) | sec.gov | +| Release 33-9416 (미채택 제안) | Rel. No. 33-9416 (2013-07-10) | sec.gov | +| Release 33-8891 (전자제출 채택) | Rel. No. 33-8891 (2008-02-06) | sec.gov | +| EDGAR Submissions API | data.sec.gov/submissions/CIK##########.json | sec.gov | +| BUIDL Form D (실데이터) | CIK 0002013810, Accession 0002014390-24-000001 | sec.gov (EDGAR) | + +## 부록 B — BUIDL 적용 노트 + +BUIDL(BlackRock USD Institutional Digital Liquidity Fund Ltd.)은 E-01에 관한 한 **추정이 필요 없는 실증 사례**다 — Form D가 EDGAR에 공개되어 있기 때문이다. 확인된 공적 사실: Filer = BlackRock USD Institutional Digital Liquidity Fund Ltd., CIK 0002013810, Accession 0002014390-24-000001, Filing Date 2024-03-18, Type D(Act 33), State of Incorp. D8(BVI), **Item 6 = Rule 506(c) + Section 3(c)(7)**, 후속 D/A 이력 존재(계속 발행). 요지는 셋이다. **(1) R1+R3 전제의 공적 확인** — 우리 시스템이 “506(c) + §3(c)(7)”으로 R1·R3를 동시 부착하는 근거는 발행자 자신이 Form D Item 6에 두 항목을 함께 체크한 사실로 뒷받침된다(§3.0.1). E-01의 G4 AND 게이트가 대조하는 값이 바로 이것이다. **(2) 역외 발행자도 Rule 503을 진다** — BVI 펀드임에도 Form D를 실제로 제출했다. D-01의 FPI 분기 같은 선행 판단이 E-01에는 없다(§3.0.1 해설 2). **(3) 실데이터 테스트 벡터** — 실제 BUIDL의 Form D 값을 L4 테스트 fixture로 그대로 사용하는 것이 가장 현실적이다(T12·T7). Decipher 데모의 BUIDL-like 자산은 실제 BUIDL을 모델링한 것이므로, 순수 데모 자산이면 G0에서 미부착(P0)되고, 506(c) 발행을 모사하면 테스트 Form D 사실을 Manifest에 주입해 G1~G6을 태운다. + +**안전(모델링 명시).** 본 문서의 BUIDL 서술은 공개된 EDGAR 공적 기록과 공시 자료에 근거하되, 실제 BlackRock BUIDL의 현재 운영 조건·transfer architecture를 단정하지 않는다. Decipher의 BUIDL-like 자산은 BUIDL을 ERC-3643 테스트 토큰으로 모델링한 것이며 실제 BUIDL 자체가 아니다. + +## 부록 C — 용어·부등호 정정 노트 + +- **Form D 제출은 506(c)의 조건이 아니다.** Rule 506(c)(1)이 조건으로 여는 것은 §§230.501·230.502(a)·(d)뿐이고 §230.503은 없다(§3.5). SEC도 동일(FAQ 답변 5; Commission order 33-11347 ¶6). E-01의 FAIL은 면제 불성립을 뜻하지 않는다. + +- **“면제 유지”와 “위법 아님”은 다르다.** Rule 503 위반은 그 자체로 위법이며(33-11347 ¶6 후단), 2024-12-20 SEC가 미제출만으로 3건을 제재했다($60,000/$195,000/$175,000). 두 명제가 동시에 참이다. + +- **Rule 507은 자동 실격이 아니다.** 방아쇠는 “503 위반”이 아니라 “503 위반을 이유로 **법원의 유지명령을 받았을 것**”이다(§3.9). 미제출 → 위반 → (법원 injunction) → 실격의 3단 구조이며 507(b) good cause 예외가 있다. 2024년 제재는 §8A 행정절차였고 injunction이 아니었다. + +- **부등호.** Rule 503(a)(1): “no later than 15 calendar days” → 경과 **≤ 15**면 적법(15일째 당일 적법), **> 15**면 지각. 다만 말일이 토·일·공휴일이면 **다음 영업일로 연장**되므로 “> 15면 곧 위반”이 아니라 “> **조정된 마감일**이면 위반”이다. 연차 수정: “on or before the first anniversary” → **≤ 1주년** 적법. 비적격투자자: 수정 예외에서 빠지는 기준은 **> 35명**. + +- **15역일 vs 조정 마감일.** 온체인은 원시 일수를 세지 않고 off-chain에서 확정된 `formDDueDate`와만 비교한다(§4.2·§5.3). 온체인에서 `now - dateOfFirstSale > 15 days`를 계산하면 공휴일 누락으로 적법 발행에 오탐이 붙는다. + +- **최초 매도일 ≠ mint ≠ 결제.** “irrevocably contractually committed to invest”는 청약계약서·수표 수령일일 수 있으며(FAQ 답변 1; Form D 지침), 온체인 mint보다 앞설 수 있다. 기계 도출 금지 — Manifest 주입 필드(§3.15·OD-E01-2). + +- **§18(b)(4) 항 번호.** 현행은 (b)(4)**(F)**다. 2013년 SEC 발행문서의 (b)(4)**(D)** 인용은 2015년 FAST Act 재지정 전 것이다(§3.13). 옛 자료를 그대로 옮기면 틀린 조항을 인용한다. + +- **주(州) 정지권은 연방 면제와 별개.** §18(c)(3): 주는 filing·fee 미제출을 이유로 그 주 내 offer·sale을 정지할 수 있다. 연방 면제가 유지되어도 특정 주에서 거래가 멈출 수 있다(§3.13). NSMIA가 주에서 뺏은 것은 심사권이지 집행권이 아니다. + +- **Rule 508(a)는 E-01의 근거가 아니다.** 508(a)는 “504·506의 term, condition or requirement”의 일탈을 다루는데 Rule 503은 506의 조건이 아니므로 경로가 어긋난다. 오히려 **508(b) 전단**(“Regulation D 전 조항 준수”)과 **후단**(§20 제소 가능)이 “왜 503 위반이 독립 위법인가”의 조문상 뒷받침이다(§3.10). 508(a)(2) 중대 목록은 현행상 (b)(2)**(i)만**이고 제소 근거는 **§20**이다. + +- **Release 33-9416은 채택되지 않았다.** 사전 Form D·closing amendment·1년 실격 제안은 현행법이 아니다(§3.15). 현행 Rule 503에 사전제출 조항이 없고 Rule 507은 여전히 injunction을 요구한다. 제안 텍스트를 현행법으로 인용하지 않는다. + +- **E-01은 매수인이 아니라 자산·발행자를 본다.** `from`·`to`를 받되 쓰지 않는다(§3.20). FAIL은 매수인 교체로 치유되지 않는다 — 자산 단위 차단(§8.4·T16). + +## 부록 D — 결론 + +E-01은 “Form D가 없으면 면제가 깨진다”를 구현하는 부품이 **아니다**. Rule 506(c)(1)의 조건 목록에 §230.503이 없다는 조문 사실과, “면제 상실은 없으나 위반은 성립한다”는 Commission 자신의 진술(Release 33-11347 ¶6)이 그 출발점이다. E-01이 실제로 하는 일은, 면제는 살아 있으나 발행자가 **연방 제재·Rule 507 실격·주(州) 정지**라는 세 갈래 위험에 노출된 자산을 우리 거래소가 계속 유통시킬지에 관한 **보수적 운영 게이트**를 세우는 것이다. 그리고 그 위험은 실재한다 — 2024-12-20 SEC는 미제출만으로 세 발행자를 제재했고, 506(c) 자산에는 일반청약권유를 이유로 §4(a)(2)로 후퇴할 탈출구가 없다(¶8). + +부품의 성격은 세 가지로 요약된다. **첫째, 인식론적으로 강하다** — 사인의 판단을 신뢰하는 A-계열과 달리 연방정부의 공적 등록부(EDGAR)를 대조하며, 발행자가 “냈다”고 주장해도 EDGAR에 없으면 안 낸 것이다. 다만 온체인이 EDGAR를 직접 못 보므로 마지막 전달 구간에서 신뢰 문제가 재등장하되, 그것은 “판단의 신뢰”가 아니라 “사실의 전달”이며 `accessionNumber`로 항상 대사 가능하다. **둘째, 치유 가능하다** — D-01의 구조적 상한과 달리 발행자가 서류를 내면 끝나므로, 게이트는 처벌이 아니라 압박으로 설계된다. **셋째, 함정이 몇 곳에 몰려 있다** — 지각을 차단으로 바꾸면 법적으로 틀리고(T5), 원시 일수로 마감을 계산하면 오탐이 나며(T6), 종료된 발행의 `offeringOngoing`을 빠뜨리면 유통 중 자산이 영구 차단되고(T15), 최초 매도일을 온체인 이벤트에서 도출하면 마감을 놓친다(OD-E01-2). 이 네 지점이 본 부품의 핵심 회귀 테스트이자, 리걸→개발 인수인계에서 가장 강조되어야 할 대목이다. + +## 변경 이력 (Change Log) + +- **[2026-07-20] v1.0** — E-01 최초 walkthrough. 범위 = Rule 503의 Form D 제출 의무를 R1(Reg D 506(c) Issuance) 전용의 pre-trade STATELESS 게이트로 정식화(Pattern A, 기계 판정형·공적 데이터 확인). 결정적 발견: (1) Rule 506(c)(1) 조건 목록에 §230.503 부재 → E-01의 FAIL은 면제 불성립이 아님(`legalNature = OPERATIONAL_GATE`); (2) Commission order 33-11347 ¶6의 “면제 유지 ∧ 위법 성립” 이중 명제와 ¶8의 506(c) 탈출구 봉쇄 논증; (3) §18(c)(3) 주 정지권이 연방 면제와 별개로 온체인 자산 유통을 위협 — 실무상 최대 위험; (4) 6-게이트 로직(G0 관련성 → G1 존재 → G2 진위 → G3 동일성 → G4 정합[R1+R3 시 AND] → G5 신선도 → G6 적시성[비차단 flag]); (5) `dateOfFirstSale` 등 4개 법적 판단 필드의 결정화 필요(기계 도출 금지). 실데이터 확인: BUIDL Form D(CIK 0002013810, Accession 0002014390-24-000001, Item 6 = {506(c), 3(c)(7)})를 L4 테스트 벡터로 채택. 10개 Open Issue(OD-E01-1~10); OD-E01-2(법적 판단 필드 결정화)가 최우선, OD-E01-7(Release 33-9416 채택 시 성격 전환)이 최대 변경 위험. 전 조문 1차 출처(uscode.house.gov·ecfr.gov·sec.gov) verbatim 확인. + diff --git a/docs/compliance/elements/E-03.md b/docs/compliance/elements/E-03.md new file mode 100644 index 0000000..d2a0dd3 --- /dev/null +++ b/docs/compliance/elements/E-03.md @@ -0,0 +1,799 @@ +# ELE.E-03_bad-actor + +# E-03 Bad Actor Disqualification(전과자 차단) — 부품 심층 인수인계 문서 (Walkthrough) + +**이 문서는 무엇인가.** Decipher RWA DEX의 컴플라이언스 부품 중 하나인 전과자 차단 부품(내부 식별자 E-03)을, 미국 증권 발행 규제를 처음 보는 사람도 이해할 수 있도록 풀어 쓴 인수인계 문서다. 개발자·법무팀·외부 자문 변호사·학회원이 각자 작업의 base로 그대로 쓸 수 있도록 — ① 이 규제가 어디서 왔고 왜 존재하는지, ② 어떤 사실을 입력받아 ③ 어떤 로직으로 PASS/FAIL이 결정되고 ④ 실패하면 어떻게 처리하며 ⑤ 어떤 테스트로 검증하는지를, 기술 요소마다 풀이를 함께 붙여 설명한다. + +**자체완결 원칙.** 이 문서는 다른 내부 문서를 열지 않아도 단독으로 이해되도록 작성했다. 인용은 미국 연방법·연방규칙·SEC 발행문서 등 외부 공식 자료만 사용한다. + +**출처 기준 (Version 1.0, 2026-07-20).** 본 부품의 미국 증권법 인용은 다음 1차 출처를 기준으로 한다 — 17 CFR §230.501·§230.506은 eCFR 현행본(Title 17, 2026-07-16 기준 표시·최종 개정 2026-06-25 반영), 15 U.S.C. §77d·§77e는 uscode.house.gov 현행본(2026-06-05 시행 법률 반영), Dodd-Frank Act §926은 uscode.house.gov가 §77d 아래 수록한 법령 주석(Pub. L. 111-203, title IX, §926, 124 Stat. 1851)이다. SEC 채택 release(Release No. 33-9414, 78 FR 44730, 2013-07-24)와 스몰비즈니스 컴플라이언스 가이드(2013-09-19, 최종 검토 2013-12-05)는 sec.gov·federalregister.gov다. 전 조문은 2026-07-20 접속·문자 대조했다. 제정법 출처는 uscode.house.gov로 통일했으며, govinfo.gov/link/uscode/... 딥링크도 동일한 1차 출처다. Cornell LII·Justia 등 2차 DB는 사용하지 않았다. + +**테스트 토큰 전제 (중요).** 본 문서는 실제 BlackRock BUIDL의 발행 표준, 발행 참여자 구성, 또는 현재 운영 조건을 단정하지 않는다. 본 프로젝트는 BUIDL-like 자산(Rule 506(c) 발행 + ICA §3(c)(7) 펀드 지분)을 ERC-3643 테스트 토큰으로 모델링하여, 발행 국면의 발행자 측 자격상실 게이팅을 검증하는 것이다. 이하 'BUIDL'·'ERC-3643' 관련 서술은 모두 이 모델링 전제 하의 것이다. + +## §1. 규제 맥락 — 이 부품이 다루는 규제는 어디서 왔는가 (Context First) + +**왜 맥락부터 읽어야 하나.** 지금까지의 부품 대부분은 *"이 매수인이 살 자격이 있는가"*를 물었다(A-03 적격투자자, A-13 QP 등 — 매수 측). E-03은 물음의 방향이 반대다 — *"이 발행 자체가, 발행자 측 인물의 전력 때문에 오염되어 Rule 506 면제를 잃지 않는가"*를 발행 직전에 판정한다. 매수인이 누구든 상관없다. 발행인 본인, 그 임원·이사, 20% 이상 지분권자, promoter, 보수받는 모집인 — 이 사람들 중 하나라도 증권사기 유죄나 규제 제재 같은 '자격상실 사유(disqualifying event)'에 걸리면, **그 발행의 Rule 506 면제 전체가 무너진다.** 한 사람의 전력이 발행 전체를 감염시키는 구조이므로, 이 부품은 "누가 파는가"가 아니라 "발행 명의 뒤에 누가 서 있는가"를 본다. 그 규범이 조문 어디에서 나오는지, 왜 존재하는지를 먼저 깐다. + +### 1.1 발행 규제 지형에서 "발행자가 깨끗한가"의 자리 + +미국 연방 증권규제의 기본값은 1933년법 §5의 등록의무다 — 등록 없이는 팔지도, 청약하지도 못한다. Decipher에 올라오는 BUIDL-like 자산은 Rule 506(c)로 이 등록의무를 면제받아 발행된다. Rule 506은 §4(a)(2) "사모(private offering)" 면제의 safe harbor이고(Rule 506(a)), 그 위에 두 트랙 — 비일반청약의 506(b)와 일반청약 허용의 506(c) — 이 있다. 두 트랙 모두에 공통으로 얹히는 게이트가 **Rule 506(d) "Bad Actor" disqualification**이다. + +| 발행 트랙 | 근거 | 면제의 구조 | 발행자 측에 거는 요건 | +| --- | --- | --- | --- | +| Rule 506(b) | 17 C.F.R. §230.506(b) (§4(a)(2) 의제) | 비공개 발행 의제 — 비일반청약·35인 한도 | **(d) covered person 무결** + (e) pre-2013 사유 공시 | +| Rule 506(c) | 17 C.F.R. §230.506(c) (§4(a)(2) 의제) | 비공개 발행 의제 — 전원 AI·일반청약 허용 | **(d) covered person 무결** + (e) pre-2013 사유 공시 | + +핵심은 (d)가 매수인이 아니라 **발행 명의 뒤의 인물 집합(covered persons)**에 요건을 건다는 점이다. 그 집합에 자격상실 사유가 있으면 면제가 성립하지 않고, 사유가 2013-09-23 이전에 발생한 것이면 자격상실 대신 (e)의 서면 공시 의무로 갈린다. E-03은 이 두 갈래 — 자격상실(506(d)) 판정과 공시(506(e)) 판정 — 를 발행 직전 게이트로 원자화한 것이다. + +**쉽게 말하면:** 오프라인 세계에서 이 요건은 "전과 있는 사람은 이 면제로 사모를 하지 말라, 예전 일이면 최소한 투자자에게 알려라"라는 발행 적격 규범이었다. DEX에서는 발행(mint) 직전에 "이 발행의 참여자 집단이 깨끗한지 확인된 증서(clearance)가 있는가"라는 게이트로 번역되고, 그 게이트가 E-03이다. + +### 1.2 왜 이 규제가 존재하는가 — Dodd-Frank §926과 상습 위반자 차단 + +Rule 506(d)는 2013년 이전에는 존재하지 않았다. 그 전의 Rule 506에는 bad actor 요건이 아예 없었다. 이 게이트는 2010년 **Dodd-Frank Act §926**이 SEC에 신설을 의무화한 결과다. §926의 설계 목적은 명료하다 — 사기·조작·기만 전력이 있는 자가 가장 널리 쓰이는 사모 면제(Rule 506)의 그늘 뒤에서 다시 자금을 모으는 것을 막는 것이다. Rule 506은 Regulation D 발행의 90~95%를 차지하는 압도적 다수 경로이므로, 여기에 상습 위반자 차단을 붙이는 것이 투자자 보호의 급소였다. + +§926은 두 가지를 요구했다: ① 신설 규칙이 Regulation A의 자격상실 조항인 **Rule 262와 substantially similar** 할 것, ② §926이 열거한 추가 사유(특정 주 규제기관의 명령·bar 등)를 포함할 것. SEC는 2013년 이를 Rule 506의 새 (d)·(e)항으로 채택했다(Release 33-9414). 그래서 (d)(1)의 자격상실 사유 목록은 Reg A Rule 262의 계보를 이으면서, §926이 추가한 주 금융규제기관의 final order와 bar를 흡수한 형태다. + +이 연혁이 곧 E-03의 사유 지도다. 게이트가 판정하는 것은 발행자 측 인물의 전력 하나하나가 아니라, **"그 전력 전부를 조사(reasonable inquiry)해 문제없음이 확인되었는가"**라는 발행자의 주의의무 이행 여부다. 조사 자체는 오프체인의 법률·실사 판단이고, 게이트는 그 판단이 봉인된 증서의 유효성만 읽는다 — 이 분리가 이 부품의 아키텍처를 결정한다. + +### 1.3 disqualification과 disclosure의 이분법 — 2013-09-23이라는 분기선 + +E-03을 이해하는 가장 중요한 축은 **날짜 하나**다. Rule 506(d)(2)(i)과 (e)가 그은 분기선은 자격상실 사유의 **발생 시점**이 2013-09-23(규칙 발효일) 이후냐 이전이냐다. + +- **사유가 2013-09-23 이후 발생** → **(d) 자격상실**. 발행이 Rule 506 면제를 통째로 잃는다(구제·항변 없으면). +- **사유가 2013-09-23 이전 발생** → **(e) 공시 의무**. 발행은 여전히 Rule 506을 쓸 수 있지만, 그 사유를 "자격상실을 유발했을 사항"으로 각 매수인에게 **매도 상당기간 전 서면**으로 알려야 한다. 이 공시는 waiver 대상이 아니다. + +주의할 함정 둘. ① 분기 기준은 **사건(유죄판결·명령)의 발생 시점**이지 그 밑에 깔린 행위(underlying conduct)의 시점이 아니다 — 행위는 2013년 전이라도 유죄판결이 2013년 후면 자격상실이다. ② look-back 기간(예: "직전 5년/10년")도 사건 시점부터 세지 행위 시점부터 세지 않는다. 이 두 함정은 §3·§5에서 문언으로 고정한다. + +### 1.4 Decipher 시스템에서 왜 중요한가 — Existential Risk + +이제 우리 시스템으로 내려오자. E-03의 실패가 어디에 닿는지가 이 부품의 존재 이유다. Rule 506(d)(1)은 "No exemption under this section shall be available for a sale of securities if …"로 시작한다 — 조건을 만족하면 **그 발행(sale)에 면제가 없다**. 면제가 없으면 그 매도는 §5 미등록 판매의 사정권으로 들어간다. §5는 고의·과실을 묻지 않는 무과실 조항이고, 면제의 입증책임은 면제를 주장하는 쪽에 있다. + +covered person 오염 → 506(d) 자격상실 → 그 발행의 Rule 506 면제 상실 → 매도가 §5 미등록 판매 사정권 진입 (무과실) → 발행인 rescission 노출·투자자 손해배상 → R1이 매 거래에 부착되어 발행 framework 유지를 확인하는 구조상, 발행이 오염되면 그 토큰의 유통 전 구간이 불안정 → venue가 오염된 발행의 mint·유통을 반복 체결한 기록 = 감독 대응·BD/ATS 성격규명 국면의 최악의 사실관계 + +마지막 줄이 E-03을 "있으면 좋은" 필터가 아니라 존립(existential) 안전장치로 만든다. 발행이 오염되면 잘못되는 것은 첫 mint 하나가 아니다 — 그 토큰 전체의 면제 기반, 그 물량을 받은 하류 보유자의 지위, 그리고 venue의 규제 방어 서사가 함께 흔들린다. 게다가 disqualifying event는 발행 개시 후에도 발생할 수 있어(임원이 발행 도중 제재를 받는 경우), 한 번 통과했다고 영구히 안전하지 않다 — 그래서 clearance 증서에는 신선도(재조사 주기)와 취소(revocation)가 필수로 얹힌다. 이 부품의 설계 철학은 시종 "보수적으로 — 조사·확인이 봉인된 증서가 있고 그것이 신선하며 취소되지 않은 발행만 열고, 확인 불가면 막는다(fail-closed)"이다. + +**쉽게 말하면:** E-03이 실수로 오염된 발행을 통과시키면, 그 토큰을 산 모든 투자자가 rescission(원상회복) 위험에 노출되고, 발행인은 미등록 판매 책임을 지며, 플랫폼은 "전과자 발행을 걸러내지 못한 곳"이라는 기록을 남긴다. 반대로 조사가 부실해도 게이트는 증서만 보고 통과시킬 수 있으므로, 증서 발급 기준서(§11)와 발급기관 감사가 이 부품의 실질 방어선이다. + +## §2. 메타 정보 (Internal Identifier Box) + +아래는 Decipher 내부 PM 규약상의 식별자·분류값을 한곳에 모은 박스다. 본문에서는 이 코드들을 단독으로 쓰지 않고, "본 부품"·"전과자 차단 부품" 같은 자연어로 부른다. 코드는 시스템 추적용으로만 여기 둔다. + +| 항목 | 값 | 한 줄 풀이 | +| --- | --- | --- | +| 부품 이름 | 전과자 차단 (Bad Actor Disqualification) | 이 발행의 참여자 집단이 Rule 506 자격상실 사유에 걸리지 않는지 확인 | +| 검사 대상 | ① covered person roster 선언 존재·완전성 ② bad-actor clearance 증서의 존재·서명·범위 ③ 신선도(재조사 주기) ④ 미취소 ⑤ pre-2013 사유 존재 시 506(e) 공시 이행 플래그 | "이 발행이 발행자 측 전력 때문에 면제를 잃지 않음이 확인됐나" | +| Internal ID | E-03 (Decipher PM 규약) | 부품 일련번호 | +| 검증 방식 | 기계 판정 (Pattern A) — 증서 존재·서명·범위·신선도·취소 상태의 결정론 검사. 자격상실 사유의 실질 판단(어느 사유·look-back·in-effect)만 off-chain clearance로 위임 | 게이트는 결정론, 사유 판단은 실사·법무 | +| Timing | pre-trade (발행/mint 직전) + 상장 시점 roster·증서 검사 | 발행이 일어나기 전에 막는다 | +| Stateful 여부 | STATELESS (Element 한정) | 게이트는 증서 상수·발행 컨텍스트·취소 flag의 현재 스냅샷만 읽는다. 증서의 신선도·취소·재발급은 A-11 주기·발급기관·거버넌스 경로(거래 외)로만 갱신된다 | +| 주 활성화 Recipe | R1 (Reg D 506(c) Issuance) — 필수 attach | 발행 거래마다 명시 검사 (R2·R3·R4 비부착) | +| Cumulative Recipe | 없음 — 발행자 측 게이트라 재판매(R2)·펀드(R3)·행위(R4)에는 부착되지 않음 | 발행 국면 전용 | +| Cascade Element | A-08·A-09(entity covered person look-through — 20% 지분권자·모집인이 법인일 때) · A-11(증서 만료) · A-06(affiliated issuer의 control 판정) · E-01(Form D — 발행자 측 형제 부품) | roster 구성·증서 신선도에 얹히거나 이어지는 검사들 | +| 성숙도 | 완료 (본 문서로 Spec 확정) | R1 전용, 데모 필수 | +| 파일·위치 | E-03_bad-actor.md · 산출물/elements/ | 산출물 경로 | + +## §3. ① 법적 근거 (Layer 1 → 2 → 3) + +**읽는 법.** 법적 근거는 세 겹이다 — Layer 1(조문)은 의회가 만든 법률 텍스트(statute), Layer 2(규칙)는 SEC가 그것을 실무 수준으로 구체화한 연방규칙(rule), Layer 3(해석)은 채택 release·staff 가이드가 모호한 부분을 메운 해석이다. 아래 §3.0.2 표의 **종류** 칸이 그대로 Layer에 대응한다 — Statute = Layer 1, SEC Rule = Layer 2, SEC Release·SEC Staff = Layer 3. 본 절은 조문이 작동하는 **논리 흐름 순서**로 배열돼 §3.1~§3.16 번호를 유지하며, 각 항목이 어느 Layer인지는 표의 종류 칸으로 확인한다. + +### 3.0 법조문 관계 플로우차트 (개발자용) + +아래 그림은 세 Layer의 조문·규칙이 E-03 판정에서 어떻게 연결되는지를 하나의 큰 흐름으로 정리한 것이다 — §5 등록의무 기본값에서 출발해, §4(a)(2) 사모 면제와 그 safe harbor인 Rule 506으로 내려오고, Dodd-Frank §926이 신설을 위임한 Rule 506(d)의 covered person × 자격상실 사유 판정에 이르며, 2013-09-23을 기준으로 자격상실(506(d))과 공시(506(e))로 갈라진 뒤, reasonable care 항변·waiver·affiliated issuer 예외라는 세 출구가 어떻게 면제를 유지시키는지를 보여준다. 각 조항의 상세는 §3.1~§3.14. + +![그림 3.0 — 법조문 관계 흐름: §5 기본값 → §4(a)(2) 사모 → Rule 506 safe harbor → §926 위임 → 506(d) 판정 → 2013 분기 → 항변·waiver 출구](fig30_e03.png) + +*그림 3.0 — 법조문 관계 흐름: §5 기본값 → §4(a)(2) 사모 → Rule 506 safe harbor → §926 위임 → 506(d) covered person × 사유 → 2013-09-23 분기(자격상실/공시) → reasonable care·waiver·제휴 예외 출구 (개발자용)* + +**범례.** + +- 파랑 = 핵심(Direct/Supporting: §4(a)(2), Rule 506(a), §926, 506(d)(1) covered person × event) + +- 회색 = 판정·분기 노드(2013-09-23 기준) + +- 초록 = PASS·면제 유지 경로(reasonable care 항변, waiver, 공시 이행) + +- 빨강 = FAIL(자격상실 → §5 미등록 판매, 공시 불이행) + +- 주황 = 조건부·참고(506(e) 공시 갈래, (d)(3) 제휴 예외) + +### 3.0.1 실제 BUIDL에 어떻게 적용되나 + +§3.0이 일반 조문 흐름이라면, 이 절은 BUIDL-like 테스트 토큰에 E-03이 어떻게 걸리는지를 보여준다. **(재확인) 본 서술은 실제 BlackRock BUIDL의 발행 표준·발행 참여자 구성·현재 운영 조건을 단정하지 않는다.** + +**현실 선례 — 왜 발행자 측 실사가 표준인가.** 현실의 Rule 506(c) 사모에서 발행인은 발행 전 통상 covered person 전원에 대한 D&O 질문서·배경조사·인수기관 확인을 수행하고, 그 결과를 offering memorandum·발행 기록에 봉인한다. 이는 우연이 아니다: (d)(2)(iv) reasonable care 항변이 "factual inquiry"를 실제로 했을 것을 전제하므로, 발행인은 조사를 문서로 남겨 두어야 항변이 성립하기 때문이다. Decipher의 clearance 증서는 이 현실의 실사 산출물을 온체인 게이트가 읽을 수 있는 형태로 옮긴 것이다. + +**Decipher 모델의 카드 기재.** 본 프로젝트의 BUIDL-like 발행은 상장 시점에 covered person roster(발행인·investment manager·이사·임원·20% 이상 지분권자·promoter·모집인 등)를 선언하고, L2 검증기관(실사 counsel·전환대리인)이 factual inquiry를 수행해 bad-actor clearance 증서를 발급한다. 증서는 offeringId에 scope되고, A-11 주기로 갱신되며, 발행 도중 covered person에게 제재가 생기면 취소된다. mint 거래마다 게이트는 이 증서의 존재·서명·범위·신선도·취소 상태를 확인한다. + +**김 부장 시나리오와의 관계.** 재판매 국면의 "김 부장(BlackRock 임원 = affiliate) 매도"는 E-03의 소관이 아니다 — E-03은 발행자 측 게이트라 R1(발행)에만 부착되고 R2(재판매)에는 걸리지 않는다. 다만 김 부장이 만약 **발행인 측 covered person**(예: pooled fund의 investment manager 임원)이기도 하다면, 그의 전력은 발행 국면 E-03의 조사 대상이 된다 — "매도인으로서의 김 부장"(R2·A-06 소관)과 "발행 참여자로서의 김 부장"(R1·E-03 소관)은 다른 물음이다. + +### 3.0.2 조문 순서·중요성 한눈에 보기 (법 리스트) + +아래 두 표가 §3의 지도다. **표 1**(Authority)은 각 근거가 어떤 종류(=Layer)이고 무슨 내용이며 E-03에 어떻게 닿는지를, **표 2**(순서·중요성)는 아래 §3.1~§3.16 소단원의 읽는 순서(논리 흐름)와 중요성(E-03이 실제로 그걸로 판정하는가)을 보여준다. 순서는 중요도순이 아니라 흐름순이다. 제정법 출처는 uscode.house.gov로 통일했다. + +**표 1 — Authority(근거 목록)** + +| 종류 | Authority | 내용 | E-03 관련성 | Direct/Supporting | Official URL | +| --- | --- | --- | --- | --- | --- | +| Statute | Securities Act §5 · 15 U.S.C. §77e(a)·(c) | 등록의무 기본값(무과실) | 자격상실이 도착하는 종착점 — fail-closed 설계 근거 | Background | uscode.house.gov | +| Statute | Securities Act §4(a)(2) · 15 U.S.C. §77d(a)(2) | 사모(비공개 발행) 면제 | Rule 506이 구체화하는 제정법 면제 — 면제의 뿌리 | Supporting | uscode.house.gov | +| Statute | Securities Act §4(b) · 15 U.S.C. §77d(b) | 506 일반청약도 공개발행 아님 | 506(c) 트랙이 §4(a)(2) 면제로 남는 근거 | Background | uscode.house.gov | +| Statute | Dodd-Frank Act §926 · Pub. L. 111-203 §926 (124 Stat. 1851) | bad actor 규칙 신설 위임(Rule 262 substantially similar + 주 규제 사유) | 506(d) 존재 이유·사유 목록의 origin | Supporting | uscode.house.gov (§77d note) | +| SEC Rule | Rule 506(a) · 17 C.F.R. §230.506(a) | 506 발행 = §4(a)(2) 거래 의제 | 면제 성립의 규칙 좌표 | Supporting | ecfr.gov | +| SEC Rule | Rule 506(d)(1) · §230.506(d)(1) | covered person 집합 + 자격상실 사유 (i)~(viii) | **판정 본체** — 무엇이 발행을 오염시키나 | Direct | ecfr.gov | +| SEC Rule | Rule 506(d)(2) · §230.506(d)(2) | 예외 — pre-2013·good cause waiver·발령기관 advice·reasonable care | 자격상실의 출구·항변 | Direct | ecfr.gov | +| SEC Rule | Rule 506(d)(3) · §230.506(d)(3) | affiliated issuer 시점 예외 | 제휴 성립 전 사건의 조건부 배제 | Conditional | ecfr.gov | +| SEC Rule | Rule 506(e) · §230.506(e) | pre-2013 사유의 서면 공시 의무 | 자격상실 대신 공시로 가는 갈래 | Direct | ecfr.gov | +| SEC Rule | Rule 501(f) · §230.501(f) | executive officer 정의 | covered person 범위의 문언 고정 | Supporting | ecfr.gov | +| SEC Rule | Rule 501(g) · §230.501(g) | final order 정의 | (d)(1)(iii) 사유의 문언 고정 | Supporting | ecfr.gov | +| SEC Rule | Rule 405 · §230.405 | promoter·officer 정의 | covered person 범위(promoter·participating officer) | Supporting | ecfr.gov | +| SEC Release | Release No. 33-9414 (2013-07-24) · 78 FR 44730 | 채택 release — reasonable care·voting power·participating officer·look-back 기산 | (d)·(e) 현행 구조의 취지·해석 확정 | Supporting | sec.gov | +| SEC Staff | Small Entity Compliance Guide (2013-09-19) | covered person·disqualifying event·in-effect·bar 존속·공시 실무 해설 | 문언의 실무 적용 기준 | Supporting | sec.gov | + +**표 2 — 조문 순서·중요성 한눈에 보기** + +| 순서 | 조문 | 중요성 | E-03이 그걸로 하는 일 | +| --- | --- | --- | --- | +| §3.1 | Securities Act §5 — 등록의무 기본값 | 배경 | 안 함 — fail-closed 설계의 종착점 | +| §3.2 | §4(a)(2) — 사모 면제 | 보조 | 안 함 — 면제의 제정법 뿌리 | +| §3.3 | §4(b) — 506 일반청약도 공개발행 아님 | 배경 | 안 함 — 506(c) 트랙의 좌표 | +| §3.4 | Dodd-Frank §926 — 신설 위임 | 보조 | 안 함 — 506(d) 존재 이유·사유 origin | +| §3.5 | Rule 506(a) — §4(a)(2) 의제 | 보조 | 발행 면제 성립의 규칙 확인 | +| §3.6 | Rule 506(d)(1) — covered person × 사유 | 핵심 | 오염 여부의 판정 본체(증서가 봉인) | +| §3.7 | Rule 506(d)(2) — 예외·항변 | 핵심 | 자격상실의 출구(pre-2013·waiver·reasonable care) | +| §3.8 | Rule 506(d)(3) — 제휴 시점 예외 | 핵심(조건부) | affiliated issuer 사건의 조건부 배제 | +| §3.9 | Rule 506(e) — pre-2013 공시 | 핵심 | 공시 갈래의 게이트(506(e) 플래그) | +| §3.10 | Rule 501(f) — executive officer | 보조 | covered person 범위 문언 고정 | +| §3.11 | Rule 501(g) — final order | 보조 | (d)(1)(iii) 사유 문언 고정 | +| §3.12 | Rule 405 — promoter·officer | 보조 | covered person 범위(promoter·participating officer) | +| §3.13 | Release 33-8869 계열 아님 — Release 33-9414 (Layer 3) | 보조 | 안 함 — reasonable care·voting power 해석 | +| §3.14 | Compliance Guide 2013-09-19 (Layer 3) | 배경 | 안 함 — in-effect·bar 존속·공시 실무 | +| §3.15 | Sub-요건 분해 매트릭스 | — | 위 요건을 원자적 검증 단위로 분해 | +| §3.16 | ERC-3643 변환·clearance 필드 총정리 | — | §3.1~§3.14의 필드 매핑을 한 표로 | + +**경계 — 이 부품이 다루지 않는 것.** 아래 조문·쟁점은 같은 발행에 작동하지만 E-03이 아니라 다른 부품·레이어가 책임진다 — 누락이 아니라 소관 분리이며, E-03 안에 끌어다 구현하지 않는다. + +- **매수인 자격** (Rule 501(a) accredited investor, ICA §2(a)(51) QP) — A-03·A-13 소관. E-03은 매수 측을 보지 않는다. + +- **Form D 신고** (Rule 503·Reg D notice) — E-01 소관. E-03은 신고가 아니라 발행자 측 인물의 전력을 본다. + +- **affiliate/control 판정 자체** (Rule 144(a)(1)·Rule 405 control) — A-06 소관. E-03은 affiliated issuer의 control 여부를 A-06 산출로 소비한다((d)(3) 판단). + +- **entity covered person의 구성원 자격 look-through** (20% 지분권자·모집인이 법인일 때 depth 3) — A-08·A-09 소관. E-03은 roster에 그 산출 결과를 담을 뿐이다. + +- **증서 만료·재검증 주기** — A-11의 보편 규율에 편승. E-03은 자체 만료 로직을 갖지 않는다. + +- **자격상실 사유의 실질 판단** (어느 (i)~(viii)인가, look-back 계산, in-effect 여부, waiver 성립) — L2 검증기관·법무 소관(clearance 증서에 봉인). E-03은 증서의 유효성 층위 판정까지만 한다. + + +### 3.1 Securities Act §5 — 등록의무 기본값 (무과실) [uscode.house.gov] + +- **조항**: Securities Act of 1933 §5(a)·(c), 15 U.S.C. §77e(a)·(c) — uscode.house.gov + +- **핵심 원문**: (a) Unless a registration statement is in effect as to a security, it shall be unlawful for any person, directly or indirectly— (1) to make use of any means or instruments of transportation or communication in interstate commerce or of the mails to sell such security through the use or medium of any prospectus or otherwise; or (2) to carry or cause to be carried through the mails or in interstate commerce, by any means or instruments of transportation, any such security for the purpose of sale or for delivery after sale. [...] (c) It shall be unlawful for any person, directly or indirectly, to make use of any means or instruments of transportation or communication in interstate commerce or of the mails to offer to sell or offer to buy through the use or medium of any prospectus or otherwise any security, unless a registration statement has been filed as to such security [...]. + +- **한국어**: (a) 어느 증권에 관하여 등록신고서가 효력을 갖고 있지 아니하는 한, 누구든지 직접 또는 간접으로 — (1) 주간통상의 운송·통신 수단 또는 우편을 이용하여 prospectus 그 밖의 수단으로 그 증권을 판매하는 것; 또는 (2) 판매 목적으로 또는 판매 후 인도를 위하여 그 증권을 우편 또는 주간통상으로 운반하거나 운반하게 하는 것은 위법이다. [...] (c) 어느 증권에 관하여 등록신고서가 제출되어 있지 아니하는 한, 누구든지 직접 또는 간접으로 주간통상의 운송·통신 수단 또는 우편을 이용하여 prospectus 그 밖의 수단으로 그 증권의 매도 청약 또는 매수 청약을 하는 것은 위법이다. + +- **쉬운 설명**: 발행자 측 자격상실이 실패했을 때 무게가 도착하는 곳이 이 조문이다. §5는 발행 한 번이 아니라 거래 한 건 한 건에 걸리고, 고의·과실을 묻지 않는다. covered person 오염으로 Rule 506 면제가 무너지면, 그 발행의 매도들은 등록 없이 이뤄진 판매가 되어 이 조문의 사정권으로 들어간다 — 면제의 입증책임은 면제를 주장하는 쪽에 있다. E-03에게 이 조문은 이렇게 읽힌다: **자격상실 판정의 실패가 도착하는 곳이 바로 여기이며, 확인 불가면 발행 차단(fail-closed)이 유일한 안전 방향이다.** + +- **PASS/FAIL 반영**: 간접 ✕ — E-03이 §5를 판정하지 않는다. 자격상실의 법적 종착점으로서 fail-closed 설계 원칙의 근거가 된다. + +- **ERC-3643 변환**: 직접 매핑 없음. Router의 cumulative AND(하나라도 FAIL이면 revert)와 발행 게이트의 pre-trade 배치가 이 조문의 "기본값 = 금지" 구조를 코드에 옮긴 것이다. + +### 3.2 Securities Act §4(a)(2) — 사모 면제: E-03이 지키려는 면제의 뿌리 [uscode.house.gov] + +- **조항**: Securities Act §4(a)(2), 15 U.S.C. §77d(a)(2) — uscode.house.gov + +- **핵심 원문**: The provisions of section 77e of this title shall not apply to— [...] (2) transactions by an issuer not involving any public offering. + +- **한국어**: 이 편 §77e(=§5)의 규정은 다음에 적용되지 아니한다 — [...] (2) 발행인의 거래로서 어떠한 공개발행(public offering)도 수반하지 아니하는 것. + +- **쉬운 설명**: Rule 506이 딛고 선 제정법 면제다. §5의 등록의무는 "공개발행이 아닌 발행인 거래"에는 적용되지 않는데, 무엇이 "공개발행 아님"인지는 문언만으로는 불확실하다. SEC는 Rule 506을 그 판단의 safe harbor로 만들었다(§3.5). E-03이 지키려는 것이 바로 이 면제다 — covered person이 오염되면 Rule 506 safe harbor를 잃고, 발행인은 §4(a)(2)의 불확실한 사실판단으로 되던져지거나(입증책임 부담) 아예 면제 밖으로 나간다. **E-03은 이 safe harbor의 발행자 측 진입 조건을 지키는 게이트**다. + +- **PASS/FAIL 반영**: 간접 ✕ — E-03이 §4(a)(2) 요건(공개발행 여부)을 판정하지 않는다. 면제의 제정법 뿌리로서 자격상실의 의미(무엇을 잃는가)를 규정한다. + +- **ERC-3643 변환**: 직접 필드 없음. clearance 증서의 존재가 "이 발행이 506 safe harbor 진입 자격을 갖췄다"는 발행자 측 조건 충족의 증거다. + +### 3.3 Securities Act §4(b) — 506 일반청약도 공개발행이 아니다 [uscode.house.gov] + +- **조항**: Securities Act §4(b), 15 U.S.C. §77d(b) — uscode.house.gov + +- **핵심 원문**: Offers and sales exempt under section 230.506 of title 17, Code of Federal Regulations (as revised pursuant to section 201 of the Jumpstart Our Business Startups Act) shall not be deemed public offerings under the Federal securities laws as a result of general advertising or general solicitation. + +- **한국어**: (JOBS Act §201에 따라 개정된) 17 C.F.R. §230.506에 의하여 면제되는 청약·판매는, general advertising 또는 general solicitation을 이유로 연방증권법상 공개발행으로 간주되지 아니한다. + +- **쉬운 설명**: 506(c) 트랙(일반청약 허용)이 여전히 §4(a)(2) "사모"로 남는 근거다. JOBS Act가 506(c)에서 일반청약을 열어 줬지만, 그렇게 시끄럽게 청약해도 이 조문 덕분에 "공개발행"이 되지 않는다 — 즉 §4(a)(2) 면제를 유지한다. E-03에게 이 조문은 배경 좌표다: BUIDL-like 506(c) 발행이 일반청약을 쓰더라도 면제 구조는 §4(a)(2)이고, 그 면제에 걸린 (d)·(e) 발행자 측 요건은 그대로 적용된다. + +- **PASS/FAIL 반영**: 간접 ✕ — 판정 불사용. 506(c) 트랙이 §4(a)(2) 면제로 남는다는 좌표. + +- **ERC-3643 변환**: 직접 필드 없음. + +### 3.4 Dodd-Frank Act §926 — bad actor 규칙 신설 위임 [uscode.house.gov (§77d note)] + +- **조항**: Dodd-Frank Wall Street Reform and Consumer Protection Act §926, Pub. L. 111-203, title IX, §926, July 21, 2010, 124 Stat. 1851 — uscode.house.gov(15 U.S.C. §77d 아래 "Disqualifying Felons and Other 'Bad Actors' From Regulation D Offerings" 주석) + +- **핵심 원문**: Not later than 1 year after the date of enactment of this Act, the Commission shall issue rules for the disqualification of offerings and sales of securities made under section 230.506 of title 17, Code of Federal Regulations, that— (1) are substantially similar to the provisions of section 230.262 of title 17, Code of Federal Regulations, or any successor thereto; and (2) disqualify any offering or sale of securities by a person that— (A) is subject to a final order of a State securities commission (or an agency or officer of a State performing like functions), a State authority that supervises or examines banks, savings associations, or credit unions, a State insurance commission (or an agency or officer of a State performing like functions), an appropriate Federal banking agency, or the National Credit Union Administration, that— (i) bars the person from— (I) association with an entity regulated by such commission, authority, agency, or officer; (II) engaging in the business of securities, insurance, or banking; or (III) engaging in savings association or credit union activities; or (ii) constitutes a final order based on a violation of any law or regulation that prohibits fraudulent, manipulative, or deceptive conduct within the 10-year period ending on the date of the filing of the offer or sale; or (B) has been convicted of any felony or misdemeanor in connection with the purchase or sale of any security or involving the making of any false filing with the Commission. + +- **한국어**: 이 법 제정일부터 1년 이내에, Commission은 17 C.F.R. §230.506에 따라 이뤄지는 증권의 청약·판매의 자격상실에 관한 규칙을 발한다 — (1) 17 C.F.R. §230.262(또는 그 승계 규정)의 규정과 substantially similar 할 것; 그리고 (2) 다음에 해당하는 자에 의한 증권의 청약·판매를 자격상실시킬 것 — (A) 주 증권위원회(또는 이에 준하는 주의 기관·공무원), 은행·저축조합·신용조합을 감독·검사하는 주 당국, 주 보험위원회(또는 이에 준하는 기관·공무원), 적절한 연방 은행감독기관, 또는 National Credit Union Administration의 final order로서, (i) 그 자를 — (I) 그 위원회·당국·기관·공무원이 규제하는 entity와의 association으로부터; (II) 증권·보험·은행업 영위로부터; 또는 (III) 저축조합·신용조합 활동으로부터 bar하거나; (ii) 청약·판매 신청일로 끝나는 10년 기간 내에 발령된, 사기적·조작적·기만적 행위를 금지하는 법·규정 위반에 근거한 final order를 구성하는 경우; 또는 (B) 증권의 매수·매도와 관련하여 또는 Commission에의 허위 신고와 관련하여 felony 또는 misdemeanor로 유죄판결을 받은 경우. + +- **쉬운 설명**: Rule 506(d)의 출생증명서다. 2013년 이전 Rule 506에는 bad actor 조항이 없었고, 이 §926이 SEC에 신설을 명령했다. 두 요구가 오늘의 (d)(1) 목록을 만들었다 — ① Reg A의 자격상실 조항(Rule 262)과 "substantially similar"할 것, ② 주 금융규제기관의 final order·bar를 포함할 것. 그래서 (d)(1)의 사유 목록은 Reg A 계보(유죄·injunction·SEC 명령·SRO 제재·stop order·우편사기)에 §926이 추가한 주 규제기관 사유(iii)를 얹은 형태다. E-03이 §926을 직접 판정하지는 않지만, "왜 이 사유들인가"의 답이 여기 있다. + +- **PASS/FAIL 반영**: 간접 ✕ — E-03이 §926을 판정하지 않는다. (d)(1) 사유 목록의 origin·목적 규범. + +- **ERC-3643 변환**: 직접 필드 없음. clearance 증서가 조사하는 사유 목록의 법적 근거. + +### 3.5 Rule 506(a) — 506 발행은 §4(a)(2) 거래로 의제된다 [ecfr.gov] + +- **조항**: 17 C.F.R. §230.506(a) — ecfr.gov (Title 17, 2026-07-16 기준 현행) + +- **핵심 원문**: Offers and sales of securities by an issuer that satisfy the conditions in paragraph (b) or (c) of this section shall be deemed to be transactions not involving any public offering within the meaning of section 4(a)(2) of the Act. + +- **한국어**: 본 조 (b) 또는 (c)의 조건을 충족하는 발행인의 증권 청약·판매는, 이 법 §4(a)(2)의 의미에서 어떠한 공개발행도 수반하지 아니하는 거래로 **의제된다(deemed)**. + +- **쉬운 설명**: 면제 성립의 규칙 좌표다. 발행이 (b) 또는 (c)의 조건을 다 채우면 §4(a)(2) 사모로 "의제"되어 §5 등록의무를 면한다. 핵심 단어는 "conditions in paragraph (b) or (c)"인데, 이 조건에는 (d) bad actor 무결이 포함된다 — (b)(1)·(c)(1)이 §230.501·§230.502를 걸고, (d)는 (b)·(c) 양쪽에 독립적으로 얹히는 별도 disqualifier다. 즉 covered person이 오염되면 "conditions"가 충족되지 않아 의제가 성립하지 않는다. E-03은 이 의제의 발행자 측 조건 하나를 지킨다. + +- **PASS/FAIL 반영**: 간접 ✕ — E-03이 (a)의 의제 성립 전체를 판정하지 않는다. 면제 성립의 규칙 프레임으로서, (d) 충족이 의제의 필요조건임을 확정한다. + +- **ERC-3643 변환**: 직접 필드 없음. clearance PASS가 "(d) 조건 충족"이라는 의제 요소 하나의 확인. + +### 3.6 Rule 506(d)(1) — covered person 집합 × 자격상실 사유: 판정 본체 [ecfr.gov] + +- **조항**: 17 C.F.R. §230.506(d)(1) — ecfr.gov (Title 17, 2026-07-16 기준 현행, 최종 개정 2026-06-25) + +- **핵심 원문 (covered person 집합)**: No exemption under this section shall be available for a sale of securities if the issuer; any predecessor of the issuer; any affiliated issuer; any director, executive officer, other officer participating in the offering, general partner or managing member of the issuer; any beneficial owner of 20% or more of the issuer's outstanding voting equity securities, calculated on the basis of voting power; any promoter connected with the issuer in any capacity at the time of such sale; any investment manager of an issuer that is a pooled investment fund; any person that has been or will be paid (directly or indirectly) remuneration for solicitation of purchasers in connection with such sale of securities; any general partner or managing member of any such investment manager or solicitor; or any director, executive officer or other officer participating in the offering of any such investment manager or solicitor or general partner or managing member of such investment manager or solicitor: + +- **핵심 원문 (자격상실 사유 (i)~(viii), 발췌·요지 유지)**: (i) Has been convicted, within ten years before such sale (or five years, in the case of issuers, their predecessors and affiliated issuers), of any felony or misdemeanor: (A) In connection with the purchase or sale of any security; (B) Involving the making of any false filing with the Commission; or (C) Arising out of the conduct of the business of an underwriter, broker, dealer, municipal securities dealer, investment adviser or paid solicitor of purchasers of securities; (ii) Is subject to any order, judgment or decree of any court of competent jurisdiction, entered within five years before such sale, that, at the time of such sale, restrains or enjoins such person from engaging or continuing to engage in any conduct or practice: [(A)~(C) 증권 매매·허위신고·금융중개업 영위 관련]; (iii) Is subject to a final order of a state securities commission [...]; an appropriate federal banking agency; the U.S. Commodity Futures Trading Commission; or the National Credit Union Administration that: (A) At the time of such sale, bars the person from [...]; or (B) Constitutes a final order based on a violation of any law or regulation that prohibits fraudulent, manipulative, or deceptive conduct entered within ten years before such sale; (iv) Is subject to an order of the Commission entered pursuant to section 15(b) or 15B(c) of the Securities Exchange Act of 1934 or section 203(e) or (f) of the Investment Advisers Act of 1940 that, at the time of such sale: (A) Suspends or revokes such person's registration [...]; (B) Places limitations on the activities [...]; or (C) Bars such person from being associated with any entity or from participating in the offering of any penny stock; (v) Is subject to any order of the Commission entered within five years before such sale that, at the time of such sale, orders the person to cease and desist from committing or causing a violation or future violation of: (A) Any scienter-based anti-fraud provision of the federal securities laws [...]; or (B) Section 5 of the Securities Act of 1933; (vi) Is suspended or expelled from membership in, or suspended or barred from association with a member of, a registered national securities exchange or a registered national or affiliated securities association for any act or omission to act constituting conduct inconsistent with just and equitable principles of trade; (vii) Has filed (as a registrant or issuer), or was or was named as an underwriter in, any registration statement or Regulation A offering statement filed with the Commission that, within five years before such sale, was the subject of a refusal order, stop order, or order suspending the Regulation A exemption, or is, at the time of such sale, the subject of an investigation or proceeding to determine whether a stop order or suspension order should be issued; or (viii) Is subject to a United States Postal Service false representation order entered within five years before such sale [...]. + +- **한국어 (covered person 집합)**: 본 조의 면제는, 다음 중 어느 하나가 아래 (i)~(viii)에 해당하면 증권의 매도에 대하여 이용될 수 없다 — 발행인; 발행인의 predecessor; affiliated issuer; 발행인의 이사·executive officer·발행에 참여하는 그 밖의 officer·general partner 또는 managing member; 의결권 기준으로 산정한 발행인의 outstanding voting equity securities의 20% 이상(20% or more) beneficial owner; 매도 시점에 어떤 자격으로든 발행인과 연결된 promoter; pooled investment fund인 발행인의 investment manager; 그 매도와 관련하여 매수인 모집의 대가로 (직·간접) 보수를 받았거나 받을 자; 그러한 investment manager·모집인의 general partner 또는 managing member; 또는 그러한 investment manager·모집인·general partner·managing member의 이사·executive officer·발행에 참여하는 그 밖의 officer. + +- **한국어 (사유 요지)**: (i) 매도 직전 10년(발행인·predecessor·affiliated issuer는 5년) 내에 증권 매매·Commission 허위신고·금융중개업 영위와 관련한 felony/misdemeanor 유죄판결; (ii) 매도 직전 5년 내에 발령되어 매도 시점에 증권 매매 등 특정 행위를 restrain·enjoin하는 법원 명령·판결·decree의 대상; (iii) 주 증권·은행·보험·신용조합 규제기관, 연방 은행감독기관, CFTC, NCUA의 final order로서 매도 시점에 특정 bar를 하거나 매도 직전 10년 내 발령된 사기금지법 위반 근거의 final order; (iv) Exchange Act §15(b)/15B(c) 또는 Advisers Act §203(e)/(f)에 따른 Commission 명령으로서 매도 시점에 등록 정지·취소, 활동 제한, 또는 association·penny stock 발행참여 bar; (v) 매도 직전 5년 내 발령되어 매도 시점에 scienter 기반 사기금지 조항 또는 Securities Act §5 위반의 cease-and-desist를 명하는 Commission 명령; (vi) 등록 national securities exchange·association에서의 회원 정지·제명 또는 회원과의 association 정지·bar(공정·형평 원칙에 반하는 행위); (vii) registrant/issuer로 제출했거나 underwriter로 지명된 registration statement·Reg A offering statement가 매도 직전 5년 내 refusal/stop order 대상이었거나 매도 시점에 그 발령 여부 조사·절차 중; (viii) 매도 직전 5년 내 발령된 미국 우편청 false representation order 등의 대상. + +- **쉬운 설명**: 이 조문이 판정 본체다. 두 축의 곱(集合 × 事由)으로 읽는다. **축 1 — covered person(누가 오염원이 될 수 있나)**: 발행인 자신부터, 이사·임원·발행 참여 officer·GP·managing member, **20% 이상 의결권 지분권자**, promoter, pooled fund의 investment manager와 그 임원들, 그리고 보수받는 모집인과 그 임원들까지. 매수인은 여기 없다 — 철저히 발행 명의 뒤의 인물 집단이다. **축 2 — disqualifying event(무엇이 오염인가)**: 8개 범주. 각 범주마다 look-back(예: 유죄는 비발행인 10년·발행인 5년; injunction·C&D·stop·우편사기는 5년; final order 사기근거는 10년)과 "at the time of such sale"(명령·bar는 매도 시점에 효력이 있어야 함) 요건이 다르다. E-03의 게이트는 이 8×N 조사를 직접 하지 않는다 — L2 검증기관이 factual inquiry로 수행해 "전부 clear"를 증서에 봉인하고, 게이트는 그 증서의 유효성만 읽는다. 다만 이 문언이 곧 발급 기준서의 조사 항목표이므로(§11.3), 문언을 정확히 옮기는 것이 이 부품 정확도의 뿌리다. **경계값 주의 — "20% or more"는 이상(≥)이지 초과(>)가 아니다.** 정확히 20%도 covered person이다(§5.3). + +- **PASS/FAIL 반영**: 직접 ○ (판정 본체, 증서 경유) — covered person 집합에 (i)~(viii) 사유가 하나라도 있고 사유가 2013-09-23 이후 발생 & 구제·항변 부재면 발행 자격상실. 게이트는 이 결론이 봉인된 clearance 증서의 "noDisqualifyingEvent = true"를 소비한다. + +- **ERC-3643 변환**: clearance claim data에 coveredPersonRosterHash(축 1의 봉인) + inquiryScope(축 2의 8범주 조사 커버리지) + noDisqualifyingEvent(bool) + waiverRefs(있으면). 게이트는 claim 존재·서명·범위·신선도·미취소만 검사(§3.16). + +### 3.7 Rule 506(d)(2) — 예외: pre-2013·waiver·발령기관 advice·reasonable care [ecfr.gov] + +- **조항**: 17 C.F.R. §230.506(d)(2) + Instruction to (d)(2)(iv) — ecfr.gov + +- **핵심 원문**: (2) Paragraph (d)(1) of this section shall not apply: (i) With respect to any conviction, order, judgment, decree, suspension, expulsion or bar that occurred or was issued before September 23, 2013; (ii) Upon a showing of good cause and without prejudice to any other action by the Commission, if the Commission determines that it is not necessary under the circumstances that an exemption be denied; (iii) If, before the relevant sale, the court or regulatory authority that entered the relevant order, judgment or decree advises in writing (whether contained in the relevant judgment, order or decree or separately to the Commission or its staff) that disqualification under paragraph (d)(1) of this section should not arise as a consequence of such order, judgment or decree; or (iv) If the issuer establishes that it did not know and, in the exercise of reasonable care, could not have known that a disqualification existed under paragraph (d)(1) of this section. *Instruction to paragraph (d)(2)(iv).* An issuer will not be able to establish that it has exercised reasonable care unless it has made, in light of the circumstances, factual inquiry into whether any disqualifications exist. The nature and scope of the factual inquiry will vary based on the facts and circumstances concerning, among other things, the issuer and the other offering participants. + +- **한국어**: (2) 본 조 (d)(1)은 다음에는 적용되지 아니한다: (i) 2013-09-23 이전에 발생하거나 발령된 유죄판결·명령·판결·decree·정지·제명·bar에 관하여; (ii) good cause의 소명이 있고 Commission의 다른 조치를 방해하지 않는 한, Commission이 해당 상황에서 면제를 부인할 필요가 없다고 판단하는 경우; (iii) 관련 매도 이전에, 관련 명령·판결·decree를 발령한 법원 또는 규제당국이 (그 판결·명령·decree에 포함되든 Commission·그 staff에 별도로든) (d)(1)의 자격상실이 그 명령·판결·decree의 결과로 발생하지 아니한다고 서면으로 advise하는 경우; 또는 (iv) 발행인이 (d)(1)의 자격상실이 존재함을 알지 못했고 reasonable care를 다하였음에도 알 수 없었음을 입증하는 경우. *(d)(2)(iv)에 대한 지시:* 발행인은, 상황에 비추어, 자격상실이 존재하는지에 대한 factual inquiry를 하지 아니하는 한 reasonable care를 다하였음을 입증할 수 없다. factual inquiry의 성격과 범위는 발행인·다른 발행 참여자 등에 관한 사실·정황에 따라 달라진다. + +- **쉬운 설명**: 자격상실의 네 출구다. **(i) 2013-09-23 이전 사건** — 자격상실이 적용되지 않는다(대신 (e) 공시로 감). 이것이 §1.3의 분기선이다. **(ii) good cause waiver** — SEC가 재량으로 면제를 부인할 필요 없다고 판단하면 자격상실이 풀린다(신청·심사 필요). **(iii) 발령기관 advice** — 명령을 낸 법원·규제기관이 "이 명령으로 506 자격상실이 생기지 않는다"고 서면으로 밝히면 풀린다. **(iv) reasonable care 항변** — 발행인이 몰랐고 **factual inquiry를 다했어도** 알 수 없었음을 입증하면 자격상실을 면한다. 지시문이 못을 박는다: factual inquiry 없이는 reasonable care가 성립하지 않는다. 이것이 E-03 아키텍처의 심장이다 — clearance 증서는 곧 "factual inquiry를 했다"의 온체인 증거이고, 발급 기준서(§11.3)의 조사 항목이 이 항변의 실질을 이룬다. 게이트는 (i)·(iii)·(iv)를 재판정하지 않는다: L2가 증서에 결론을 봉인하고((i) pre-2013은 (e) 갈래로, (ii)·(iii) waiver는 waiverRef로, (iv) 조사 이행은 inquiry 기록으로), 게이트는 그 봉인을 읽는다. + +- **PASS/FAIL 반영**: 직접 ○ (출구) — (i)은 (e) 갈래로 전환(자격상실 아님, 단 공시 게이트 활성); (ii)·(iii)은 waiverRef 존재로 해당 사유를 clear 처리; (iv)는 factual inquiry 이행이 증서 발급의 전제. 게이트 층에서는 이 출구들이 이미 증서 상태(noDisqualifyingEvent·waiverRefs·disclosure506eRequired)에 반영된 결과만 소비된다. + +- **ERC-3643 변환**: claim data.waiverRefs[](good cause·발령기관 advice) · claim data.disclosure506eRequired(pre-2013 사유 존재 시 true) · claim data.inquiryRecordHash(factual inquiry 이행 증거). 게이트는 disclosure506eRequired = true면 G6(공시 이행) 활성. + +### 3.8 Rule 506(d)(3) — affiliated issuer 시점 예외 [ecfr.gov] + +- **조항**: 17 C.F.R. §230.506(d)(3) — ecfr.gov + +- **핵심 원문**: (3) For purposes of paragraph (d)(1) of this section, events relating to any affiliated issuer that occurred before the affiliation arose will be not considered disqualifying if the affiliated entity is not: (i) In control of the issuer; or (ii) Under common control with the issuer by a third party that was in control of the affiliated entity at the time of such events. + +- **한국어**: (3) 본 조 (d)(1)의 목적상, affiliated issuer에 관련된 사건으로서 제휴(affiliation)가 성립하기 전에 발생한 것은, 그 affiliated entity가 다음에 해당하지 아니하면 자격상실 사유로 보지 아니한다: (i) 발행인을 control하고 있거나; 또는 (ii) 그 사건 당시 affiliated entity를 control하던 제3자에 의하여 발행인과 common control 하에 있는 경우. + +- **쉬운 설명**: affiliated issuer의 과거를 어디까지 소급하나의 경계다. affiliated issuer(공통·상하 지배 관계의 발행 참여 entity)에 자격상실 사유가 있어도, 그 사유가 **제휴 성립 전**에 생겼고 그 entity가 발행인을 지배하지도(control), 같은 제3자 지배 하에 있지도 않으면 자격상실로 치지 않는다. 즉 "나중에 제휴한 남의 과거"까지 발행인이 뒤집어쓰지는 않되, 지배관계로 얽힌 경우는 예외 없이 소급한다. E-03에서는 affiliated issuer가 roster에 있을 때 L2가 이 시점·control 판정을 수행하고(control 판정 자체는 A-06 산출 소비), 결과를 증서에 반영한다. + +- **PASS/FAIL 반영**: 조건부 — affiliated issuer 사건의 disqualifying 여부를 좁히는 예외. 게이트가 직접 판정하지 않고, 증서 발급 단계에서 반영된 결과(해당 사건이 noDisqualifyingEvent 산정에서 제외됐는지)를 소비. + +- **ERC-3643 변환**: roster entry에 affiliatedIssuerFlag + affiliationDate + controlStatus(A-06 산출). L2가 (3) 판정에 사용하며, 게이트는 최종 noDisqualifyingEvent만 읽는다. + +### 3.9 Rule 506(e) — pre-2013 사유의 서면 공시 의무 [ecfr.gov] + +- **조항**: 17 C.F.R. §230.506(e) + Instruction to (e) — ecfr.gov + +- **핵심 원문**: (e) Disclosure of prior "bad actor" events. The issuer shall furnish to each purchaser, a reasonable time prior to sale, a description in writing of any matters that would have triggered disqualification under paragraph (d)(1) of this section but occurred before September 23, 2013. The failure to furnish such information timely shall not prevent an issuer from relying on this section if the issuer establishes that it did not know and, in the exercise of reasonable care, could not have known of the existence of the undisclosed matter or matters. *Instruction to paragraph (e).* An issuer will not be able to establish that it has exercised reasonable care unless it has made, in light of the circumstances, factual inquiry into whether any disqualifications exist. + +- **한국어**: (e) 종전 "bad actor" 사건의 공시. 발행인은 각 매수인에게, 매도 상당기간 전에, (d)(1)의 자격상실을 유발했을 것이나 2013-09-23 이전에 발생한 사항에 관한 서면 설명을 제공하여야 한다. 그러한 정보를 적시에 제공하지 못한 것은, 발행인이 미공시 사항의 존재를 알지 못했고 reasonable care를 다하였음에도 알 수 없었음을 입증하는 경우, 발행인이 본 조에 의존하는 것을 방해하지 아니한다. *(e)에 대한 지시:* 발행인은, 상황에 비추어, 자격상실이 존재하는지에 대한 factual inquiry를 하지 아니하는 한 reasonable care를 다하였음을 입증할 수 없다. + +- **쉬운 설명**: 자격상실의 반대 갈래다. 사유가 2013-09-23 이전에 생겼으면 발행은 자격상실을 면하지만(§3.7 (d)(2)(i)), 공짜는 아니다 — 그 사유를 "자격상실을 유발했을 사항"으로 각 매수인에게 **매도 상당기간 전 서면**으로 알려야 한다. 이 공시는 waiver가 없다(면제·경감 불가). 다만 몰랐고 조사해도 알 수 없었으면 미공시가 발행 의존을 막지 않는다는 reasonable care 안전판이 여기에도 있다. E-03에서 이 갈래는 별도 게이트(G6)로 구현된다: 증서가 "pre-2013 disqualifying matters 존재(disclosure506eRequired = true)"를 표시하면, "각 매수인에게 서면 공시 이행(disclosureFurnished = true)"이 참이어야 발행이 통과한다. + +- **PASS/FAIL 반영**: 직접 ○ (공시 게이트) — disclosure506eRequired = true ⇒ disclosureFurnished = true 이어야 PASS. false면 FAIL_BADACTOR_506E_DISCLOSURE_MISSING. pre-2013 사유가 없으면 이 게이트는 비활성(자동 통과). + +- **ERC-3643 변환**: claim data.disclosure506eRequired(bool) · claim data.disclosureFurnished(bool) · claim data.disclosedMattersHash(공시 문서 해시). G6가 이 셋을 검사. (e) 공시는 buyer별 furnish이므로 발행 UX/기록 계층이 매수인 수령을 보증하고 증서가 그 이행을 확인. + + +### 3.10 Rule 501(f) — executive officer 정의 [ecfr.gov] + +- **조항**: 17 C.F.R. §230.501(f) — ecfr.gov + +- **핵심 원문**: Executive officer shall mean the president, any vice president in charge of a principal business unit, division or function (such as sales, administration or finance), any other officer who performs a policy making function, or any other person who performs similar policy making functions for the issuer. Executive officers of subsidiaries may be deemed executive officers of the issuer if they perform such policy making functions for the issuer. + +- **한국어**: executive officer란 president, 주요 사업단위·부문·기능(예: 영업·관리·재무)을 담당하는 vice president, policy making 기능을 수행하는 그 밖의 officer, 또는 발행인을 위하여 유사한 policy making 기능을 수행하는 그 밖의 자를 말한다. 자회사의 executive officer도 발행인을 위하여 그러한 policy making 기능을 수행하면 발행인의 executive officer로 볼 수 있다. + +- **쉬운 설명**: covered person 축의 "executive officer"가 누구까지인지의 문언이다. 직함이 아니라 **기능**(정책결정)이 기준이다 — president·핵심부문 담당 VP는 물론, 정책결정을 하는 그 밖의 임원, 심지어 발행인을 위해 정책결정 기능을 하는 자회사 임원까지 포섭된다. (d)(1)이 "executive officer"와 별도로 "other officer participating in the offering"을 열거하므로, executive officer는 발행 참여 여부와 무관하게 covered person이고(§3.12의 participating officer는 발행 참여가 조건), roster 구성 시 이 구분을 지켜야 한다. + +- **PASS/FAIL 반영**: 간접 ✕ — 정의 조항. roster 완전성 심사(V채널)와 발급 기준서의 covered person 식별 기준. + +- **ERC-3643 변환**: roster entry.role ∈ {EXECUTIVE_OFFICER, ...} 분류의 문언 근거. 게이트 미사용, L2·상장 심사용. + +### 3.11 Rule 501(g) — final order 정의 [ecfr.gov] + +- **조항**: 17 C.F.R. §230.501(g) — ecfr.gov + +- **핵심 원문**: Final order shall mean a written directive or declaratory statement issued by a federal or state agency described in § 230.506(d)(1)(iii) under applicable statutory authority that provides for notice and an opportunity for hearing, which constitutes a final disposition or action by that federal or state agency. + +- **한국어**: final order란 §230.506(d)(1)(iii)에 기술된 연방·주 기관이 통지 및 청문 기회를 규정한 해당 법적 권한 하에 발한 서면 지시 또는 declaratory statement로서, 그 연방·주 기관에 의한 final disposition 또는 조치를 구성하는 것을 말한다. + +- **쉬운 설명**: (d)(1)(iii) 사유의 핵심어 "final order"의 문언이다. 세 요소 — ① 서면, ② 통지·청문 기회가 법적으로 규정된 권한 하 발령, ③ final disposition. Compliance Guide가 보태는 실무 요점(§3.14): final order는 항소 가능해도 final일 수 있고(비항소성 불요), 청문이 실제 열릴 필요는 없으며(settlement도 "opportunity for hearing 이후"로 봄), 그 근거가 사기·조작·기만 금지 규정 위반이면 (iii)(B)의 10년 look-back에 걸린다. L2는 이 정의로 주 규제기관 명령이 자격상실 사유인지 판정한다. + +- **PASS/FAIL 반영**: 간접 ✕ — 정의 조항. (d)(1)(iii) 사유 조사의 문언 기준(clearance 발급 단계). + +- **ERC-3643 변환**: 게이트 미사용. inquiryScope의 (iii) 범주 조사 정의. + +### 3.12 Rule 405 — promoter·officer 정의 [ecfr.gov · sec.gov] + +- **조항**: 17 C.F.R. §230.405("promoter"·"officer" 정의) — ecfr.gov. 본 블록의 promoter 서술은 SEC Small Entity Compliance Guide(sec.gov)의 Rule 405 전재를, officer 정의는 Release 33-9414 n.31의 Rule 405 전재를 사용한다(두 인용 모두 1차 SEC 문서의 자체 전재). + +- **핵심 원문 (officer, Release 33-9414 n.31)**: Under Rule 405, the term "officer" is defined as "a president, vice president, secretary, treasurer or principal financial officer, comptroller or principal accounting officer, and any person routinely performing corresponding functions with respect to any organization." + +- **핵심 원문 (promoter, Compliance Guide 전재)**: Securities Act Rule 405 defines a promoter as any person—individual or legal entity—that either alone or with others, directly or indirectly takes initiative in founding the business or enterprise of the issuer, or, in connection with such founding or organization, directly or indirectly receives 10% or more of any class of issuer securities or 10% or more of the proceeds from the sale of any class of issuer securities (other than securities received solely as underwriting commissions or solely in exchange for property). + +- **한국어**: officer란 president, vice president, secretary, treasurer 또는 principal financial officer, comptroller 또는 principal accounting officer, 그리고 어떤 조직에 대하여 이에 상응하는 기능을 통상적으로 수행하는 모든 자를 말한다. promoter란 개인이든 법인이든, 단독 또는 타인과 함께 직·간접으로 발행인의 사업·기업 창설에 initiative를 취하거나, 그 창설·조직과 관련하여 직·간접으로 발행인 증권의 어느 class의 10% 이상 또는 그 판매대금의 10% 이상을 (인수수수료만으로 또는 재산 교환만으로 받은 것 제외) 받는 자를 말한다. + +- **쉬운 설명**: covered person 축의 두 경계를 문언으로 고정한다. **participating officer** — (d)(1)이 "other officer participating in the offering"이라 했으므로, 위 officer 정의에 해당하는 자 중 발행에 참여한 자가 covered person이다. Release 33-9414는 "발행 참여"가 transitory·incidental 관여를 넘어야 하며 due diligence·공시문서 준비·투자자 소통 같은 활동을 포함할 수 있다고 본다(§3.13). **promoter** — 범위가 넓다. 창설 이니셔티브를 취하거나 발행인 증권/대금의 10% 이상을 받은 자(개인·법인 불문)이고, "단독 또는 타인과, 직·간접" 기준이므로 중간에 다른 법인이 끼어도 결과가 바뀌지 않는다. 이 넓은 범위 때문에 roster 구성 시 promoter 식별이 흔한 누락 지점이다. + +- **PASS/FAIL 반영**: 간접 ✕ — 정의 조항. covered person roster의 participating officer·promoter 식별 기준(V채널·발급 기준서). + +- **ERC-3643 변환**: roster entry.role ∈ {PARTICIPATING_OFFICER, PROMOTER, ...} 분류 근거. promoter가 법인이면 A-08/A-09 look-through로 그 구성원 자격까지 조사(§9). 게이트 미사용. + +### 3.13 SEC Release No. 33-9414 (2013-07-24) — 채택 release의 해석 (Layer 3) [sec.gov] + +- **조항**: Release No. 33-9414, 78 FR 44730(2013-07-24), "Disqualification of Felons and Other 'Bad Actors' From Rule 506 Offerings" — sec.gov/federalregister.gov + +- **핵심 원문 (요지 인용)**: Section 926 requires us to adopt rules that disqualify securities offerings involving certain "felons and other 'bad actors'" from reliance on Rule 506 of Regulation D. The rules must be "substantially similar" to Rule 262 under the Securities Act [...] and must also cover matters enumerated in Section 926 of the Dodd-Frank Act (including certain state regulatory orders and bars). + +- **한국어**: §926은 특정 "felons and other 'bad actors'"가 관여한 증권 발행을 Rule 506 의존에서 자격상실시키는 규칙 채택을 요구한다. 그 규칙은 Rule 262와 "substantially similar"해야 하고, §926이 열거한 사항(특정 주 규제 명령·bar 포함)도 포섭해야 한다. + +- **쉬운 설명**: 이 채택 release가 문언 뒤의 해석을 메운다. E-03 설계에 직접 영향을 주는 네 해석. ① **reasonable care는 factual inquiry를 요구**하고 그 성격·범위는 발행인·참여자 사정에 따라 달라진다 — 정형 체크리스트가 아니라 상황 비례 조사. ② **20% beneficial owner는 단일 class가 아니라 total voting power 기준** — "voting securities"인지는 이사 선임·해임이나 인수·처분·자금조달 같은 중요 거래 승인 권한 같은 실질 지배·영향력 여부로 판단한다. ③ **participating officer의 "발행 참여"는 transitory·incidental을 넘는 관여** — due diligence·공시문서 준비·투자자 소통 등. ④ **look-back은 사건(유죄·명령) 발생 시점부터** 세지 밑에 깔린 행위 시점부터 세지 않는다. 이 넷이 발급 기준서(§11.3)의 조사 규범이 된다. + +- **PASS/FAIL 반영**: 간접 ✕ — 판정 불사용. reasonable care·voting power·participating officer·look-back 기산의 해석 좌표(증서 발급 규범). + +- **ERC-3643 변환**: 직접 필드 없음. inquiryScope·roster 구성·votingPowerBasis 산정의 해석 근거. + +### 3.14 SEC Small Entity Compliance Guide (2013-09-19) — 실무 적용 (Layer 3) [sec.gov] + +- **조항**: "Disqualification of Felons and Other 'Bad Actors' from Rule 506 Offerings and Related Disclosure Requirements — A Small Entity Compliance Guide"(2013-09-19, 최종 검토 2013-12-05) — sec.gov + +- **핵심 원문 (요지 인용)**: The look-back period is measured from the date of the disqualifying event [...] and not the date of the underlying conduct that led to the disqualifying event. [...] Disqualification only applies for injunctions and restraining orders that are in effect at the time of the proposed sale of securities and were entered within the preceding five years. [...] A bar is disqualifying only for as long as it has continuing effect. + +- **한국어**: look-back 기간은 자격상실 사건의 발생일부터 측정하며, 그 사건을 초래한 underlying conduct의 시점부터 측정하지 아니한다. [...] injunction·restraining order는 매도 제안 시점에 효력이 있고 직전 5년 내에 발령된 것에 한하여 자격상실이 적용된다. [...] bar는 계속적 효력이 있는 동안에만 자격상실 사유가 된다. + +- **쉬운 설명**: 문언의 실무 적용을 못 박는 SEC staff 해설이다. E-03 발급 규범에 직결되는 세 실무 규칙. ① **"in effect at the time of sale"** — injunction·bar·명령은 매도 시점에 **살아 있어야** 자격상실이다. 5년 내 발령됐어도 매도 전에 해제·소멸했으면 자격상실 아님(예: 4년 전 발령됐다가 발행 전 해제된 injunction). 반대로 bar가 계속 효력이면 5년 창과 무관하게 존속하는 동안 자격상실. ② **look-back은 사건 발생일 기산**(행위 시점 아님). ③ **공시 형식** — pre-2013 사유 공시는 투자자가 얻는 정보 전체(total mix)에서 적정 위치·비중(reasonable prominence)으로 제공. 또한 **전환 규칙**: 발행 도중 사유가 생기면 그 전 매도는 무영향, 이후 매도만 자격상실(reasonable care·waiver 가능) — 이것이 증서 신선도·취소(G4·G5)의 법적 근거다. + +- **PASS/FAIL 반영**: 간접 ✕ — 판정 불사용. in-effect·bar 존속·공시 prominence·mid-offering 전환의 실무 규범(증서 신선도·취소·공시 게이트 근거). + +- **ERC-3643 변환**: 직접 필드 없음. claim 신선도 주기(A-11)·revocation 트리거·disclosureFurnished 판정의 실무 근거. + +### 3.15 Sub-요건 분해 매트릭스 + +위 §3.1~§3.14의 원리를, E-03이 실제로 판정하는 원자적 검증 단위로 분해한다. 각 행은 §5.2의 판정 분기와 1:1 대응한다(채널 표기: V = 상장 시점 카드·증서 검사, G = per-tx 게이트, L2 = 발급기관 실사 평면, GOV = 거버넌스 평면). deemed-PASS 같은 우회 경로는 존재하지 않는다. + +| Sub-ID | 원자 검증 단위 | 근거 원리 | 채널 | PASS 조건 | FAIL 코드 | +| --- | --- | --- | --- | --- | --- | +| E03-V1 | roster 선언 존재 — coveredPersonRoster 비영 | §5 fail-closed(§3.1)·(d)(1) 집합(§3.6) | V | roster ≠ ∅ ∧ rosterHash 기재 | FAIL_BADACTOR_ROSTER_MISSING | +| E03-V2 | roster 완전성 심사 — (d)(1) 범주 커버 | (d)(1) covered person 열거(§3.6·§3.10·§3.12) | V | 발행인·predecessor·affiliated issuer·이사/EO/참여officer/GP/MM·20%↑ voting owner·promoter·pooled fund IM·모집인 각 범주 식별 완료 | REVIEW_BADACTOR_ROSTER_INCOMPLETE | +| E03-V3 | 증서 초기 유효 — clearance attestation 서명·범위 | Pattern B 위임(§3.7 (d)(2)(iv)) | V | clearance 존재 ∧ L2 서명 ∧ scope = offeringId | FAIL_BADACTOR_CLEARANCE_MISSING | +| E03-V4 | 공시 플래그 정합 — pre-2013 사유 ⇒ 506(e) | (d)(2)(i)(§3.7)·(e)(§3.9) | V | disclosure506eRequired ⇒ disclosedMattersHash 기재 | REVIEW_BADACTOR_506E_PENDING | +| E03-G1 | 증서 존재 — 발행 시 clearance 조회 | 결정론 방어층·fail-closed | G① | clearance(offeringId) ≠ null | FAIL_BADACTOR_CLEARANCE_MISSING | +| E03-G2 | 발급자 서명 — 인가 L2 Trusted Issuer | (d)(2)(iv) 조사 주체 신뢰(§3.7) | G② | issuerOf(clearance) ∈ TRUSTED_BADACTOR_ISSUERS ∧ 서명 유효 | FAIL_BADACTOR_ISSUER_UNTRUSTED | +| E03-G3 | 범위 정합 — offering scope 일치 | 증서 scope 규율 | G③ | clearance.offeringId = tx.offeringId | FAIL_BADACTOR_SCOPE_MISMATCH | +| E03-G4 | 신선도 — 미만료·재조사 주기 내 | mid-offering 사건(§3.14)·A-11 | G④ | now ≤ clearance.expiry (A-11 소관) | FAIL_BADACTOR_CLEARANCE_STALE | +| E03-G5 | 미취소 — revocation 부재 | mid-offering 취소(§3.14) | G⑤ | !revoked(clearance) | FAIL_BADACTOR_REVOKED | +| E03-G6 | 공시 이행 — pre-2013 사유 시 furnish | (e) 서면 공시(§3.9) | G⑥ | clearance.disclosure506eRequired ⇒ clearance.disclosureFurnished = true | FAIL_BADACTOR_506E_DISCLOSURE_MISSING | +| E03-L2a | 사유 조사 실질 — factual inquiry 이행 | (d)(2)(iv) 지시(§3.7)·33-9414(§3.13) | L2 | 8범주((i)~(viii)) look-back·in-effect 조사 완료·기록 | (게이트 밖 — 부실은 증서 취소·감사) | +| E03-L2b | 20% 산정 — total voting power | (d)(1) 문언(§3.6)·33-9414(§3.13) | L2 | votingPowerBasis 기준 ≥ 20% 지분권자 식별 | (게이트 밖 — roster 반영) | +| E03-GOV | 신뢰 발급자 집합 규율 | 조사 주체 신뢰 근거 | GOV | TRUSTED_BADACTOR_ISSUERS 변경은 다중서명·time-lock + 근거 등록 | (우회 시도는 B-01 버전 검사로 표면화) | + +**두 가지 판독 규칙.** ① 게이트(G①~G⑥)는 **증서의 유효성 층위**만 본다 — 자격상실 사유의 실질 판단(어느 사유·look-back·in-effect·waiver 성립)은 전부 증서에 봉인된 L2 결론이다. 게이트가 사유를 재판정하지 않는 것이 이 부품의 결정성의 원천이다(§5.5). ② **20% or more는 이상(≥)이다** — 정확히 20% voting power도 covered person이다. 이 경계를 초과(>)로 구현하면 정확히 20% 지분권자를 roster에서 누락하는 과소포섭 오류가 된다(§5.3, §7 T5). + +### 3.16 ERC-3643 변환·clearance 필드 총정리 + +§3.1~§3.14에 흩어진 변환을 한곳에 모은 것이다. E-03의 필드는 세 층으로 나뉜다 — 발행 카드 상수(ManifestCore의 발행 메타), 거버넌스 평면 상수(신뢰 발급자 집합), 그리고 사람이 아닌 **발행/offering 레벨 claim**(clearance attestation). E-03은 매수인 자격 게이트가 아니므로 buyer ONCHAINID의 claim.basis(QP_* 계열)를 쓰지 않는다 — 대신 발행 identity(또는 offering)에 결속된 clearance claim을 소비한다. + +| 층 | 필드 | 값·형식 | 근거 조문 | 소비·비고 | +| --- | --- | --- | --- | --- | +| 발행 카드 (ManifestCore) | facts.offeringId | bytes32 | 506(a)(§3.5) | G③ scope 앵커; 무결·변경 통제는 B-01 | +| 발행 카드 | facts.coveredPersonRosterHash | bytes32 (roster 봉인) | (d)(1) 집합(§3.6) | V1·V2; roster 원본은 오프체인, 해시만 온체인 | +| 발행 카드 | facts.regDTrack | {R506B, R506C} | 506(b)·(c)(§3.5) | (d)는 양 트랙 공통 — 분기 무관 | +| 거버넌스 상수 | TRUSTED_BADACTOR_ISSUERS | address set (L2 발급기관) | (d)(2)(iv) 조사 주체(§3.7) | G②; 확장은 발급기관 심사 후 다중서명·time-lock | +| offering claim | topic = BADACTOR_CLEARANCE | 아래 data 구조 | 506(d)·(e) 전체 | G①~G⑥의 소비 대상; 발급 L2 Trusted Issuer, 만료 A-11 | +| ┗ claim.data | coveredPersonRosterHash | bytes32 | (d)(1)(§3.6) | V1과 대조 | +| ┗ claim.data | inquiryScope | bitset(8범주 (i)~(viii)) | (d)(1)(§3.6)·33-9414(§3.13) | 조사 커버리지 — L2a | +| ┗ claim.data | inquiryRecordHash | bytes32 (factual inquiry 기록) | (d)(2)(iv) 지시(§3.7) | reasonable care 항변의 온체인 증거 | +| ┗ claim.data | noDisqualifyingEvent | bool | (d)(1)·(d)(3)(§3.6·§3.8) | 핵심 결론(post-2013 사유 부재·waiver 반영·제휴 예외 반영) | +| ┗ claim.data | waiverRefs | ref[] (good cause·발령기관 advice) | (d)(2)(ii)·(iii)(§3.7) | 개별 사유 clear 근거 | +| ┗ claim.data | disclosure506eRequired | bool | (d)(2)(i)·(e)(§3.7·§3.9) | true ⇒ G6 활성 | +| ┗ claim.data | disclosureFurnished · disclosedMattersHash | bool · bytes32 | (e)(§3.9) | G6 검사 대상 | +| ┗ claim.meta | inquiryDate · expiry · votingPowerBasis | date · date · enum | (e)·33-9414(§3.9·§3.13) | 신선도(A-11)·20% 산정 기준 | +| revocation | revoked(clearanceId) | bool | mid-offering 취소(§3.14) | G5; 발급기관·Operator 취소 | +| 이벤트 | E03Check | {offeringId, rosterHash, clearanceId, disclosure 결과, 발급자 서명 해시, 판정 시각} | 보존·재구성 규율 | 감독 검사 시 "그 발행이 어느 roster·어느 증서로 판정됐나"의 바이트 단위 재구성(§11) | +| 예약 필드 (미래) | rosterAttestationChain | ref[] (entity covered person 하위 attestation) | (d)(1)·A-08/A-09(§3.6·§3.12) | 법인 covered person의 look-through 증서 연결 — 현행 roster 해시로 포괄 | + + +## §4. ② 입력 사실 — 판정에 필요한 데이터 + +### 4.1 본 부품이 판정하려면 어떤 증거가 필요한가 + +E-03의 입력은 세 층에서 온다. ① **발행 카드 상수** — 이 발행의 식별자(offeringId)와 covered person roster의 봉인(coveredPersonRosterHash), 그리고 트랙(506(b)/506(c)). 전부 상장 시점에 봉인되고 정정 버전으로만 바뀐다(B-01 규율). ② **거버넌스 평면 상수** — bad-actor clearance를 발급할 자격이 있는 L2 Trusted Issuer 집합(TRUSTED_BADACTOR_ISSUERS). 자산이 아니라 신뢰 정책의 함수라서 카드 밖에 산다. ③ **clearance attestation(offering claim)** — L2 검증기관이 factual inquiry를 수행해 발급한, 이 발행의 발행자 측 무결 증서. noDisqualifyingEvent·waiverRefs·disclosure506e·inquiryScope·신선도·취소 상태를 담는다. E-03 스스로 만들어내는 사실은 없다 — 매수인도 보지 않고, 사유의 실질도 판정하지 않는다. 전부 L2·발행 카드가 확정한 값의 소비자이며, 그래서 판정이 순수 결정론으로 남는다. + +### 4.2 Data field — DEX가 실제로 읽는 항목 + +| 필드 | 층 | 형식 | 공급자 | 읽는 검사 | +| --- | --- | --- | --- | --- | +| facts.offeringId | 발행 카드 | bytes32 | 발행자 선언 + 상장 심사 | G③ scope 앵커 | +| facts.coveredPersonRosterHash | 발행 카드 | bytes32 | 발행자 선언 + L2 검증 | V1·V2·G(대조) | +| facts.regDTrack | 발행 카드 | enum {R506B, R506C} | 발행자 선언 | (d) 공통 — 분기 무관 | +| TRUSTED_BADACTOR_ISSUERS | 거버넌스 상수 | address set | Operator 거버넌스(§11) | G② | +| clearance claim: BADACTOR_CLEARANCE | offering claim | claim {rosterHash, inquiryScope, inquiryRecordHash, noDisqualifyingEvent, waiverRefs, disclosure506eRequired, disclosureFurnished, disclosedMattersHash, inquiryDate, expiry, votingPowerBasis} | Trusted Issuer (L2) | G①~G⑥ | +| revoked(clearanceId) | 배선 사실 | bool | 발급기관·Operator | G⑤ | +| now (block timestamp) | 체인 컨텍스트 | uint | Router | G④ 신선도 비교(A-11) | + +### 4.3 수집 경로 — 5단계 흐름 + +① **상장 신청** — 발행자가 카드에 offeringId와 covered person roster를 선언하고, roster 해시를 봉인한다. 선언은 법적 자기구속이다: "이 발행의 참여자는 이 집단이 전부이며 그 전력을 조사받겠다"는 발행자·counsel의 판단을 카드에 봉인하는 행위. ② **factual inquiry(L2)** — L2 검증기관이 roster 각 covered person에 대해 (d)(1) 8범주((i)~(viii))를 look-back·in-effect 기준으로 조사한다(질문서·배경조사·SEC/FINRA/주 규제 DB 대조·D&O 증명). entity covered person(법인 20% 지분권자·법인 모집인)은 A-08/A-09 look-through로 구성원까지 조사한다. ③ **clearance 발급** — 조사 결과가 "전부 clear"(또는 waiver/제휴 예외 반영, pre-2013 사유는 공시 처리)이면 L2가 BADACTOR_CLEARANCE claim을 offeringId scope로 발급한다. 조사 기록의 해시(inquiryRecordHash)가 claim에 실려 reasonable care 항변의 증거가 된다. ④ **상장 심사(V채널)** — Operator가 V1~V4를 돌린다: roster 비영·범주 완전성·증서 초기 유효·공시 플래그 정합. 통과분만 발효 버전이 된다. ⑤ **런타임·유지** — 발행(mint)이 들어오면 게이트가 G①~G⑥을 돈다. 증서는 A-11 주기로 재조사·갱신되고, 발행 도중 covered person에게 제재가 생기면 발급기관·Operator가 취소한다. + +### 4.4 조건별 필수 확인 항목 전체 표 + +아래는 예시가 아니라 각 판정 국면의 **필수 확인 항목 전체**다 — 공통 행 + 국면별 항목. + +| 국면 | 공통 확인 (모든 국면) | 국면별 필수 항목 | +| --- | --- | --- | +| 상장 심사 (V채널) | 카드 버전 유효(B-01 선행 PASS) · offeringId 기재 | ① roster 비영 ② (d)(1) 각 범주 식별 완료(발행인·predecessor·affiliated issuer·이사/EO/참여officer/GP/MM·20%↑ voting owner·promoter·pooled fund IM·모집인) ③ clearance 존재·L2 서명·scope 일치 ④ disclosure506eRequired면 disclosedMattersHash 기재 | +| 기본 게이트 (모든 발행 tx) | 상동 + clearance 조회 성공 | ① clearance 존재(G1) ② 발급자 ∈ TRUSTED_BADACTOR_ISSUERS·서명 유효(G2) ③ scope = offeringId(G3) ④ 미만료·신선(G4, A-11) ⑤ 미취소(G5) | +| 공시 갈래 (disclosure506eRequired = true) | 상동 | ① clearance.disclosureFurnished = true ② disclosedMattersHash 존재 ③ (기록) 각 매수인 서면 수령 로그 — 발행 UX/기록 계층 보증 | +| entity covered person (법인 20%↑·법인 모집인) | 상동 | ① A-08/A-09 look-through 완료(구성원 자격·control 체인 depth 3) ② affiliated issuer면 (d)(3) 시점·control 판정(A-06 산출 소비) ③ 하위 attestation이 rosterHash에 반영 | +| mid-offering 사건 | 상동 | ① 신선도 주기 내 재조사(A-11) ② 신규 사유 발견 시 즉시 revocation ③ 취소 후 매도는 G5 차단, 재발급 전까지 발행 중단 | + +## §5. ③ 판정 로직 — 어떻게 PASS/FAIL이 결정되는가 + +### 5.0 판정 흐름 플로우차트 + +아래 그림은 상장 채널의 V1~V4(roster·증서 검사)과 발행(mint) 채널의 G1~G6(증서 유효성 게이트)이 어떻게 이어지는지를 보여준다 — 증서 존재→서명→범위→신선도→취소→공시의 순차 게이트, 그리고 각 단계의 FAIL 코드. 상세 로직은 §5.2. + +![그림 5.0 — 판정 로직 흐름: 상장 채널 V1~V4와 발행 채널 G1~G6, 각 단계 FAIL 코드](fig50_e03.png) + +*그림 5.0 — 판정 로직 흐름: 상장 채널 V1~V4(roster·clearance)과 발행 채널 G1~G6(존재→서명→범위→신선도→취소→공시) + FAIL 코드 (개발자용)* + +### 5.1 전체 흐름 (사람 말로) + +판정은 두 채널이다. **상장 채널**에서는 발행이 발효되기 전에 선언과 증서를 검사한다 — roster가 비어 있지 않은가(V1), (d)(1)의 모든 covered person 범주가 식별됐는가(V2), clearance 증서가 존재하고 인가 발급기관이 이 발행에 서명했는가(V3), pre-2013 사유가 있으면 공시 문서가 준비됐는가(V4). **발행 채널**에서는 mint마다 여섯 걸음을 걷는다 — clearance 증서가 존재하는가(G1), 인가된 L2가 서명했는가(G2), 이 발행에 scope됐는가(G3), 신선한가(만료·재조사 주기, G4), 취소되지 않았는가(G5), pre-2013 사유가 있으면 공시가 이행됐는가(G6). 여섯 걸음 전부 조회·서명검증·존재·불리언 확인이라 재량이 끼어들 틈이 없고, 하나라도 걸리면 그 자리에서 사유 코드와 함께 선다. **게이트가 하지 않는 것**: 어느 covered person이 어느 사유에 걸리는지, look-back이 맞는지, waiver가 성립하는지 — 이 실질 판단은 전부 L2가 증서에 봉인한 결론이고, 게이트는 그 봉인의 유효성만 읽는다. + +### 5.2 Pseudocode + 단계별 해설 + +``` +// ── 상장 채널 (Listing-time V-checks) ────────────────────────── +function validateBadActorDeclaration(card): + if card.facts.coveredPersonRoster == ∅: return FAIL_BADACTOR_ROSTER_MISSING // V1 + if !allCategoriesIdentified(card.roster): queue(REVIEW_BADACTOR_ROSTER_INCOMPLETE) // V2 + c = clearanceOf(card.facts.offeringId) + if c == null ∨ !validSig(c): return FAIL_BADACTOR_CLEARANCE_MISSING // V3 + if c.disclosure506eRequired ∧ c.disclosedMattersHash == 0: + queue(REVIEW_BADACTOR_506E_PENDING) // V4 + return LISTING_OK + +// ── 발행 채널 (Per-mint G-checks) ────────────────────────────── +function checkE03(tx, card, gov): + // G① 증서 존재 — fail-closed (SLOAD) + c = clearanceOf(card.facts.offeringId) + if c == null: return FAIL_BADACTOR_CLEARANCE_MISSING + + // G② 발급자 서명 — 인가 L2 Trusted Issuer + if issuerOf(c) ∉ gov.TRUSTED_BADACTOR_ISSUERS ∨ !validSig(c): + return FAIL_BADACTOR_ISSUER_UNTRUSTED + + // G③ 범위 정합 — offering scope + if c.offeringId != tx.offeringId: return FAIL_BADACTOR_SCOPE_MISMATCH + + // G④ 신선도 — 미만료·재조사 주기 (A-11 소관 비교) + if now() > c.expiry: return FAIL_BADACTOR_CLEARANCE_STALE + + // G⑤ 미취소 — mid-offering revocation + if revoked(c.id): return FAIL_BADACTOR_REVOKED + + // G⑥ 공시 갈래 — pre-2013 사유 시 furnish + if c.disclosure506eRequired ∧ !c.disclosureFurnished: + return FAIL_BADACTOR_506E_DISCLOSURE_MISSING + + // (봉인된 결론 — 게이트는 재판정하지 않음) + // c.noDisqualifyingEvent 는 L2가 (d)(1)·(d)(3)·waiver를 반영해 산정한 값 + + emit E03Check(offeringId, rosterHash, c.id, c.disclosure506eRequired, govIssuerVersionHash) + return PASS +``` + +**단계별 해설.** G①은 상장 채널 V3를 발행 시점 스냅샷에서 재확인하는 방어층이다 — 증서 교체·정정 사이의 표류를 잡고, 비용은 SLOAD 한 번이라 사실상 공짜다. G②는 이 부품의 신뢰 근거다: 아무나 발급한 "clearance"가 아니라 인가된 L2 Trusted Issuer의 서명이어야 한다((d)(2)(iv) factual inquiry를 신뢰할 주체의 문제). G③은 증서가 다른 발행의 것으로 오용되는 것을 막는다. G④·G⑤가 이 부품 특유의 **시간 축**이다 — bad actor 사유는 발행 도중에도 생길 수 있으므로(§3.14 전환 규칙), 증서는 신선해야 하고(재조사 주기, A-11) 취소되지 않아야 한다. 이 두 게이트가 없으면 "발행 시작 시점에 clear였으니 영구히 통과"라는 구멍이 생긴다. G⑥은 pre-2013 사유 발행의 공시 이행을 강제한다((e)는 waiver가 없으므로 예외 없이). emit되는 이벤트에는 판정에 쓰인 발급자 집합의 버전 해시가 실린다 — "그 발행이 어느 신뢰 정책·어느 증서로 판정됐는가"를 사후에 재구성하기 위해서다(§11.5). **핵심 비판정 항목**: `noDisqualifyingEvent`는 게이트가 검사하는 불리언이 아니라 **L2가 산정해 증서에 봉인한 결론**이다 — 게이트는 그 결론의 그릇(증서)이 유효한지만 본다. 사유의 실질을 게이트가 다시 판정하려는 시도는 이 부품의 아키텍처 위반이다(§5.5). + +### 5.3 Threshold·방향 매트릭스 + +E-03의 게이트 층에는 크기 비교가 신선도(now ≤ expiry) 하나뿐이다 — 나머지는 존재·서명·집합소속·불리언이다. 다만 **증서에 봉인되는 L2 판단**에는 문언이 정한 경계값들이 있고, 이 경계를 발급 기준서가 정확히 적용해야 한다. 게이트 경계와 L2 경계를 나눠 고정한다. + +| 검사 | 층 | 문법 | 통과·판정 조건 | 자주 틀리는 지점 | +| --- | --- | --- | --- | --- | +| G1 증서 존재 | 게이트 | 비null | clearance ≠ null | "증서 미첨부 = 조사 불요"로 통과 — 결측은 fail-closed | +| G2 발급자 신뢰 | 게이트 | 집합 소속 | issuer ∈ TRUSTED_SET | 서명만 보고 발급자 인가 여부 무시 — 자칭 clearance 통과 | +| G4 신선도 | 게이트 | 크기(≤) | now ≤ expiry (초과면 STALE) | mid-offering 사건을 무시하고 무기한 증서 허용 — 재조사 주기 필수(A-11) | +| G6 공시 이행 | 게이트 | 함의 | disclosure506eRequired ⇒ disclosureFurnished | (e)에 waiver 있다고 오해 — (e) 공시는 waiver 불가 | +| 20% beneficial owner | L2 | **이상(≥)** | voting power ≥ 20% ⇒ covered person | **초과(>)로 구현해 정확히 20% 지분권자 누락** — 문언은 "20% or more"(§3.6) | +| 유죄 look-back | L2 | 크기(이내) | 비발행인 사건일 ≤ 10년 前 / 발행인·predecessor·affiliated issuer ≤ 5년 前 | 발행인/비발행인 창(5년/10년) 혼동; 행위 시점부터 기산(사건 시점 기산이 옳음, §3.14) | +| injunction·C&D·stop·우편사기 look-back | L2 | 크기(이내) | 사건일 ≤ 5년 前 **AND** 매도 시점 in effect | 5년 내이지만 해제된 명령을 자격상실로 오판(반대: in-effect 무시로 살아있는 명령 누락) | +| final order 사기근거 look-back | L2 | 크기(이내) | 발령 ≤ 10년 前 (또는 bar는 존속 중) | (iii)(A) bar(존속 중)와 (iii)(B) 사기근거(10년) 창 혼동 | +| 2013-09-23 분기 | L2 | 방향 | 사건 발생 ≥ 2013-09-23 ⇒ 자격상실 / < 2013-09-23 ⇒ 공시 | 행위 시점으로 분기(사건 발생 시점이 옳음, §3.7·§3.14) | + +**보수성 방향.** E-03은 오염된 발행을 차단하는 부품이므로, 경계에서의 보수(fail-safe) 방향은 **더 잘 막는 쪽**이다. 20% 경계는 이상(≥)으로 넓게, look-back 경계는 사건이 창 안이면 포함(이내), in-effect는 살아있으면 포함으로 잡는 것이 안전하다. 반대로 "정확히 20%는 아님", "해제된 명령", "행위가 오래됨" 같은 축소 추론은 발행을 오염된 채 통과시키는 위험 방향이다. + +### 5.4 roster·증서 식별의 결정성 — 게이트는 offeringId·clearance를 어떻게 아는가 + +offeringId는 발행 카드에 봉인된 상수이고, mint 거래는 어느 발행에 속하는지를 구조적으로 안다(발행 컨텍스트 = offeringId). clearance는 offeringId를 키로 조회되는 offering 레벨 claim이다 — 특정 매수인이 아니라 **발행 자체**에 결속되므로, 어느 매수인이 mint하든 같은 증서가 조회된다. 그래서 게이트 입력(offeringId·clearance·발급자·신선도·취소)은 위조 불가능한 결정론 산출값이고, "증서를 속여 게이트를 통과"하는 공격면이 없다 — 유일한 신뢰 이전점은 L2 발급기관인데, 그 인가는 G2(신뢰 집합)와 §11.3(발급 기준서)이 격리한다. roster 원본(개인정보 포함)은 오프체인에 두고 해시만 온체인에 봉인한다 — 개인정보 최소화 원칙과 정합하며, roster 변경은 정정 버전(B-01)으로만 일어난다. + +### 5.5 비결정성을 결정성으로 — 본 부품 구현의 본질 + +bad actor 판정의 원문은 비결정 판단으로 가득하다 — "policy making function"인가, "participating in the offering"인가, "final order"인가, "in effect"인가, "reasonable care"를 다했는가, "20% voting power"인가. E-03은 이 판단들을 세 자리로 밀어내고 게이트에는 증서 유효성 검사만 남긴다. ① **입법·사실 판단 → L2 clearance**: 어느 covered person이 어느 사유에 걸리는지, look-back·in-effect가 맞는지, waiver·제휴 예외가 성립하는지는 L2 검증기관의 factual inquiry가 판정하고, 그 결론(noDisqualifyingEvent·waiverRefs·disclosure506e)이 서명 claim에 봉인된다. ② **발행 판단 → 카드 선언**: 이 발행의 covered person이 누구인지는 발행자·counsel의 상장 시점 판단이고, roster 해시로 봉인된다. ③ **신뢰 정책 → 거버넌스 상수**: 누구의 factual inquiry를 신뢰할지는 TRUSTED_BADACTOR_ISSUERS로 봉인된다. 게이트에 남는 것은 "봉인된 증서가 존재·서명·범위·신선·미취소·공시이행 상태인가"뿐이다. E-03에 남는 유일한 비결정성은 봉인 자체의 진실성인데 — 증서는 §11.3의 발급 기준서·감사가, 선언은 상장 심사·발행자 보증·A-12가, 신뢰 집합은 §11.2의 변경 규율이 각각 격리한다. 이 격리가 유지되는 한 E-03은 reasonable belief도 사유 재판정도 없는 순수 기계 게이트로 남는다 — 단 하나의 예외(V2 roster 완전성 REVIEW)는 발행 차단이 아닌 상장 심사 항목이다. + +## §6. ④ 거절·예외 처리 — 검사에 실패하면 어떻게 되는가 + +### 6.1 전체 흐름 (사람 말로) + +E-03의 FAIL은 원인의 주소가 둘로 갈린다 — 이 구분이 처리 흐름을 가른다. **발행 설정·증서의 문제**(ROSTER_MISSING·CLEARANCE_MISSING·ISSUER_UNTRUSTED·SCOPE_MISMATCH)는 발행 쪽 사정이다: 개별 매수인이 고칠 수 있는 것이 아니므로 즉시 거절하고, 같은 발행 카드·증서를 딛는 그 발행의 모든 후속 mint가 같은 코드로 막히며, 해소는 증서 발급/정정 버전뿐이다. **시간 축의 문제**(CLEARANCE_STALE·REVOKED)는 증서가 있었으나 신선도가 다했거나 취소된 것이다: 발행을 재개하려면 L2의 재조사·재발급이 필요하다 — 발행 도중 covered person에게 제재가 생긴 경우가 대표 사례이고, 이때 발행은 재발급 전까지 중단되어야 한다((d)(1)이 "그 매도"에 걸리므로). **공시의 문제**(506E_DISCLOSURE_MISSING)는 pre-2013 사유 발행에서 서면 공시가 확인되지 않은 것이다: 공시 문서를 준비·제공하고 증서의 disclosureFurnished를 갱신하면 풀린다. 세 경우 모두 런타임에 사람이 "이번만 통과" 시킬 문은 없다 — 예외(waiver)는 증서 발급 단계에서 waiverRef로 반영되어 들어온다. + +### 6.2 Failure codes 6종 + REVIEW 2종 + +| 코드 | 관문 | 의미 | 해소 경로 | 기록 항목 | +| --- | --- | --- | --- | --- | +| FAIL_BADACTOR_ROSTER_MISSING | V1 | coveredPersonRoster 결측·∅ — 참여자 집단 미선언 | 정정 버전으로 roster 선언·봉인 | 카드 버전 | +| FAIL_BADACTOR_CLEARANCE_MISSING | V3/G① | clearance 증서 부재 — 조사 증서 없음 | L2 factual inquiry 후 증서 발급 | offeringId·조회 결과 | +| FAIL_BADACTOR_ISSUER_UNTRUSTED | G② | 발급자가 인가 L2 집합 밖 또는 서명 무효 | 인가 발급기관 재발급; 발급기관 인가 절차(§11.2) | 발급자 주소·서명 검증 결과 | +| FAIL_BADACTOR_SCOPE_MISMATCH | G③ | 증서 scope ≠ 이 발행 offeringId | 이 발행에 대한 증서 발급 | 증서 offeringId·tx offeringId | +| FAIL_BADACTOR_CLEARANCE_STALE | G④ | 증서 만료·재조사 주기 초과 | L2 재조사·증서 갱신(A-11) | 증서 expiry·현재 시각 | +| FAIL_BADACTOR_REVOKED | G⑤ | 증서 취소(mid-offering 신규 사유 등) | 신규 사유 해소·waiver 또는 재조사 후 재발급; 그 전까지 발행 중단 | 취소 사유·취소 시각 | +| FAIL_BADACTOR_506E_DISCLOSURE_MISSING | G⑥ | pre-2013 사유 발행인데 서면 공시 미이행 | 각 매수인 서면 공시 제공 후 disclosureFurnished 갱신 | disclosure506eRequired·disclosedMattersHash 상태 | +| REVIEW_BADACTOR_ROSTER_INCOMPLETE | V2 | (d)(1) 일부 범주 미식별(promoter·20% owner 등) | 상장 승인 보류 — roster 보강 후 재제출 | 미식별 범주 목록 | +| REVIEW_BADACTOR_506E_PENDING | V4 | pre-2013 사유 표시인데 공시 문서 미기재 | 공시 문서 준비·해시 등록 후 발효 | disclosure506eRequired·해시 부재 | + +### 6.3 Manual Review — 있는 곳과 없는 곳 + +발행 채널에는 manual review가 없다 — G①~⑥ 전부 결정론 FAIL이고 사람의 재량 통과가 불가능하다. 사람이 등장하는 자리는 셋뿐이며 모두 mint 경로 밖이다: ① **상장 REVIEW(V2·V4)** — roster 완전성·공시 문서 준비의 승인 보류 큐. 해소는 roster 보강·공시 준비이지 조건부 통과가 아니다. ② **거버넌스 발급자 변경 워크플로**(§11.2) — 신뢰 발급기관 집합 변경의 유일한 문. ③ **clearance 발급·재발급·취소**(§11.3) — factual inquiry·waiver 반영·mid-offering 취소가 이 절차를 경유한다. 셋 모두 심사·서명·기록을 남기며, 게이트는 그 결과값만 읽는다. waiver((d)(2)(ii)·(iii))는 SEC·발령기관 소관의 별도 트랙이고, 그 결과가 증서의 waiverRef로 반영되어야 게이트에 도달한다. + +### 6.4 Error message — 노출용 vs 내부 기록용 분리 + +원인의 주소가 둘이므로 노출 문구도 나눈다. **발행 설정·증서 계열**(ROSTER_MISSING·CLEARANCE_MISSING·ISSUER_UNTRUSTED·SCOPE_MISMATCH·CLEARANCE_STALE·REVOKED)은 개별 매수인이 취할 행동이 없고, 특히 REVOKED는 covered person의 제재 사실을 시사할 수 있어 대외 신호화가 민감하다. 그래서 한 문장으로 통일한다: "이 발행은 현재 발행 적격 확인 절차 점검 중으로 신규 발행이 일시 제한됩니다. (코드: E03-OFFERING)". 발행자·발급기관용 내부 통지에는 정확한 코드·사유를 전달한다. **공시 계열**(506E_DISCLOSURE_MISSING)도 매수인 노출은 최소화하되("발행 정보 제공 절차 완료 후 진행됩니다. 코드: E03-DISC"), 발행자에게는 "pre-2013 사유 공시 미이행"을 명시해 조치를 유도한다. 내부 기록용은 §6.2의 코드·기록 항목 전부에 카드 버전·증서 ID·발급자 집합 버전 해시를 붙여 남긴다 — 정정·재발급 워크플로, 감독 대응, reasonable care 항변 입증의 입력이 된다. + + +## §7. ⑤ 테스트 케이스 — 스펙이 제대로 작동하는지 검증 + +### 7.1 Test 1 — Pass (기본 통과: 유효 clearance) + +BUIDL-like 발행(offeringId = O1, roster 완전), L2 인가 발급기관 서명 clearance(noDisqualifyingEvent = true, disclosure506eRequired = false, 신선·미취소), 506(c) mint. 기대: G1 존재·G2 서명·G3 scope·G4 신선·G5 미취소 통과, G6 비활성(pre-2013 사유 없음) → **PASS** + E03Check emit. 확인 포인트: 게이트가 사유의 실질을 재판정하지 않고 증서의 noDisqualifyingEvent를 신뢰하는지 — 게이트가 covered person을 다시 조회하려 들면 아키텍처 위반이다. + +### 7.2 Test 2 — Fail (증서 부재) + +같은 발행, clearance 미발급(또는 조회 null), 임의 매수인 mint. 기대: G1에서 **FAIL_BADACTOR_CLEARANCE_MISSING** — G2 이하로 가지 않는다(선행 차단). 확인 포인트: 프런트가 clearance 없는 발행의 mint 버튼을 숨기더라도 컨트랙트 직접 호출 경로에서 이 FAIL이 동일하게 나야 한다(결측 = fail-closed, §5.3 G1행). + +### 7.3 Test 3 — Fail (자칭 clearance: 미인가 발급자) + +같은 발행, clearance 존재하나 발급자가 TRUSTED_BADACTOR_ISSUERS 밖(또는 서명 무효). 기대: G2에서 **FAIL_BADACTOR_ISSUER_UNTRUSTED**. 확인 포인트: 증서의 "존재"만 보고 발급자 인가 여부를 무시하면 아무나 만든 clearance가 통과한다 — factual inquiry를 신뢰할 주체((d)(2)(iv))의 문제이므로 발급자 집합 소속이 서명 검증과 함께 강제돼야 한다. + +### 7.4 Test 4 — Fail (mid-offering 취소: 발행 도중 제재) + +같은 발행, 발행 개시 시점에는 clear였으나 발행 도중 covered person(예: 이사)이 SEC cease-and-desist 대상이 되어 발급기관이 clearance를 취소. 취소 후 mint 시도. 기대: G1~G4 통과하더라도 G5에서 **FAIL_BADACTOR_REVOKED**. 확인 포인트: (d)(1)은 "그 매도(sale)"에 걸리므로 취소 후 매도는 자격상실이다(§3.14 전환 규칙) — "시작 시점에 clear였으니 계속 통과"라는 구현이 이 케이스를 놓치는 대표 오류다. 취소 전 이미 완료된 mint는 무영향이라는 점도 함께 확인(소급 없음). + +### 7.5 Test 5 — Boundary (정확히 20% voting owner) + +발행인 지분권자 중 total voting power 정확히 20.0%를 보유한 자 P가 있는 발행. 기대: roster에 P가 covered person으로 포함되고, L2가 P의 (i)~(viii)를 조사해 clearance에 반영 → (P가 clear면) PASS. 확인 포인트: 20% 경계가 **이상(≥)**으로 구현돼 정확히 20%인 P가 roster에 포함되는지 — 초과(>)로 구현하면 P가 누락되어 조사 대상에서 빠지는 과소포섭이 된다(§3.6·§5.3). voting power 산정이 단일 class가 아니라 total voting power 기준인지도 확인(§3.13). + +### 7.6 Test 6 — Pass (pre-2013 사유 + 공시 이행) + +covered person 중 1인이 2012년(2013-09-23 이전) 증권 관련 injunction을 받은 발행. clearance는 disclosure506eRequired = true, disclosedMattersHash 기재, disclosureFurnished = true. 기대: G1~G5 통과, G6에서 disclosure506eRequired ∧ disclosureFurnished = true → **PASS**. 확인 포인트: pre-2013 사유가 자격상실이 아니라 공시 갈래로 처리되는지((d)(2)(i)), 그리고 공시 이행이 게이트로 강제되는지((e)는 waiver 불가). 사건의 분기 기준이 injunction 발령 시점(2012)이지 밑에 깔린 행위 시점이 아님도 확인(§3.7·§3.14). + +### 7.7 Test 7 — Fail (pre-2013 사유 + 공시 미이행) + +T6과 동일하나 disclosureFurnished = false(또는 disclosedMattersHash 부재). 기대: G6에서 **FAIL_BADACTOR_506E_DISCLOSURE_MISSING**. 확인 포인트: (e) 공시는 (d)의 waiver와 달리 면제·경감이 없으므로, 공시 미이행이 waiverRef로 우회되지 않는지 — 공시 갈래는 별도 강제 게이트다. 상장 단계라면 V4의 REVIEW_BADACTOR_506E_PENDING으로 선행 포착됨도 확인. + +### 7.8 Test 8 — Cascade (entity covered person + affiliated issuer 시점 예외) + +발행인의 20% 이상 voting owner가 **법인** E이고, 별도로 affiliated issuer AF가 roster에 있으며 AF의 자격상실 사유가 제휴 성립 전에 발생한 케이스. 기대: (1) E에 대해 A-08/A-09 look-through로 E의 covered person(이사·EO 등)까지 조사가 소급되어 clearance에 반영; (2) AF 사건은 (d)(3) 판정 — AF가 발행인을 control하지 않고 공통 지배도 아니면 자격상실에서 제외, control이면 소급 — 이 판정은 A-06 산출(control 여부)을 소비해 L2가 수행. 기대 결과: 두 판정이 모두 clean이면 clearance.noDisqualifyingEvent = true → PASS. 확인 포인트: ① 법인 covered person의 look-through가 roster·clearance에 반영되는지(게이트는 rosterHash만 보지만 그 해시가 look-through 결과를 포함해야 함), ② (d)(3) 시점·control 예외가 A-06 산출에 정합하는지, ③ 이 실질 판단이 전부 L2 층에서 일어나고 게이트는 결론만 소비하는지. + +## §8. (α) 기계 판정형 패턴 — 참조 구현 + +### 8.1 패턴 판별 + +E-03은 **Pattern A(기계 판정형)** 부품이다. 게이트의 전 항목이 이미 확정된 값들의 결정론 연산 — 증서 존재, 서명 검증, 집합 소속, scope 일치, 신선도 크기 비교, 취소·불리언 — 이고, 게이트 안에서 새로 수집하거나 평가하는 사실이 없다. STATELESS다: 발행 간에 누적되는 카운터·창이 없고(그건 D-01·C-08의 문법), 같은 입력이면 언제나 같은 출력이다. pre-trade다: mint 이전에 revert로 서고, 사후 교정에 기대지 않는다. + +단 한 곳, clearance의 **내용**(noDisqualifyingEvent·waiverRefs·disclosure506e)은 **Pattern B(증명서형)의 국소 차용**이다 — A-03(AI 증명서)·A-13(QP 증명서)·B-04(MM claim)와 동일한 문법으로, 비결정 판단(어느 covered person이 어느 사유에 걸리는가, reasonable care를 다했는가)을 L2 검증기관의 off-chain factual inquiry로 밀어내고, 게이트는 서명된 claim의 존재·유효만 읽는다. 차용의 범위는 A-13보다 오히려 넓다 — A-13은 매수인 한 명의 자격을 증서화하지만, E-03의 증서는 발행 참여자 **집단 전체**의 무결을 증서화한다. 그만큼 발급 실사의 무게가 크고, 발급 기준서(§11.3)가 이 부품의 실질 방어선이다. + +### 8.2 패턴의 함의 + +Pattern A라는 사실에서 세 가지가 따라온다. ① **reasonable belief 부재** — E-03의 PASS는 "합리적으로 믿었다"가 아니라 "유효한 clearance가 존재한다"이다. 믿음·조사의 규율이 필요한 축(사유의 실질, reasonable care 이행)은 부품 밖(L2·발급 기준서)에 있고, 그쪽의 부실이 게이트 PASS로 세탁되지 않도록 경계를 문서화한다(§9·§10). 여기서 reasonable care의 법적 무게는 발행인에게 남는다 — clearance는 그 항변의 증거이지 면책이 아니다. ② **성능 특성** — per-tx 비용이 SLOAD 소수 + 서명 검증 1회 + 불리언·크기 비교다. Router의 cumulative AND 사슬에서 싼 축에 속한다. ③ **시간 민감성** — 대부분의 Pattern A 게이트와 달리 E-03에는 신선도·취소라는 시간 축이 있다(bad actor는 mid-offering 발생 가능, §3.14). 이는 STATELESS 게이트가 STATEFUL한 외부 사건(제재 발생)을 증서 신선도·취소로 흡수하는 구조이며, A-11(만료)·발급기관 취소가 그 상태를 관리한다. + +### 8.3 다른 부품과의 패턴 대비 + +| 비교 축 | E-03 (전과자 차단) | A-13 (QP 증명서) | E-01 (Form D) | A-11 (증명 신선도) | +| --- | --- | --- | --- | --- | +| 검사 대상 | 발행 참여자 집단(발행 측) | 매수인 1인(매수 측) | 발행 신고 여부(발행 측) | claim 만료(횡단) | +| 패턴 | A (넓은 B 차용 — 집단 증서) | B (개인 증서) | A (신고 사실) | A (시간 계산) | +| 상태 | STATELESS (증서 신선도·취소는 외부) | STATELESS | STATELESS | STATELESS | +| 판정 시점 | pre-trade(발행) | pre-trade | pre-trade(발행) | pre-trade | +| 비결정성의 자리 | L2 factual inquiry(8범주·reasonable care) | L2 QP 실사 | EDGAR 신고 사실(결정론에 가까움) | 만료 정책 | + +### 8.4 부착 좌표 — R1 ● / R2·R3·R4 — + +E-03은 R1(Reg D 506(c) 발행)에만 필수(●)로 부착되고, R2(재판매)·R3(ICA §3(c)(7))·R4(시장행위)에는 부착되지 않는다(—). 논리는 소관의 방향이다: bad actor disqualification은 **발행(offering·sale by issuer)** 국면의 발행자 측 적격 요건이다((d)(1) "sale of securities"의 문맥은 발행 면제). 2차 재판매(R2)는 매도인이 발행인이 아니라 보유자이고, 그 면제는 §4(a)(1)·§4(a)(7)·Rule 144 계열로 별도다 — 재판매 매도인의 bad actor 여부는 §4(a)(7)(d)(2)를 쓸 때 그 조문 자체의 요건(§77d(d)(5) — Rule 506(d)(1) 준용)이 잡으며, 이는 C-00/C-계열 재판매 경로의 소관이지 E-03이 아니다. R3(펀드)·R4(행위)도 발행 적격이 아닌 다른 축이다. 요컨대 E-03은 "발행이 적법하게 성립하는가"의 발행자 측 게이트이고, 발행 후 유통·행위는 다른 부품 가족이 맡는다. **혼동 방지**: 같은 인물(예: pooled fund IM 임원)이 발행 국면 covered person(E-03)이면서 재판매 국면 affiliate 매도인(A-06/R2)일 수 있으나, 두 검사는 다른 Recipe·다른 물음이다. + +## §9. (β) Coordination — 다른 부품과의 협응 + +### 9.1 협응 표 + +| 상대 | 방향 | 주고받는 것 | 경계 규칙 | +| --- | --- | --- | --- | +| E-01 (Form D) | 병렬 (R1 형제) | — | 둘 다 발행자 측·R1 부착. E-01은 Reg D notice 신고 사실, E-03은 발행자 측 인물 전력 — 소관 분리. 발행 성립은 둘 다 PASS해야 함(cumulative AND) | +| A-08 / A-09 (법인 자격·look-through) | A-08/A-09 → E-03 | entity covered person(법인 20%↑ owner·법인 모집인)의 구성원 자격·control 체인(depth 3) | 법인 covered person의 내부 구성원 조사는 A-08/A-09가 수행하고, 결과가 roster·clearance에 반영. E-03은 rosterHash 소비만 — look-through 재수행 금지 | +| A-06 (control 판정) | A-06 → E-03 | affiliated issuer의 control 여부 | (d)(3) 시점·control 예외 판정에 A-06 산출 소비. control 판정 자체는 A-06 소관, E-03은 (d)(3) 적용 결과를 clearance에 반영 | +| A-11 (claim 신선도) | A-11 → E-03 | clearance의 만료·재검증 주기 | 증서 만료 로직은 A-11의 보편 규율에 편승 — E-03이 자체 만료 로직을 갖지 않는다. mid-offering 사건 대응 주기가 A-11 cap의 근거 | +| A-12 (red flag) | 상호 | roster·clearance 부정 신호(허위 roster·발급기관 담합 등) | A-12의 부정 게이트가 발동하면 E-03 PASS에도 불구하고 발행·계정이 정지될 수 있다 — PASS는 red flag 부재를 보증하지 않는다 | +| B-01 (카드 무결) | B-01 → E-03 | 유효 카드 버전·offeringId·rosterHash 필드 무결 | B-01은 offeringId·rosterHash 필드의 존재·타입·버전 무결까지; **roster 비영·범주 완전성·증서 유효 검증은 E-03**. 발급자 집합 버전 해시 무결도 B-01 계열 규율에 편승 | +| A-03 / A-13 (매수인 자격) | 병렬 (반대 축) | — | 매수인 자격은 두 부품, 발행자 측은 E-03. 같은 발행에 발행 측(E-03)·매수 측(A-03/A-13)이 나란히 걸리지만 검사 대상이 반대 | +| A-01 / A-02 (KYC·제재) | 선행 | — | 모든 거래 공통의 최전방 게이트. E-03은 이들의 PASS를 전제로 뒤에 선다(Recipe union 순서). 단 covered person이 OFAC SDN이면 A-01과 별개로 clearance 발급이 불가한 사정 | +| Router / Factory (배선) | Router → E-03 | offeringId 컨텍스트·clearance registry 조회 | 산출 로직의 무결은 배선 층 감사 소관. E-03은 offeringId로 clearance를 조회하고 유효성만 검사 | +| C-00 (재판매 경로) | 경계 (비부착) | §4(a)(7) 경로의 (d)(5) bad actor 준용 | **경계의 핵심**: 재판매(R2)의 §4(a)(7)(d)(5)가 Rule 506(d)(1)을 준용하지만 이는 재판매 매도인·모집인에 대한 것으로 C-00/재판매 계열 소관. E-03(R1·발행)과 소관·Recipe가 다름 — 준용 조문이 같다고 부품을 합치지 않는다 | + +### 9.2 책임 경계 요약 + +한 문장씩으로 접으면 — 발행 참여자가 누구인지는 발행자 선언(+상장 심사)이, 법인 참여자의 구성원 자격은 A-08/A-09가, affiliated issuer의 control은 A-06가, 그 참여자 집단의 전력을 조사해 무결을 증서화하는 것은 L2 검증기관이, 그 증서가 유효·신선·미취소인지는 E-03이, 증서 만료 주기는 A-11이, Form D 신고는 E-01이 책임진다. E-03의 PASS는 "이 발행이 발행자 측 적격 확인(bad actor clear)의 유효한 증서를 갖췄다"는 보증이며, 그 증서 내용의 진실성(조사의 충실성)은 발급기관·발행인의 몫이다 — reasonable care의 법적 부담은 발행인에게 남고, clearance는 그 항변의 증거이지 면책이 아니다. 이 경계를 문서·이벤트·노출 문구에 일관되게 새기는 것이 협응의 전부다. + +## §10. (γ) 3-Layer 구조 — 판정·발급·운영의 분리 + +### 10.1 세 층의 배치 + +**L1 (온체인 게이트)** — §5.2의 두 채널. offeringId·rosterHash·거버넌스 발급자 집합·clearance 존재/서명/범위/신선도/취소를 읽어 결정론 판정하고, E03Check 이벤트를 남긴다. 재량 없음, 사유 재판정 없음. + +**L2 (Trusted Issuer — clearance 발급)** — 발행 참여자 집단의 무결이라는 비결정 판단을 담당한다. factual inquiry는 세 축이다: ① **roster 축** — (d)(1) 열거 범주(발행인·predecessor·affiliated issuer·이사/EO/참여officer/GP/MM·20%↑ voting owner·promoter·pooled fund IM·모집인)의 완전 식별. entity 구성원은 A-08/A-09 look-through로 소급. ② **사유 축** — 각 covered person에 대해 (i)~(viii) 8범주를, look-back(비발행인 10년/발행인 5년/injunction·C&D·stop·우편 5년/final order 사기근거 10년)과 in-effect·발생시점(2013-09-23 분기)·(d)(3) 제휴 예외 기준으로 조사(SEC/FINRA/주 규제 DB·D&O 증명·질문서). ③ **처리 축** — clear면 noDisqualifyingEvent, waiver 있으면 waiverRef, pre-2013 사유면 disclosure506e 처리. 발급물은 offering claim {rosterHash, inquiryScope, inquiryRecordHash, noDisqualifyingEvent, waiverRefs, disclosure506e*, meta}이고, 갱신·만료·취소는 A-11·mid-offering 규율에 편승한다. + +**L3 (Operator — 거버넌스·심사·기록)** — 상장 V채널 심사(§11.1), 신뢰 발급자 집합의 변경 규율(§11.2), clearance 발급 기준서의 유지(§11.3), 대시보드·보존·감독 대응(§11.4~11.5)을 맡는다. L3은 개별 mint에 개입하지 않는다 — 개입 지점은 전부 사전(집합·기준서·심사)이거나 사후(기록·정정·취소)다. + +### 10.2 책임 분배 표 + +| 실패 유형 | 1차 책임 | E-03 게이트의 위치 | 비고 | +| --- | --- | --- | --- | +| 게이트 로직 버그 (증서 검증 오류·20% 초과 구현 등) | L1 구현·감사 | 게이트 자신 — §7 회귀로 방지 | T5·T7이 대표 회귀 | +| clearance 부실 발급 (조사 누락·허위 clear) | L2 검증기관 | 게이트는 서명·존재만 읽으므로 통과 — 방어는 발급 기준서·감사·증서 취소 | reasonable care 부담은 발행인에게 남음 — 기준서·조사기록이 그 항변 자료 | +| 발급자 집합 오설정 (근거 없는 발급기관 추가) | L3 | 게이트는 집합을 따르므로 통과 — 방어는 §11.2 변경 규율·이력 | 이벤트의 발급자 버전 해시로 사후 특정 가능 | +| roster 선언 허위·누락 (covered person 은닉) | 발행자 (+ 상장 심사 + A-12) | V채널·V2가 1차 필터 | 발행자 보증·A-12 red flag와 연동; 은닉은 reasonable care 부정 | +| mid-offering 사건 미반영 (제재 발생 후 미취소) | L2·발급기관 (+ 모니터링) | 게이트는 취소 flag를 따름 — G5; 미취소면 통과되는 위험 | 재조사 주기(A-11)·모니터링이 방어 — OD-E03-2 | +| waiver 오적용 ((d)(2) 요건 미충족 clear) | L2·법무 | 게이트는 waiverRef를 신뢰 — 검증은 발급 단계 | SEC/발령기관 waiver의 진정성 검증 — OD-E03-4 | + +## §11. (δ) Operator 운영 절차 + +### 11.1 상장 심사 — V 채널 운영 + +상장 신청 접수 시 V1~V4를 자동/반자동 실행하고, 결과를 심사 기록에 남긴다. V1(roster 비영)·V3(증서 유효) FAIL은 반려. **V2 REVIEW**(roster 완전성)는 보류 큐로: (d)(1) 범주 중 미식별(특히 promoter·20% voting owner처럼 누락이 잦은 범주)이 있으면 발행자에게 보강을 요구한다. **V4 REVIEW**(506(e) 공시)는 pre-2013 사유 표시인데 공시 문서가 미기재이면 공시 준비·해시 등록을 요구한다. 어느 쪽이든 결정·근거를 심사 기록에 남기고, 보강이 등록되기 전에는 발효시키지 않는다. 심사 통과분만 발효 버전이 되며, roster·offeringId의 사후 변경은 전부 정정 버전 절차(B-01)를 탄다. + +### 11.2 신뢰 발급자 집합 변경 규율 + +TRUSTED_BADACTOR_ISSUERS(clearance 발급 자격 L2)의 변경은 방향에 따라 규율이 다르다. **확대(발급기관 추가)** — 다중서명 승인 + time-lock 경과 + **발급기관 적격 문서의 사전 등록**(그 기관이 (d)(1) factual inquiry를 수행할 역량·독립성·기록보존 체계를 갖췄는지: SEC/FINRA/주 규제 DB 접근·D&O 실사 프로세스·conflicts 관리 증빙)이 전부 갖춰져야 발효된다. **축소(발급기관 제거)** — 위험 축소 방향이므로 신속 경로를 허용하되, 발효 시점에 **잔존 증서 처리 규칙**을 함께 집행한다: 제거된 발급기관이 발급한 기존 clearance는 발효 블록부터 G2에서 차단(신규 mint 불가)이며, Operator는 해당 발행자에게 재발급 안내를 발송한다 — "발급 시점에 인가됐다"는 증서가 mint 시점 게이트를 통과하는 일이 없도록. 모든 변경은 버전 해시 이력으로 남고, 이벤트의 govIssuerVersionHash와 연결된다. + +### 11.3 clearance 발급 기준서 + +L2 검증기관이 따를 기준서를 Operator가 유지한다. 이 기준서가 E-03의 실질 방어선이다 — 게이트는 증서 유효성만 보므로, 조사의 충실성은 전적으로 여기에 달려 있다. 최소 구성: + +① **roster 구성** — (d)(1) 전 범주 식별 규범: 발행인·predecessor·affiliated issuer, 이사/executive officer(Rule 501(f) 정의)/발행 참여 officer(Rule 405 officer + 발행 참여 판정, Release 33-9414)/GP/managing member, **20% 이상 voting power(total voting power 기준, §3.13) beneficial owner**, promoter(Rule 405, 넓은 범위·간접 포함), pooled fund IM와 그 임원, 보수받는 모집인과 그 임원. 법인 covered person은 A-08/A-09 look-through 소급. + +② **사유 조사** — 각 covered person에 대해 (i)~(viii) 8범주 조사. 각 범주의 look-back(§3.6)·in-effect(§3.14)·발생시점 2013-09-23 분기(§3.7)·(d)(3) 제휴 예외(§3.8)를 적용. 조사 방법: SEC action·litigation release·FINRA BrokerCheck·주 증권/은행/보험 규제 DB·법원 기록·D&O 질문서·본인 진술서. look-back 기산은 사건 발생일(행위 시점 아님, §3.14). + +③ **reasonable care 문서화** — factual inquiry의 성격·범위를 상황에 비례해 정하고(§3.13), 조사 수행·근거를 inquiryRecordHash로 봉인. 이것이 (d)(2)(iv) 항변의 증거. + +④ **처리·유효기간** — clear면 noDisqualifyingEvent = true; waiver((d)(2)(ii)·(iii)) 있으면 waiverRef 첨부; pre-2013 사유면 disclosure506eRequired = true + 공시 문서. 유효기간·갱신은 A-11 주기 편승(mid-offering 사건 대응이 주기의 근거, OD-E03-2). + +⑤ **취소 사유** — covered person 신규 제재 발견·roster 변경·조사 부실 발견·발급기관 인가 말소. mid-offering 취소는 즉시 반영(G5). + +⑥ **기록** — 발급·갱신·취소의 근거 문서 보존. + +### 11.4 대시보드·지표 + +운영 대시보드에 최소 다음을 상시 표시한다 — FAIL 코드 분포(특히 CLEARANCE_STALE·REVOKED의 급증은 재조사 지연 또는 mid-offering 사건 신호), 발행별 clearance 신선도 잔여(만료 임박 발행 조기 경보), disclosure506eRequired 발행의 disclosureFurnished 커버리지(공시 갈래 발행의 이행률), V2·V4 REVIEW 큐 체류 건수·기간, ISSUER_UNTRUSTED 발생(0이 정상 — 1건이라도 발생 시 배포·집합 정합 점검). + +### 11.5 보존·export·신고 연동 + +E03Check 이벤트(offeringId·rosterHash·clearanceId·발급자 버전 해시 포함), 신뢰 발급자 집합 변경 이력, 상장 심사 기록, clearance 발급·갱신·취소 기록, inquiryRecordHash가 가리키는 오프체인 조사 원본을 보존 대상으로 묶는다 — 온체인 해시 + 오프체인 원본의 이중 구조로, 감독 검사 시 "특정 발행이 어느 roster·어느 증서·어느 조사로 판정되었는가"를 바이트 단위로 재구성·제출할 수 있어야 한다(reasonable care 항변 입증의 핵심 자료; 보존 연한은 플랫폼 공통 정책 — 6년 권고 — 에 편승). **E-01 연동**: Form D의 발행 정보와 E-03의 offeringId·roster가 정합해야 하며(같은 발행), 발행 개시 신고와 clearance 발급 시점의 정합을 기록한다. + +### 11.6 사고 대응 런북 (요지) + +REVOKED 급증 — mid-offering 사건 발생이 유력: 해당 발행의 신규 mint 즉시 정지 → covered person 제재 사실 확인 → waiver/해소 가능성 검토 → 재조사·재발급 또는 발행 종료 결정, 전 과정 기록. 취소 전 완료 물량은 소급 무영향이나 하류 유통 영향 평가(R2 연동). ISSUER_UNTRUSTED 발생 — 발급기관 인가 말소와 발급 이력의 순서 사고가 유력: 집합·발급 이력 대조 → 정합 회복 → 해당 발급기관 증서 딛는 발행 재발급 유도. clearance 부정 발급 인지 — 즉시 증서 취소 + 해당 증서로 통과한 mint 목록 추출(이벤트 조회) + 발행인 통지·법무 인계 + reasonable care 재평가. + +## §12. Open Issues — 미해결 쟁점 등록부 + +각 항목은 보수적 기본값으로 현행 스펙에 반영되어 있으며, 해소 시 §11.2의 규율로 집합·기준서에 반영한다. + +| ID | 쟁점 | 현행 보수 기본값 | 해소 경로 | 우선순위 | +| --- | --- | --- | --- | --- | +| OD-E03-1 | offering 레벨 clearance의 ERC-3643/T-REX 결속 표준 — issuer ONCHAINID claim vs Manifest 필드 vs 별도 offering registry 중 canonical binding | offeringId scope claim으로 모델링(rosterHash는 카드에) | T-REX ClaimTopicsRegistry·issuer identity 설계와 병행 확정 | P1 | +| OD-E03-2 | clearance 재조사 주기(A-11 cap) — bad actor는 mid-offering 발생 가능하므로 주기가 얼마여야 "in effect at time of sale"을 충분히 보증하나; 연속 발행(continuous offering)의 재조사 빈도 | A-11 보편 주기 편승 + 신규 사유 발견 시 즉시 취소(모니터링 병행) | 변호사 확인 + 연속발행 관행 조사 후 기준서 주기 확정 | P1 | +| OD-E03-3 | entity covered person look-through depth — 20% owner·모집인이 법인일 때 그 법인의 covered person을 어디까지 소급하나(재귀 depth); (d)(1)은 명시 depth 미제공 | A-08/A-09 depth 3 재사용 | A-08/A-09 depth 쟁점과 공동 확정; 필요 시 counsel 확인 | P2 | +| OD-E03-4 | waiver의 온체인 표현·검증 — SEC good cause waiver·발령기관 서면 advice((d)(2)(ii)·(iii))를 waiverRef로 담을 때 진정성 검증(위·변조 방지); SEC 발급 waiver의 온체인 확인 방법 | waiverRef를 L2가 원본 대조 후 첨부(게이트는 증서 신뢰) | SEC 발급물 검증 방식·발급기관 attestation 체계 확정 | P2 | +| OD-E03-5 | 506(e) 공시의 buyer별 furnish 보증 — "each purchaser, a reasonable time prior to sale"를 온체인이 어떻게 보증하나(mint 시점 각 매수인 수령 확인); "reasonable time"의 정량화 | disclosureFurnished 불리언 + 발행 UX/기록 계층이 수령 로그 보증 | 변호사 확인(reasonable time 기준) + 발행 UX 수령 증빙 설계 | P1 | +| OD-E03-6 | "at the time of such sale" 앵커 — mint의 어느 사건이 "sale"인가(주문 vs 온체인 mint tx vs 결제); look-back·in-effect·2013 분기 판정의 기준 시각 | 온체인 mint tx 시각을 잠정 앵커(가장 재구성 가능) | C-08·B-04의 앵커 쟁점과 같은 계열로 공동 확정 | P2 | +| OD-E03-7 | mid-offering 취소 후 이미 발행된 물량의 하류 처리 — 취소 전 sale은 소급 무영향이나, 취소 후 그 토큰의 재유통(R2)에서 발행 오염이 어떻게 취급되나 | 취소 후 신규 mint 중단; 기발행분은 무영향(소급 없음, §3.14) | R2·C-00과 공동으로 발행 오염의 유통 영향 정리 | P2 | + +## §13. 파일명·카테고리 + +본 문서의 정식 파일명은 **E-03_bad-actor.md** (쌍: 동명 .docx)이다. 카테고리 좌표: + +| 접두 | 카테고리 | 본 부품 | +| --- | --- | --- | +| A | 사람·자격 (identity·eligibility) | — (매수 측 자격은 A계열) | +| B | 자산·기술 메타 (asset·technical metadata) | — (offeringId·rosterHash 필드 무결은 B-01) | +| C | 거래·경로 (transaction·path) | — | +| D | 집계·한도 (aggregate·cap) | — | +| E | **신고·발행자 측 (filing·issuer-side)** | **E-03 — 발행 참여자 집단의 bad actor 무결 확인** | +| F | 행위·운영 (conduct·operations) | — | + +E 소속의 의미: 판정의 뿌리가 **발행자 측 사실**(발행 참여자 집단의 전력)이고, 매수인 축(A)은 보지 않는다. 같은 이유로 발행 신고(Form D)는 E-01, 발행 카드의 무결·버전은 B-01과 한 가족이다. E-03과 E-01은 R1(발행)에만 부착되는 발행자 측 형제 부품이다. + +## 부록 A — 조문·출처 빠른 참조 + +| 근거 | 정확한 좌표 | 출처 | +| --- | --- | --- | +| Securities Act §5 | 15 U.S.C. §77e(a)·(c) | uscode.house.gov | +| Securities Act §4(a)(2) | 15 U.S.C. §77d(a)(2) | uscode.house.gov | +| Securities Act §4(b) | 15 U.S.C. §77d(b) | uscode.house.gov | +| Securities Act §4(a)(7)·(d) (재판매 준용 — R2 소관) | 15 U.S.C. §77d(a)(7)·(d)(5) | uscode.house.gov | +| Dodd-Frank Act §926 | Pub. L. 111-203, title IX, §926, 124 Stat. 1851 (15 U.S.C. §77d note) | uscode.house.gov | +| Rule 506(a) | 17 C.F.R. §230.506(a) | ecfr.gov | +| Rule 506(d)(1)~(3) | 17 C.F.R. §230.506(d) | ecfr.gov | +| Rule 506(e) | 17 C.F.R. §230.506(e) | ecfr.gov | +| Rule 501(f) executive officer | 17 C.F.R. §230.501(f) | ecfr.gov | +| Rule 501(g) final order | 17 C.F.R. §230.501(g) | ecfr.gov | +| Rule 405 promoter·officer | 17 C.F.R. §230.405 (인용은 Compliance Guide·33-9414 n.31 전재) | ecfr.gov · sec.gov | +| Reg A Rule 262 (substantially similar 기준) | 17 C.F.R. §230.262 | ecfr.gov | +| Release 33-9414 | 78 FR 44730 (2013-07-24) — sec.gov/files/rules/final/2013/33-9414.pdf | sec.gov | +| Small Entity Compliance Guide | Disqualification of Felons and Other "Bad Actors" (2013-09-19) | sec.gov | + +**인용 현행성.** 모든 eCFR 인용은 Title 17 현행본(§230 계열: 2026-07-16 기준 표시, 최종 개정 2026-06-25)에서, 모든 제정법 인용은 uscode.house.gov 현행본(Title 15 §77d·§77e: 2026-06-05 시행 법률 기준)에서 2026-07-20에 접속·대조했다. Dodd-Frank §926은 uscode.house.gov가 §77d 아래 수록한 법령 주석(124 Stat. 1851)을 문자 대조했다. Release·Compliance Guide는 sec.gov 원문·게시본 기준이다. Cornell LII·Justia 등 2차 DB는 사용하지 않았다. + +## 부록 B — BUIDL-like 적용 노트 + +카드 스냅샷: offeringId = O(BUIDL) · regDTrack = R506C · coveredPersonRosterHash = H(roster). roster에는 발행인(펀드), investment manager(pooled fund IM)와 그 임원, 이사·EO, 20% 이상 voting owner(있으면), promoter(있으면), 보수받는 모집인(있으면)이 포함된다. clearance는 L2(실사 counsel·전환대리인)가 factual inquiry 후 발급하며 offeringId scope·A-11 주기·revocation 대상이다. + +| # | 시나리오 | 활성 게이트 | 결과 | +| --- | --- | --- | --- | +| 1 | 유효 clearance, 사유 없음, 506(c) mint | G1~G5 | PASS (T1) | +| 2 | clearance 미발급 | — | FAIL_BADACTOR_CLEARANCE_MISSING (T2) | +| 3 | 자칭 clearance(미인가 발급자) | G2 | FAIL_BADACTOR_ISSUER_UNTRUSTED (T3) | +| 4 | 발행 도중 이사 C&D → 증서 취소 후 mint | G5 | FAIL_BADACTOR_REVOKED (T4) | +| 5 | 정확히 20% voting owner P(clear) | roster/L2 | PASS — P 포함 조사(이상 경계) (T5) | +| 6 | pre-2013 injunction + 공시 이행 | G6 | PASS — 공시 갈래 (T6) | +| 7 | pre-2013 injunction + 공시 미이행 | G6 | FAIL_BADACTOR_506E_DISCLOSURE_MISSING (T7) | +| 8 | 법인 20% owner look-through + affiliated issuer 제휴 전 사건 | roster/L2 | PASS(둘 다 clean) — A-08/A-09·A-06 연동 (T8) | + +## 부록 C — 용어·경계 정정 노트 (구현자 대상 오해 교정) + +- **발행자 측 ≠ 매수인 측.** E-03은 발행 명의 뒤의 인물 집단을 본다 — 매수인 자격(A-03·A-13)과 반대 축이다. "누가 사는가"가 아니라 "발행 뒤에 누가 서 있는가"다. + +- **"20% or more"는 이상(≥)이다.** 정확히 20% voting power도 covered person이다 — 초과(>)로 구현하면 과소포섭(T5). 산정은 단일 class가 아니라 total voting power 기준(§3.13). + +- **look-back은 사건 발생일 기산이다.** 유죄·명령의 발생 시점부터 세지 밑에 깔린 행위 시점부터 세지 않는다(§3.14). 발행인/비발행인 유죄 창(5년/10년)도 혼동 금지. + +- **"in effect at the time of sale".** injunction·bar·명령은 매도 시점에 살아 있어야 자격상실이다 — 5년 내 발령됐어도 해제됐으면 자격상실 아님. 반대로 bar가 존속하면 창과 무관하게 자격상실(§3.14). + +- **2013-09-23 분기.** 사건이 이후면 자격상실(506(d)), 이전이면 공시(506(e)). 분기 기준은 사건 발생 시점이지 행위 시점이 아니다(§3.7). + +- **(e) 공시는 waiver가 없다.** (d)의 good cause waiver·발령기관 advice는 자격상실을 풀지만, (e)의 pre-2013 공시 의무는 면제·경감되지 않는다 — G6은 별도 강제 게이트(T7). + +- **reasonable care ≠ 면책.** clearance는 factual inquiry를 했다는 증거이지 발행인의 책임을 없애지 않는다. reasonable care 항변의 성패는 조사의 충실성에 달려 있고, 그 부담은 발행인에게 남는다((d)(2)(iv), §10.2). + +- **게이트는 사유를 재판정하지 않는다.** noDisqualifyingEvent는 게이트가 계산하는 값이 아니라 L2가 봉인한 결론이다 — 게이트가 covered person을 다시 조회하려 들면 아키텍처 위반이다(§5.5). + +- **mid-offering 사건은 취소로 흡수된다.** "발행 시작 시점에 clear였으니 계속 통과"는 (d)(1)의 "sale" 단위 문언에 반한다 — 신선도(G4)·취소(G5)가 시간 축을 잡는다(T4). 단 취소 전 완료 매도는 소급 무영향(§3.14). + +- **promoter는 넓다.** 창설 이니셔티브 또는 증권/대금 10% 이상 수령이면 promoter이고, "단독 또는 타인과, 직·간접" 기준이라 중간 법인이 끼어도 포섭된다(§3.12) — roster 누락 잦은 범주. + +- **E-03 ≠ E-01.** 둘 다 발행자 측·R1이지만, E-01은 Form D 신고 사실, E-03은 참여자 전력이다 — 소관 분리, 발행 성립은 둘 다 PASS. + +- **R2 준용을 부품 병합으로 오해 말 것.** §4(a)(7)(d)(5)가 Rule 506(d)(1)을 준용하지만 이는 재판매 매도인·모집인 대상이고 C-00/재판매 계열 소관 — E-03(발행)과 Recipe·물음이 다르다(§8.4·§9.1). + +## 부록 D — 결론 + +E-03은 "발행이 적법하려면 발행 뒤에 선 사람들이 깨끗해야 한다"는 명제를, 발행 카드 한 해시(roster)와 하나의 신뢰 발급자 집합, 그리고 여섯 걸음의 게이트로 접은 부품이다. 조문 대조의 결론은 명료했다 — Rule 506(d)의 자격상실은 매수인이 아니라 covered person 집단(발행인·임원·20% 이상 지분권자·promoter·모집인 등)에 걸리고, 그 판정은 8범주 사유를 look-back·in-effect·2013-09-23 분기 기준으로 조사하는 factual inquiry를 요구하며(이것이 reasonable care 항변의 실질), 그 조사는 온체인이 할 수 없는 비결정 판단이다. 그래서 이 부품은 조사를 L2 검증기관의 서명 증서로 밀어내고, 게이트에는 증서의 존재·서명·범위·신선도·취소·공시이행이라는 결정론 검사만 남긴다. 부품의 미덕은 그 경계를 정직하게 그은 데 있다 — 게이트는 사유를 재판정하지 않고(그것은 발급 기준서의 몫), 발행인의 reasonable care 부담이 clearance PASS로 세탁되지 않으며(면책 아닌 증거), bad actor가 발행 도중 나타날 수 있다는 시간 축을 신선도와 취소로 흡수한다. 판정은 기계에, 판단은 서명된 조사에, reasonable care의 부담은 발행인에게, 미해결은 등록부에 — 이 분리가 유지되는 한 E-03은 감독 검사 앞에서 "이 발행이 왜 적격으로 성립했는가"를 바이트 단위로 답할 수 있는 부품으로 남는다. + diff --git a/docs/compliance/elements/F-01.md b/docs/compliance/elements/F-01.md new file mode 100644 index 0000000..6418432 --- /dev/null +++ b/docs/compliance/elements/F-01.md @@ -0,0 +1,615 @@ +# ELE.F-01_operator-self-dealing + +# F-01 Operator Self-Dealing Restriction — 부품 심층 인수인계 문서 (Walkthrough) + +> 이 문서는 Decipher RWA DEX의 F-01 부품(운영자 자기거래 제한)을 A-13 v1 형식으로 정리한 심층 인수인계 자료다. F-01은 거래 당사자 중 어느 한쪽이라도 플랫폼 운영자 측(Decipher 법인·계열·임직원)이면 체결 직전에 그 거래를 막는 게이트다. 핵심 논지 하나 — F-01은 어떤 단일 조문의 직접 전사가 아니라, 운영자 자기거래가 성립시킬 반사기 책임의 사실적 전제 자체를 pre-trade에서 제거하는 예방적 게이트다. + +--- + +## §1. 규제 맥락 — 이 부품이 다루는 규제는 어디서 왔는가 (Context First) + +### 1.1 미국 증권법의 4개 기둥과 그중 반사기 축의 자리 + +미국 연방 증권규제는 네 기둥으로 서 있다 — Securities Act of 1933(발행·공시), Securities Exchange Act of 1934(유통시장·중개업자·시장조작 금지·반사기), Investment Company Act of 1940(펀드), Investment Advisers Act of 1940(투자자문). 앞선 부품들이 주로 1933법(발행 면제: A-03·E-01·E-03·F-04)과 1940법(펀드 자격: A-13·D-01)에 뿌리를 둔 데 반해, 본 부품은 1934법의 반사기·시장조작 축과 그 하위 규칙인 Regulation ATS에 뿌리를 둔다. + +이 축이 규율하는 것은 "누가 증권을 살 자격이 있는가"(자격)가 아니라 "시장을 운영하는 자가 그 시장에서 고객을 상대로 부정하게 거래하지 않을 것"이라는 유통시장 무결성이다. 발행이 적법하고(1933법) 매수인이 적격이고(1940법) 명부가 정합적이어도(B-01), 그 위에서 운영자가 고객의 미체결 주문을 보고 반대편에서 거래하면 별개의 위반이 성립한다. F-01은 바로 그 별개의 위반을 다룬다. + +### 1.2 왜 이 규제가 존재하는가 — 운영자의 정보우위와 다크풀 스캔들 + +거래장(venue)을 운영하는 자는 나머지 시장이 모르는 것을 본다 — 미체결 주문흐름(order flow)이다. 어떤 매수·매도가 얼마에 대기 중인지를 운영자만 안다. 이 정보로 운영자 자신이나 그 임직원·계열이 고객 반대편에서 거래하거나(자기거래) 고객 주문에 앞질러 거래하면(front-running), 이는 정보 비대칭을 악용한 기망적 행위다. 시장은 상대가 중립적 매칭 엔진이라 믿고 주문을 냈는데, 실제로는 그 정보를 가진 운영자가 상대편에 서 있었던 것이기 때문이다. + +이 우려는 추상적이지 않다. 1998년 SEC가 Regulation ATS를 채택하면서 ATS 운영자에게 두 가지를 명시적으로 요구한 이유가 이것이다 — subscriber의 기밀 주문정보에 접근할 수 있는 자를 "시스템을 운영하거나 컴플라이언스를 담당하는 직원"으로 한정할 것(Rule 301(b)(10)(i)(A)), 그리고 ATS 직원이 자기 계좌로 거래하는 것을 통제하는 기준을 둘 것(Rule 301(b)(10)(i)(B)). 이후 2010년대 미국의 여러 다크풀 집행 사건 — 운영자의 관계사 거래 데스크가 subscriber 반대편에서 거래하거나, 풀 안에 누가 있는지를 허위로 설명한 사례 — 은 이 우려가 현실임을 실증했다. + +### 1.3 두 개의 축 — 운영자 지위(BD/ATS)는 미결, 반사기는 지위와 무관 + +Decipher 운영자의 법적 지위는 아직 확정되지 않았다. 본 프로젝트의 BD/ATS 법률의견서(Question 1)는 다음과 같이 정리한다 — 가정상 Decipher의 스마트컨트랙트가 이전을 매칭·체결·결제하고 운영자가 거래당 수수료를 받으므로, 운영자는 "타인의 계산으로 거래를 성사(effecting transactions for the account of others)"시키는 broker에 해당할 소지가 크고, 나아가 ATS일 수 있다. 다만 이 지위는 미결이며 외부 전문 자문과 SEC Crypto Task Force 관여가 필요한 사항이다. + +F-01의 설계는 이 미결에 의존하지 않는다. 반사기 규정(§10(b)/Rule 10b-5, §17(a))은 "any person(모든 자)"에게 적용되므로 운영자가 broker로 등록됐든 아니든 무조건 걸린다. 지위가 broker/ATS로 확정되면 그때 Reg ATS Rule 301(b)(10)과 Exchange Act §15(c)(1)이 조건부로 추가되어 근거가 두꺼워질 뿐이다. 그래서 본 부품의 법적 뿌리는 두 겹이다 — 무조건적 1차 뿌리는 반사기, 조건부 보강은 Reg ATS·§15(c). F-01은 지위 확정 이전에도 이미 정당화된다. + +### 1.4 Decipher 시스템에서 왜 중요한가 + +반사기 책임은 발행 면제(506(c))나 펀드 면제(§3(c)(7))의 성립 여부와 독립적이다. 즉 R1·R2·R3의 모든 게이트를 통과한 완벽히 적법한 거래라도, 그 상대가 운영자였다면 반사기 위반이 성립할 수 있고, 이는 플랫폼 전체의 신뢰와 집행 리스크로 번진다. 운영자 자기거래는 "한 건"이 문제가 아니라 "운영자가 자기 시장에서 거래한다"는 사실 자체가 시장의 중립성 신뢰를 무너뜨린다. + +F-01은 그 사실적 전제를 체결 직전에 원천 제거한다. "운영자는 자기 시장에서 거래하지 않는다"를 사람의 준법의지가 아니라 코드로 강제한다. 이것이 A-01(제재)과 같은 계열의 하드 게이트인 이유이며, 동시에 본 부품이 R4(시장행위 감시)의 다른 부품들(F-02·F-03의 사후 감시 flag)과 성격이 다른 이유이기도 하다(§9.3). + +--- + +## §2. 메타 정보 (Internal Identifier Box) + +아래는 Decipher 내부 PM 규약상의 식별자·분류값을 한곳에 모은 박스다. 본문에서는 이 코드들을 단독으로 쓰지 않고 "본 부품"·"운영자 자기거래 제한 부품" 같은 자연어로 부른다. 코드는 시스템 추적용으로만 여기 둔다. + +| 항목 | 값 | 한 줄 풀이 | +| --- | --- | --- | +| 부품 이름 | Operator Self-Dealing Restriction | 운영자·계열·임직원의 자기 플랫폼 거래 차단기 | +| 검사 대상 | 거래 당사자(from/to) 중 어느 한쪽이라도 제한대상 집합에 속하는지 — Decipher 법인 + affiliate(Rule 405 control 기준) + 임원·이사·직원(associated person) + 이들이 지배하는 계좌 | "이 거래에 운영자 측이 끼어 있나" | +| Internal ID | F-01 (Decipher PM 규약) | 부품 일련번호 | +| 검증 방식 | 게이트형 — negative screen(온체인 제한대상 레지스트리 대조 후 strict block). 증명서형(Pattern B) 아님 | A-01 제재와 같은 계열; 서명 증명서가 아니라 명부 대조 | +| Timing | pre-trade(거래 체결 직전) | 거래가 일어나기 전에 막는다 | +| Stateful 여부 | STATELESS (Element 한정) | 거래는 제한대상 명부를 읽기만 한다. 명부 자체의 등록·갱신은 거래 외 운영 트랜잭션 경로로만 변한다(§8.4 개념은 A-04와 동일) | +| 주 활성화 Recipe | R4(시장행위 감시) | PM 규약상 소속 레시피 | +| Cumulative Recipe | R1·R2·R3 (실질상 모든 거래에 pre-trade 병렬 적용 권장 — 글로벌 게이트 성격, §9.3·§12) | 함께 켜지는 레시피 | +| Cascade Element | A-04(신원 확정)·A-06(affiliate 판정 로직 공유) | 본 부품이 결과를 소비하는 검사 부품 | +| 성숙도 | △ 미착수 → 본 문서로 착수 | 데모 대상, 본 walkthrough가 첫 산출물 | +| 파일·위치 | F-01_operator-self-dealing.md · 산출물/elements/ | 산출물 경로 | + +--- + +## §3. ① 법적 근거 (Layer 1 → 2 → 3) + +**읽는 법.** 법적 근거는 세 겹이다 — Layer 1(조문)은 의회가 만든 법률 텍스트(statute), Layer 2(규칙)는 SEC가 그것을 실무 수준으로 구체화한 연방규칙(rule), Layer 3(해석)은 SEC 발행문서·집행선이 취지를 메운 해석이다. 아래 §3.0.2 표의 종류 칸이 그대로 Layer에 대응한다 — Statute = Layer 1, SEC Rule = Layer 2, SEC Release·SEC Staff·Case = Layer 3. 본 절은 조문이 작동하는 논리 흐름 순서로 배열돼 §3.1~§3.12 번호를 유지하며, 각 항목이 어느 Layer인지는 표의 종류 칸으로 확인한다. + +본 부품의 §3은 A-13과 한 가지 근본에서 다르다. A-13은 하나의 자격 정의(§2(a)(51))를 중심으로 하위 규칙이 방사형으로 붙는 구조였다. F-01은 그렇지 않다 — 어떤 조문도 "운영자는 자기 시장에서 거래하지 마라"라고 직접 명령하지 않는다. 대신 운영자 자기거래가 위반이 되는 경로(반사기)와, 그 위반의 사실적 전제를 통제하도록 요구하는 경로(Reg ATS)가 여러 조문에 흩어져 있고, F-01은 그것들이 겨누는 위반을 pre-trade 게이트로 원천 봉쇄한다. 그래서 §3은 "F-01이 직접 판정하는 요건 목록"이 아니라 "F-01이 예방하는 위반의 근거 지도"다. + +### 3.0 법조문 관계 플로우차트 (개발자용) + +아래 그림은 운영자 자기거래라는 하나의 우려가 어떤 조문·규칙에 걸리는지, 그리고 F-01의 게이트가 그것을 어떻게 봉쇄하는지를 하나의 흐름으로 정리한 것이다 — 우려(주문흐름 MNPI 이용) → Layer 1 반사기 4조문(§10(b)·§17(a)·§9(a)(1)·§15(c) 조건부) → Layer 2 규칙(Rule 10b-5·10b-3·Reg ATS 301(b)(10) 조건부) → 제한대상 범위 정의(Rule 405) → 제한대상 집합 → F-01 예방적 게이트. 오른쪽 점선 박스는 ICA §17 오귀속 주의(negative finding). + +![법조문 관계 플로우차트](fig30.png) + +**범례.** + +- 파랑 = 무조건적 핵심(Direct: §10(b)·Rule 10b-5·§17(a)) + +- 노랑 = 조건부 최핵심(Reg ATS 301(b)(10) — ATS 해당 시 F-01의 직접 법정 대응물) + +- 점선 파랑 = 조건부(§15(c)·Rule 10b-3 — broker 해당 시) + +- 회색 점선 note = negative finding(ICA §17 부적용) + +### 3.0.1 실제 BUIDL은 어떻게 적용되나 + +§3.0이 일반 법조문 흐름이라면, 이 절은 BUIDL-like 토큰의 2차 거래에 F-01이 어떻게 걸리는지를 보여준다. (재확인) 본 서술은 실제 BlackRock BUIDL의 운영 조건을 단정하지 않는다 — BUIDL-like §3(c)(7) private fund interest를 ERC-3643 테스트 토큰으로 모델링한 것이다. + +Decipher가 BUIDL-like 토큰의 whitelist 참여자 간 2차 거래(RFQ/P2P)를 매칭·체결한다고 하자. 이때 F-01이 겨누는 시나리오는 이런 것들이다 — (a) Decipher 법인 자신이 자기 계정으로 그 토큰을 매수·매도하는 경우, (b) Decipher의 임직원이 미체결 주문을 보고 자기 계좌로 앞질러 거래하는 경우, (c) Decipher를 지배하거나 Decipher와 공통지배 관계에 있는 계열사(예: 같은 지주 아래 거래 데스크)가 subscriber 반대편에서 거래하는 경우. 세 경우 모두 운영자가 가진 주문흐름 정보우위를 전제로 하며, F-01은 거래 당사자 주소가 제한대상 명부에 있는지만 보고 이 세 경우를 동일하게 차단한다. + +중요한 것은 F-01이 BUIDL의 발행 적법성(506(c))이나 펀드 지위(§3(c)(7))를 건드리지 않는다는 점이다. F-01은 그 위층에서, "누가 이 시장을 운영하는가"와 "누가 이 거래의 당사자인가"가 겹치지 않도록만 강제한다. 그리고 뒤(§3.9)에서 보듯 이 강제의 근거는 ICA §17(펀드 관계자 자기거래)이 아니다 — BUIDL은 §3(c)(7)로 투자회사 정의에서 빠져 있어 ICA 실체규정이 닿지 않고, Decipher는 애초에 그 펀드의 관계자도 아니기 때문이다. + +### 3.0.2 조문 순서·중요성 한눈에 보기 (법 리스트) + +아래 두 표가 §3의 지도다. 표 1(Authority)은 각 근거가 어떤 종류(=Layer)이고 무슨 내용이며 F-01에 어떻게 닿는지를, 표 2(순서·중요성)는 §3.1~§3.12 소단원의 읽는 순서(논리 흐름)와 중요성(F-01이 실제로 그걸로 봉쇄하는가)을 보여준다. 순서는 중요도순이 아니라 흐름순이다. 제정법 출처는 uscode.house.gov·govinfo.gov로, 연방규칙은 ecfr.gov로 통일했다. + +**표 1 — Authority(근거 목록)** + +| 종류 | Authority | 내용 | F-01 관련성 | Direct/Supporting | Official URL | +| --- | --- | --- | --- | --- | --- | +| Statute | Exchange Act §10(b) · 15 U.S.C. 78j(b) | 증권 매매 관련 기망·조작 장치 금지(any person) | 운영자 자기거래·프론트런이 위반이 되는 근본 조문 | Direct | uscode.house.gov | +| SEC Rule | Rule 10b-5 · 17 CFR 240.10b-5 | §10(b) 실행규칙 — 사기 계획(a)·부실표시(b)·사기 행위(c) | 미공개 자기거래 = (a)·(c) 해당 | Direct | ecfr.gov | +| Statute | Securities Act §17(a) · 15 U.S.C. 77q(a) | 증권 청약·매도상 사기 금지 | 발행측·병행 근거; (a)(3) 광범위 | Direct | uscode.house.gov | +| SEC Rule | Reg ATS Rule 301(b)(1) · 17 CFR 242.301(b)(1) | ATS는 §15상 broker-dealer 등록 의무 | ATS 해당 시 Reg ATS 전 체계가 운영자에 결속 | Conditional | ecfr.gov | +| SEC Rule | Reg ATS Rule 301(b)(10) · 17 CFR 242.301(b)(10) | subscriber 주문정보 접근제한(i)(A)·임직원 자기계좌 거래 통제(i)(B) | ATS 해당 시 F-01의 직접 법정 대응물 | Conditional | ecfr.gov | +| Statute | Exchange Act §15(c)(1) · 15 U.S.C. 78o(c)(1) | broker-dealer의 기망·조작 장치 금지 | broker 해당 시 운영자에 직접 적용 | Conditional | uscode.house.gov | +| SEC Rule | Rule 10b-3 · 17 CFR 240.10b-3 | §15(c)(1) 실행규칙(BD 반사기) | broker 해당 시 §15(c)의 하위 규칙 | Conditional | ecfr.gov | +| SEC Rule | Rule 405 · 17 CFR 230.405 | affiliate·control 정의 | 제한대상 집합의 범위(누가 계열인가) 확정 | Supporting | ecfr.gov | +| Statute | Exchange Act §9(a)(1) · 15 U.S.C. 78i(a)(1) | wash sale·matched order 금지 | 운영자 자기거래가 만드는 가장매매 우려(F-02와 중첩) | Supporting | uscode.house.gov | +| Statute | ICA §17(a) · 15 U.S.C. 80a-17(a) | 등록 투자회사 관계자의 자기거래 금지 | 부적용 근거(negative finding) — F-01은 여기서 나오지 않음 | Background | uscode.house.gov | +| Statute | ICA §3(c)(7)·§2(a)(3) · 15 U.S.C. 80a-3(c)(7)·80a-2(a)(3) | 투자회사 정의 제외 · affiliated person 정의 | §17 부적용의 두 축(펀드 미등록·운영자 비관계자) | Background | uscode.house.gov | +| SEC Release | Reg ATS 채택 · 63 FR 70921 (Dec. 22, 1998) | 301(b)(10) 기밀·자기계좌 통제 취지 | Layer 3 해석(설계 취지) | Supporting | federalregister.gov | +| Case | 다크풀·ATS 운영자 자기거래 집행선(Pipeline 등) | 운영자 관계사의 subscriber 반대편 거래·주문정보 오용 제재 | 배경·리스크(구체 인용은 §12 외부자문) | Background | sec.gov | + +**표 2 — 조문 순서·중요성 한눈에 보기** + +| 순서 | 조문 | 중요성 | F-01이 그걸로 하는 일 | +| --- | --- | --- | --- | +| §3.1 | Exchange Act §10(b) — 반사기 근본 | 핵심 | 운영자 자기거래를 위반으로 성립시키는 근거 — 그 전제를 게이트로 제거 | +| §3.2 | Rule 10b-5 — §10(b) 실행 | 핵심 | (a)·(c)에 미공개 자기거래 포섭; 예방 대상 특정 | +| §3.3 | Securities Act §17(a) — 청약·매도 사기 | 핵심 | 발행측·병행 반사기; (a)(3) 폭넓은 사기 행위 | +| §3.4 | Reg ATS 301(b)(1) — BD 등록 | 조건부 | ATS 해당 시 Reg ATS 체계 결속의 관문 | +| §3.5 | Reg ATS 301(b)(10) — 기밀·자기계좌 통제 | 조건부(핵심) | ATS 해당 시 F-01이 이행하는 직접 법정 요구 | +| §3.6 | §15(c)(1) · Rule 10b-3 — BD 반사기 | 조건부 | broker 해당 시 운영자에 직접 적용 | +| §3.7 | Rule 405 — affiliate·control | 보조 | 제한대상 집합의 계열 범위 확정 | +| §3.8 | §9(a)(1) — wash/matched | 보조 | 운영자 자기거래발 가장매매 차단(F-02 연계) | +| §3.9 | ICA §17(a)·§3(c)(7)·§2(a)(3) — 부적용 | 배경 | F-01이 ICA §17에서 나오지 않음을 확정(negative finding) | +| §3.10 | Layer 3(채택 release·집행선) | 보조 | 안 함 — 설계 취지·리스크 해석 | +| §3.11 | Sub-요건 분해 매트릭스 | — | 위 근거를 원자적 검증 단위로 분해 | +| §3.12 | ERC-3643 변환 총정리 | — | §3.1~§3.9의 게이트 매핑을 한 표로 | + +**경계 — 이 부품이 다루지 않는 것.** 아래는 같은 거래에 작동하지만 F-01이 아니라 다른 부품·레이어가 책임진다 — 누락이 아니라 소관 분리다. + +- **사후 시장행위 패턴 탐지(wash trade·spoofing·layering의 실제 탐지)** — F-02 소관. F-01은 사전 당사자 차단만 한다. §9(a)(1)은 F-01에서는 "왜 운영자 자기거래를 막나"의 보조 근거로만 인용하고, 패턴 탐지 자체는 F-02가 STATEFUL하게 수행한다. + +- **의심거래 보고(SAR 유사)** — F-03 소관. 제한대상 위장·우회 시도가 탐지되면 F-03의 보고 신호가 된다(§9.2). + +- **매수인 자격·신원(누가 살 자격이 있나)** — A-03·A-13·A-04 소관. F-01은 당사자가 "운영자 측인가"만 보지 "적격인가"는 보지 않는다. + +- affiliate 판정 로직 자체는 — A-06 소관. F-01은 A-06이 산출한 계열 판정 결과를 제한대상 명부 구성에 소비할 뿐, 계열 여부의 실체 판정은 A-06이 한다(§9.2). + +### 3.1 Exchange Act §10(b) — 기망·조작 장치 금지 [출처: uscode.house.gov] + +**핵심 원문:** It shall be unlawful for any person, directly or indirectly, by the use of any means or instrumentality of interstate commerce or of the mails, or of any facility of any national securities exchange— ... (b) To use or employ, in connection with the purchase or sale of any security registered on a national securities exchange or any security not so registered, or any securities-based swap agreement any manipulative or deceptive device or contrivance in contravention of such rules and regulations as the Commission may prescribe as necessary or appropriate in the public interest or for the protection of investors. + +**한국어:** 모든 자(any person)가 직접 또는 간접으로, 주간통상 또는 우편의 수단·설비, 또는 전국증권거래소의 설비를 사용하여 다음을 행하는 것은 위법이다 — (b) 전국증권거래소에 등록된 증권이든 그렇게 등록되지 아니한 증권이든 그 매수 또는 매도와 관련하여(in connection with the purchase or sale), Commission이 공익 또는 투자자 보호를 위하여 필요·적절하다고 규정하는 규칙에 위반하여, 조작적 또는 기망적 장치나 술책(manipulative or deceptive device or contrivance)을 사용·이용하는 것. + +**쉬운 설명:** 미국 반사기 규제의 근본 조문이다. 세 가지가 F-01에 결정적이다. 첫째, 주체가 "any person"이라 운영자가 broker로 등록됐든 아니든 걸린다 — 지위 미결과 무관하다는 §1.3의 뿌리가 여기 있다. 둘째, 대상 증권이 "등록된 증권이든 그렇게 등록되지 아니한 증권이든"이라, BUIDL-like 비상장 펀드지분도 정면으로 포섭된다. 셋째, "매수 또는 매도와 관련하여"라는 연결고리 — 운영자가 미체결 주문정보를 이용해 반대편에서 거래하는 것은 바로 그 매매와 관련된 기망적 장치의 전형이다. 다만 §10(b) 자체는 "규칙에 위반하여"라는 위임 구조라, 실제 금지의 윤곽은 Rule 10b-5(§3.2)가 그린다. + +**PASS/FAIL 반영:** 직접 ○ — 운영자 자기거래를 위법으로 성립시키는 근본 근거. F-01은 이 위법의 사실적 전제(운영자가 당사자가 됨)를 pre-trade에서 제거해 위반 자체가 발생하지 않게 한다. 조문이 "제한대상이면 FAIL"이라고 명령하는 것이 아니라, F-01의 FAIL 규칙이 이 조문의 위반을 예방하는 관계다. + +**ERC-3643 변환:** 게이트 근거 — compliance module `RestrictedOperatorModule.canTransfer(from,to)`가 false를 반환(revert)하는 정당화 근거. claim이 아니라 module-level negative screen(A-01 sanctions와 동형). + +### 3.2 Rule 10b-5 — §10(b) 실행규칙 [출처: ecfr.gov] + +**핵심 원문:** It shall be unlawful for any person, directly or indirectly, by the use of any means or instrumentality of interstate commerce, or of the mails or of any facility of any national securities exchange, (a) To employ any device, scheme, or artifice to defraud, (b) To make any untrue statement of a material fact or to omit to state a material fact necessary in order to make the statements made, in the light of the circumstances under which they were made, not misleading, or (c) To engage in any act, practice, or course of business which operates or would operate as a fraud or deceit upon any person, in connection with the purchase or sale of any security. + +**한국어:** 모든 자가 직접 또는 간접으로 주간통상·우편·전국증권거래소 설비를 사용하여, 증권의 매수 또는 매도와 관련하여 다음을 행하는 것은 위법이다 — (a) 사기하기 위한 장치·계획·술책을 사용하는 것, (b) 중요한 사실에 관한 부실표시를 하거나, 표시된 내용이 그 정황에 비추어 오해를 일으키지 아니하도록 하기 위하여 필요한 중요한 사실의 진술을 누락하는 것, 또는 (c) 누구에 대하여든 사기 또는 기망으로 작용하거나 작용할 수 있는 행위·관행·업무과정에 관여하는 것. + +**쉬운 설명:** §10(b)의 추상적 금지를 세 갈래로 구체화한다. 운영자 자기거래는 이 중 (a)와 (c)에 걸린다. 운영자가 자신이 상대편이라는 사실을 숨긴 채 중립적 매칭인 것처럼 시장을 운영하며 고객 주문정보로 거래하면, 이는 "사기하기 위한 장치·계획"(a)이자 "누구에 대하여든 사기로 작용하는 업무과정"(c)이다. (b)의 부실표시가 없어도 — 즉 명시적 거짓말을 하지 않아도 — (a)·(c)의 기망적 행위·업무과정만으로 위반이 성립한다는 점이 핵심이다. 미공개 주문흐름을 이용한 거래는 미국 판례상 misappropriation(정보 유용) 이론으로 §10(b)/10b-5 위반이 될 수 있다. + +**PASS/FAIL 반영:** 직접 ○ — F-01이 예방하는 위반을 정확히 특정하는 규칙. (a)·(c)의 "미공개 자기거래·정보 유용"이 F-01 게이트의 봉쇄 표적이다. F-01의 FAIL(제한대상이 당사자)은 (a)·(c)의 성립 전제를 제거한다. + +**ERC-3643 변환:** 게이트 근거 — module reason 태그의 법적 서술로 `OP_SELF_DEALING_BLOCKED`가 겨누는 위반 유형(10b-5(a)·(c)). claim.basis가 아니라 negative screen 사유. + +### 3.3 Securities Act §17(a) — 증권 청약·매도상 사기 금지 [출처: uscode.house.gov] + +**핵심 원문:** It shall be unlawful for any person in the offer or sale of any securities (including security-based swaps) or any security-based swap agreement (as defined in section 78c(a)(78) of this title) by the use of any means or instruments of transportation or communication in interstate commerce or by use of the mails, directly or indirectly— (1) to employ any device, scheme, or artifice to defraud, or (2) to obtain money or property by means of any untrue statement of a material fact or any omission to state a material fact necessary in order to make the statements made, in light of the circumstances under which they were made, not misleading; or (3) to engage in any transaction, practice, or course of business which operates or would operate as a fraud or deceit upon the purchaser. + +**한국어:** 모든 자가 증권(security-based swap 포함) 또는 security-based swap agreement의 청약 또는 매도(in the offer or sale)에 있어, 주간통상의 운송·통신 수단이나 우편을 사용하여 직접 또는 간접으로 다음을 행하는 것은 위법이다 — (1) 사기하기 위한 장치·계획·술책을 사용하는 것, 또는 (2) 중요한 사실에 관한 부실표시 또는 그러한 표시가 오해를 일으키지 아니하도록 하기 위하여 필요한 중요한 사실의 누락을 수단으로 금전 또는 재산을 취득하는 것, 또는 (3) 매수인에 대하여 사기 또는 기망으로 작용하거나 작용할 수 있는 거래·관행·업무과정에 관여하는 것. + +**쉬운 설명:** 1933법의 반사기 조문으로, §10(b)/10b-5와 짝을 이룬다. 문언상 "청약 또는 매도(offer or sale)"에 걸려 발행측에 더 직접적이지만, (a)(3)의 "매수인에 대하여 사기로 작용하는 거래·관행·업무과정"은 매우 넓어 2차 시장의 운영자 행위에도 닿는다. 실제로 미국의 다크풀·거래장 운영자 자기거래 집행 사건들은 §17(a)(2)·(3)을 자주 근거로 삼았다 — 풀 안에 누가 있는지, 운영자가 거래하는지를 제대로 알리지 않은 채 시장을 운영한 것을 "매수인에 대한 사기적 업무과정"으로 본 것이다. 다만 2차 매매 그 자체는 §10(b)가 더 정면이고, §17(a)는 발행 연속선·병행 근거로 인용한다. + +**PASS/FAIL 반영:** 직접 ○(병행) — §10(b)/10b-5와 병행하는 반사기 근거. 발행(R1)과 2차(R2) 양쪽에서 운영자 자기거래를 위법으로 성립시키며, F-01은 그 전제를 제거한다. 단독 판정 근거라기보다 §10(b)와 함께 F-01의 예방 대상을 두껍게 하는 역할. + +**ERC-3643 변환:** 게이트 근거(병행) — §10(b)와 동일한 module 봉쇄를 정당화. 발행 배포 예외(§6.3 ①)의 경계를 판단할 때 "offer or sale" 문언이 참조된다. + +### 3.4 Reg ATS Rule 301(b)(1) — ATS의 broker-dealer 등록 의무 [출처: ecfr.gov] + +**핵심 원문:** *Broker-dealer registration.* The alternative trading system shall register as a broker-dealer under section 15 of the Act, (15 U.S.C. 78o). + +**한국어:** (broker-dealer 등록.) 대체거래시스템(ATS)은 Act 제15조(15 U.S.C. 78o)에 따라 broker-dealer로 등록하여야 한다. + +**쉬운 설명:** Reg ATS의 관문 조항이다. 어떤 플랫폼이 ATS에 해당하면 그것은 자동으로 §15상 broker-dealer 등록 의무를 지고, 그 결과 broker-dealer에 적용되는 반사기·기록·감독 체계(§15(c), Rule 17a-3/17a-4, 그리고 아래 301(b)(10))가 전부 함께 결속된다. Decipher가 ATS인지는 미결이지만(§1.3), 만약 ATS로 판정되면 이 조항을 통해 301(b)(10)의 자기계좌 거래 통제 의무가 발동한다. 주의할 것은 Reg ATS 301(a)의 면제 목록 중 (a)(4)(정부증권·repo·정부증권 옵션·CP만 취급하는 BD/은행)이 있으나, BUIDL-like 토큰은 정부증권이 아니라 펀드지분(증권)이므로 이 면제에 해당하지 않는다는 점이다. + +**PASS/FAIL 반영:** 조건부 — F-01 게이트가 직접 이 조문으로 PASS/FAIL을 내는 것은 아니다. 이 조문은 "Decipher = ATS"가 확정될 때 301(b)(10)(§3.5)을 발동시키는 스위치이며, 그때 F-01은 301(b)(10)(i)(B)의 이행 수단이 된다. + +**ERC-3643 변환:** 조건부 결속 — Manifest의 `venueStatus = ATS`(외부자문으로 확정 시) 플래그가 참일 때 F-01의 법적 근거에 301(b)(10)이 추가됨을 표시. 게이트 로직 자체는 불변. + +### 3.5 Reg ATS Rule 301(b)(10) — 주문정보 기밀·임직원 자기계좌 거래 통제 [출처: ecfr.gov] + +**핵심 원문:** *Written procedures to ensure the confidential treatment of trading information.* (i) The alternative trading system shall establish adequate written safeguards and written procedures to protect subscribers' confidential trading information. Such written safeguards and written procedures shall include: (A) Limiting access to the confidential trading information of subscribers to those employees of the alternative trading system who are operating the system or responsible for its compliance with these or any other applicable rules; (B) Implementing standards controlling employees of the alternative trading system trading for their own accounts; and (ii) The alternative trading system shall adopt and implement adequate written oversight procedures to ensure that the written safeguards and procedures established pursuant to paragraph (b)(10)(i) of this section are followed. + +**한국어:** (거래정보의 기밀 취급을 보장하기 위한 서면 절차.) (i) ATS는 subscriber의 기밀 거래정보를 보호하기 위한 적정한 서면 안전장치와 서면 절차를 수립하여야 한다. 그러한 서면 안전장치와 서면 절차는 다음을 포함하여야 한다 — (A) subscriber의 기밀 거래정보에 대한 접근을, 그 시스템을 운영하거나 이 규칙 또는 기타 적용 규칙의 준수를 담당하는 ATS 직원으로 한정할 것; (B) ATS 직원이 자기 계좌로 거래하는 것을 통제하는 기준을 시행할 것; 그리고 (ii) ATS는 (b)(10)(i)에 따라 수립된 서면 안전장치와 절차가 준수되도록 하기 위한 적정한 서면 감독 절차를 채택·시행하여야 한다. + +**쉬운 설명:** ATS 해당 시 F-01의 직접 법정 대응물이다. 이 조항이 겨누는 위험이 정확히 F-01의 표적과 같다 — (A)는 "주문흐름 정보를 아무나 보지 못하게 하라", (B)는 "그 정보에 접근하는 직원이 자기 계좌로 거래하는 것을 통제하라"이다. 전통적 ATS는 이 의무를 사내 정보장벽(information barrier)·거래 사전승인·감시 같은 서면 절차로 이행한다. Decipher의 F-01은 그 의무의 최강 형태를 코드로 이행한다 — "통제(controlling)"를 넘어 운영자·임직원·계열의 온체인 거래를 아예 전면 차단(canTransfer=false)함으로써, (B)가 요구하는 통제 기준을 사람의 재량 없이 결정론적으로 강제한다. 규칙이 요구하는 최소치는 "통제 기준을 둘 것"이고 F-01은 그보다 강한 "완전 차단"을 택한 셈이다. + +**PASS/FAIL 반영:** 조건부(핵심) — Decipher가 ATS면 이 조항이 F-01의 직접 근거가 되고, F-01의 FAIL(제한대상 당사자 차단)은 (i)(B)의 이행 그 자체다. ATS가 아니어도 F-01은 §10(b)/§17(a)로 이미 정당화되므로, 이 조항은 "있으면 F-01이 규칙 준수의 최강 이행이 되고, 없어도 F-01은 반사기 예방으로 유효"한 관계다. + +**ERC-3643 변환:** claim이 아닌 module 이행 — `RestrictedOperatorModule`가 (i)(B)의 "controlling employees trading for their own accounts"를 온체인으로 구현. off-chain 감독 절차((ii))는 §11 Operator Layer(명부 등록·감사)가 담당. + +### 3.6 Exchange Act §15(c)(1) · Rule 10b-3 — broker-dealer 반사기 [출처: uscode.house.gov · ecfr.gov] + +**핵심 원문 (§15(c)(1)(A)):** No broker or dealer shall make use of the mails or any means or instrumentality of interstate commerce to effect any transaction in, or to induce or attempt to induce the purchase or sale of, any security (other than commercial paper, bankers' acceptances, or commercial bills), or any security-based swap agreement by means of any manipulative, deceptive, or other fraudulent device or contrivance. + +**핵심 원문 (Rule 10b-3(a) 발췌):** It shall be unlawful for any broker or dealer ... to use or employ, in connection with the purchase or sale of any security otherwise than on a national securities exchange, any act, practice, or course of business defined by the Commission to be included within the term "manipulative, deceptive, or other fraudulent device or contrivance", as such term is used in section 15(c)(1) of the act. + +**한국어 (§15(c)(1)(A)):** 어떠한 broker 또는 dealer도, 우편이나 주간통상의 수단·설비를 사용하여, 증권(commercial paper·bankers' acceptances·commercial bills 제외) 또는 security-based swap agreement의 매매를 성사시키거나 그 매수·매도를 유인 또는 유인하려 시도함에 있어, 조작적·기망적 또는 그 밖의 사기적 장치나 술책(manipulative, deceptive, or other fraudulent device or contrivance)을 수단으로 하여서는 아니 된다. + +**쉬운 설명:** broker-dealer에 특화된 반사기 조문이다. §10(b)가 "any person"이라면 §15(c)(1)은 broker/dealer를 직접 겨눈다. 현행판(Dodd-Frank 이후)은 과거의 "전국증권거래소 회원으로서의 거래 외에서(otherwise than on a national securities exchange)"라는 한정이 (c)(1)(A)에서 삭제되어, broker/dealer의 사실상 모든 거래에 적용된다. BD/ATS 의견서의 결론대로 Decipher가 broker에 해당하면, 운영자의 자기거래는 §15(c)(1)에 정면으로 걸린다. Rule 10b-3은 그 실행규칙이다. 이 근거는 broker 지위가 확정될 때 §10(b)/10b-5 위에 한 겹 더 얹히는 관계다. + +**PASS/FAIL 반영:** 조건부 — Decipher가 broker면 운영자 자기거래에 직접 적용되어 F-01의 봉쇄 근거를 강화한다. broker가 아니어도 §10(b)로 이미 커버되므로, §15(c)는 지위 확정 시의 조건부 보강이다. + +**ERC-3643 변환:** 조건부 결속 — `venueStatus ∈ {BROKER, ATS}`일 때 F-01 근거에 §15(c)(1)·Rule 10b-3 추가. 게이트 로직 불변, 근거 두께만 증가. + +### 3.7 Rule 405 — affiliate·control 정의 (제한대상 범위) [출처: ecfr.gov] + +**핵심 원문 (Affiliate):** An affiliate of, or person affiliated with, a specified person, is a person that directly, or indirectly through one or more intermediaries, controls or is controlled by, or is under common control with, the person specified. + +**핵심 원문 (Control):** The term control (including the terms controlling, controlled by and under common control with) means the possession, direct or indirect, of the power to direct or cause the direction of the management and policies of a person, whether through the ownership of voting securities, by contract, or otherwise. + +**한국어 (Affiliate):** 특정인의 affiliate(또는 특정인과 affiliated된 자)란, 직접 또는 하나 이상의 매개체를 통하여 간접으로, 그 특정인을 지배하거나(controls), 그 특정인에 의하여 지배되거나(is controlled by), 그 특정인과 공통의 지배 아래 있는(is under common control with) 자를 말한다. + +**한국어 (Control):** control(controlling·controlled by·under common control with 포함)이란, 의결권 증권의 소유, 계약, 또는 그 밖의 방법을 통하든, 어떤 자의 경영과 정책의 방향을 지시하거나 지시하도록 할 수 있는 직접 또는 간접의 권한(power)의 보유를 말한다. + +**쉬운 설명:** F-01의 제한대상 집합에서 "계열(affiliate)"이 무엇인지를 확정하는 정의다. 제한대상은 세 층이다 — (1) Decipher 법인 자체, (2) Decipher의 affiliate(Rule 405 control 기준: Decipher를 지배하거나, Decipher에 지배되거나, Decipher와 공통지배 관계인 자 — 예: 같은 지주 아래 거래 데스크), (3) Decipher의 임원·이사·직원(그리고 이들이 지배하는 계좌). 핵심은 control이 지분율 같은 밝은 선(bright line)이 아니라 "경영·정책 방향을 지시할 권한"이라는 기능적 개념이라는 점이다 — 이는 A-06(내부자 판정)이 지분 문턱을 금지하고 기능적 control을 쓰는 것과 같은 규율이며, 그래서 F-01의 계열 판정은 A-06의 결과를 공유한다. 참고로 Exchange Act Rule 12b-2(17 CFR 240.12b-2)의 affiliate·control 정의도 실질적으로 동일하다. Decipher가 broker면, 임직원 층은 Exchange Act §3(a)(18)의 "associated person of a broker or dealer"(partner·officer·director·employee 및 control 관계자를 포함) 개념으로도 포착되어, 세 층을 하나의 법정 정의로 묶을 수 있다. + +**PASS/FAIL 반영:** 보조 — F-01 게이트의 봉쇄 조건 자체는 "당사자가 제한대상 명부에 있는가"이고, 이 조문은 그 명부에 누구를 올릴지(계열 범위)를 결정한다. 판정 규칙이 아니라 판정 대상 집합의 정의. + +**ERC-3643 변환:** 명부 구성 근거 — `restrictedOperatorSet`의 원소 태그를 정의: `OPERATOR_ENTITY`(Decipher 법인), `OPERATOR_AFFILIATE`(Rule 405 control), `OPERATOR_ASSOCIATED_PERSON`(임원·이사·직원, §3(a)(18)), `OPERATOR_CONTROLLED_ACCOUNT`(이들이 지배하는 계좌). control 판정 자체는 off-chain(A-06 공유), 결과만 온체인 명부에 반영. + +### 3.8 Exchange Act §9(a)(1) — wash sale·matched order 금지 [출처: uscode.house.gov] + +**핵심 원문:** It shall be unlawful for any person, directly or indirectly, by the use of the mails or any means or instrumentality of interstate commerce, or of any facility of any national securities exchange, or for any member of a national securities exchange— (1) For the purpose of creating a false or misleading appearance of active trading in any security other than a government security, or a false or misleading appearance with respect to the market for any such security, (A) to effect any transaction in such security which involves no change in the beneficial ownership thereof, or (B) to enter an order or orders for the purchase of such security with the knowledge that an order or orders of substantially the same size, at substantially the same time, and at substantially the same price, for the sale of any such security, has been or will be entered by or for the same or different parties, or (C) to enter any order or orders for the sale of any such security with the knowledge that an order or orders of substantially the same size, at substantially the same time, and at substantially the same price, for the purchase of such security, has been or will be entered by or for the same or different parties. + +**한국어:** 모든 자가 직접·간접으로 우편·주간통상 수단·전국증권거래소 설비를 사용하여, 또는 전국증권거래소 회원이 다음을 행하는 것은 위법이다 — (1) 정부증권이 아닌 어떤 증권의 활발한 거래에 관한 허위 또는 오해를 일으키는 외관, 또는 그 증권의 시장에 관한 허위·오해 외관을 만들 목적으로, (A) 그 증권에서 실질적 소유권의 변동을 수반하지 아니하는 거래를 성사시키거나, (B) 동일 또는 상이한 당사자에 의하여/위하여 실질적으로 같은 규모·같은 시점·같은 가격의 매도 주문이 이미 제출되었거나 제출될 것임을 알면서 그 증권의 매수 주문을 제출하거나, (C) 반대로 같은 조건의 매수 주문이 제출되었거나 제출될 것임을 알면서 매도 주문을 제출하는 것. + +**쉬운 설명:** 시세조작 금지 조문 중 wash sale(A: 실질 소유권 변동 없는 거래)과 matched order(B·C: 짜고 치는 대칭 주문)를 다룬다. 운영자 자기거래는 여기에도 닿는다 — 운영자가 자기 통제 계좌들 사이에서 거래하면 실질 소유권 변동 없는 가장매매가 되어 활발한 거래라는 허위 외관을 만들 수 있고, 이는 시장에 잘못된 신호를 준다. 다만 이 패턴의 실제 탐지는 F-02(시장행위 감시)의 STATEFUL 소관이다. F-01에서 §9(a)(1)은 "왜 운영자가 자기 시장에서 거래하면 안 되는가"의 보조 근거로만 인용한다 — 운영자 차단은 가장매매의 한 원천을 사전에 없앤다. 참고로 §9(g)는 "subsection (a)는 면제증권에 적용되지 않는다"고 하는데, BUIDL-like 토큰은 면제증권이 아니므로 §9(a)가 적용된다. + +**PASS/FAIL 반영:** 보조 — F-01의 봉쇄 대상(운영자 자기거래)이 만들 수 있는 부작용(가장매매)의 근거. 단독 판정 근거는 아니며, F-01↔F-02 연계(§9.2)의 법적 접점. + +**ERC-3643 변환:** 연계 근거 — F-01이 사전 차단한 운영자 거래가 만들 수 있는 wash/matched 패턴을 F-02가 사후 감시. F-01 게이트 통과분에 대해 F-02 flag 로직이 §9(a)(1)을 적용. + +### 3.9 ICA §17(a) · §3(c)(7) · §2(a)(3) — 부적용(Negative Finding) [출처: uscode.house.gov] + +**핵심 원문 (§17(a) chapeau·(1)·(2) 발췌):** It shall be unlawful for any affiliated person or promoter of or principal underwriter for a registered investment company (other than a company of the character described in section 80a-12(d)(3)(A) and (B) of this title), or any affiliated person of such a person, promoter, or principal underwriter, acting as principal— (1) knowingly to sell any security or other property to such registered company or to any company controlled by such registered company, unless such sale involves solely (A) securities of which the buyer is the issuer, (B) securities of which the seller is the issuer and which are part of a general offering to the holders of a class of its securities, or (C) securities deposited with the trustee of a unit investment trust or periodic payment plan by the depositor thereof; (2) knowingly to purchase from such registered company, or from any company controlled by such registered company, any security or other property (except securities of which the seller is the issuer)... + +**핵심 원문 (§3(c) chapeau):** Notwithstanding subsection (a), none of the following persons is an investment company within the meaning of this subchapter: ... (§3(c)(7)) + +**한국어 (§17(a)):** 등록 투자회사(registered investment company)의 affiliated person·발기인·principal underwriter, 또는 그러한 자의 affiliated person이 본인(principal)으로서 다음을 행하는 것은 위법이다 — (1) 알면서 그 등록회사(또는 그 지배회사)에 증권·재산을 매도하는 것(일정 예외 제외), (2) 알면서 그 등록회사(또는 그 지배회사)로부터 증권·재산을 매수하는 것(매도인이 발행자인 증권 제외) 등. + +**한국어 (§3(c) chapeau):** subsection (a)에도 불구하고, 다음의 자 중 누구도 이 subchapter의 의미상 투자회사(investment company)에 해당하지 아니한다 — (§3(c)(7): 발행증권을 전원 qualified purchaser가 취득하고 public offering을 하지 않는 회사). + +**쉬운 설명:** 이것이 본 부품의 잠금 결론(locked finding)이다. 자기거래를 다룬다고 하면 얼핏 ICA §17(등록 투자회사 관계자의 자기거래 금지)을 떠올리기 쉽다 — §17이야말로 미국 펀드법의 자기거래 금지 총본산이기 때문이다. 그러나 F-01은 §17에서 나오지 않는다. 두 겹의 이유가 있다. 첫째, §17(a)의 주어는 "registered investment company의 affiliated person"인데, BUIDL-like 펀드는 §3(c)(7)에 따라 애초에 "투자회사에 해당하지 아니한다(§3(c) chapeau)" — 즉 등록 투자회사가 아니므로 §17이라는 실체규정 자체가 닿지 않는다. 둘째, 설령 그 문턱을 논외로 해도, Decipher(거래장 운영자)는 §2(a)(3) 의미의 그 펀드 affiliated person이 아니다 — §2(a)(3)의 affiliated person은 투자자문사, 의결권 5% 이상 소유자, 펀드가 5% 이상 소유한 자, 펀드를 지배·피지배·공통지배하는 자 등인데, 2차 시장을 운영한다는 사실만으로는 이 중 어디에도 해당하지 않는다. 따라서 F-01의 법적 뿌리는 반사기(§10(b)/10b-5·§17(a) Securities Act)와 Reg ATS이지, ICA §17이 아니다. 이 구분을 흐리면 "펀드 관계자 자기거래" 프레임으로 오귀속되어, 근거 조문도 적용 요건도 어긋난다. + +**PASS/FAIL 반영:** 배경(부적용) — F-01은 이 조문으로 판정하지 않는다. 오히려 "이 조문이 F-01의 근거가 아님"을 확정하는 것이 본 절의 역할이다. 향후 세션·문서에서 F-01을 ICA §17로 재프레임하지 말 것. + +**ERC-3643 변환:** 해당 없음(근거 배제 표시) — F-01의 module reason·claim.basis 어디에도 ICA_17 태그를 쓰지 않는다. 펀드 지위(§3(c)(7))는 A-13/D-01 소관이며 F-01과 무관. + +### 3.10 Layer 3 — 채택 취지·집행선 (해석 자료) + +**Reg ATS 채택.** Regulation ATS는 63 FR 70921(1998-12-22)로 채택되었다(eCFR source note로 확인). 채택 취지문서(Rel. No. 34-40760)는 301(b)(10)의 기밀·자기계좌 통제 요건이 "ATS 운영자가 subscriber의 주문정보를 이용해 부당한 이익을 얻지 못하도록" 설계되었음을 밝힌다 — F-01의 예방 설계와 직접 맞닿는 취지다. + +**다크풀·거래장 운영자 집행선.** 2010년대 미국 SEC는 여러 다크풀·ATS 운영자에 대해, (a) 운영자의 관계 거래 데스크가 subscriber 반대편에서 거래한 점, (b) 풀 안에 누가 참여하는지·운영자가 거래하는지를 제대로 알리지 않은 점을 §17(a)·§10(b)/10b-5·Reg ATS 위반으로 제재해 왔다. 이 집행선은 F-01이 겨누는 위험이 이론이 아니라 실제 집행 대상임을 보여준다. 다만 개별 사건의 정확한 release 번호·인용은 본 문서에서 확정하지 않고 외부 전문 자문(§12)으로 넘긴다 — 1차 출처(sec.gov) 검증을 거친 pinpoint 인용만 최종본에 넣는다는 프로젝트 원칙 때문이다. + +**PASS/FAIL 반영:** 보조 — 판정에 쓰지 않는다. 설계 취지·리스크의 해석 자료. + +**ERC-3643 변환:** 해당 없음. + +### 3.11 Sub-요건 분해 매트릭스 + +위 근거들이 겨누는 하나의 금지("운영자 측은 자기 시장에서 거래하지 않는다")를 더 못 쪼개는 원자적 검증 단위로 분해하면 아래와 같다. 각 행은 §5.2 pseudocode의 분기와 1:1로 대응한다. F-01은 게이트형이므로 단위 대부분이 명부 대조(boolean)이며, 확률적·재량적 판단은 없다(그 판단은 off-chain A-06에서 끝나고 결과만 명부로 온다). + +| 검증단위 | 무엇을 보나 | 통과조건(다음 단계로) | 불통과시 | §5.2 분기 | +| --- | --- | --- | --- | --- | +| U1 당사자 존재 | from·to가 유효한 거래 주소·ONCHAINID로 해석되는가 | 둘 다 유효 | REVERT(무효 당사자, 상류 A-04 소관) | step 1 | +| U2 명부 로드 | restrictedOperatorSet 레지스트리를 읽을 수 있는가 | 로드 성공 | FAIL-SAFE(로드 실패 시 보수적으로 차단) | step 2 | +| U3 from 제한대상 | from의 ONCHAINID가 제한대상 명부에 있는가 | 없음 → U5로 | 있음 → U4(예외판정)로 | step 3 | +| U4 to 제한대상 | to의 ONCHAINID가 제한대상 명부에 있는가 | 없음이고 U3도 없음 → PASS | 있음 → U6(예외판정)로 | step 4 | +| U5 정상 통과 | U3·U4 모두 제한대상 아님 | — | — | step 5 → PASS | +| U6 예외 판정 | 제한대상이 낀 거래가 허용 예외인가 — ① 발행자 1차 배포(primary distribution) ② forcedTransfer/recovery(강제·회수) | 예외 성립 → PASS(예외) | 예외 아님 → FAIL | step 6 | + +**세 가지 경계 판단(개발자 필수 확정).** + +- **양쪽 다 제한대상인 경우.** from·to가 모두 운영자 측이면(예: 운영자 내부 이동) 예외(발행·강제이전)에 해당하지 않는 한 FAIL이다. F-01은 "한쪽만 제한대상"과 "양쪽 제한대상"을 구분하지 않고, 예외 경로가 아닌 한 모두 차단한다. + +- **발행자 1차 배포 예외의 범위.** Decipher 운영자가 발행자(issuer) 또는 그 transfer agent 역할까지 겸하는 구조인지에 따라 예외 경계가 달라진다. 최초 발행 배포(issuer → 최초 투자자)는 2차 시장 매칭이 아니므로 F-01의 자기거래 우려 밖일 수 있으나, 이 예외는 Manifest에 명시된 primary-distribution 경로에 한정하고 보수적으로 좁게 잡는다(§6.3 ①·§12). + +- **강제이전·회수 예외.** forcedTransfer/recovery(분실 지갑 복구·규제 명령 이행 등)는 운영자가 기술적 주체가 되지만 자발적 자기거래가 아니다. 이 경로는 별도 권한·기록으로 통제하며 F-01 차단에서 제외한다(§6.3 ②). + +### 3.12 ERC-3643 변환·명부 태그 총정리 + +F-01은 증명서형(claim)이 아니라 negative screen(module)이므로, A-13식 claim.basis 6종 체계를 쓰지 않는다. 대신 A-01(제재)과 동형으로 compliance module + 제한대상 레지스트리로 구현한다. 아래가 §3.1~§3.9의 근거를 ERC-3643/T-REX 필드로 옮긴 총정리다. + +| 근거(§3.X) | ERC-3643/T-REX 구현 | 구체 값·필드 | +| --- | --- | --- | +| §3.1 §10(b) / §3.2 10b-5 / §3.3 §17(a) | compliance module 게이트(무조건) | `RestrictedOperatorModule.canTransfer(from,to)` → false 시 revert | +| §3.5 Reg ATS 301(b)(10) (조건부) | 동 module이 (i)(B) "임직원 자기계좌 거래 통제"를 온체인 이행 | `venueStatus=ATS`일 때 근거 태그 추가; 로직 불변 | +| §3.6 §15(c)(1)·10b-3 (조건부) | 동 module 근거 강화 | `venueStatus∈{BROKER,ATS}`일 때 태그 추가 | +| §3.7 Rule 405 affiliate·control | 제한대상 명부 원소 태그 정의 | `restrictedOperatorSet` 원소: `OPERATOR_ENTITY`·`OPERATOR_AFFILIATE`·`OPERATOR_ASSOCIATED_PERSON`·`OPERATOR_CONTROLLED_ACCOUNT` | +| §3.8 §9(a)(1) wash/matched | F-02 연계 flag 근거 | F-01 통과분에 대한 F-02의 사후 패턴 감시 | +| §3.9 ICA §17 (부적용) | 태그 없음(배제 명시) | `ICA_17` 태그 사용 금지 | +| 신원 단위 | ONCHAINID 기준 판정 | 지갑이 아니라 사람(ONCHAINID) 단위; 다지갑 위장은 A-04가 차단 | +| 예외 | forcedTransfer/recovery·primary는 별도 경로 | `OP_EXEMPT_PRIMARY`·`OP_EXEMPT_INVOLUNTARY` reason으로 PASS | +| 감시 방식 | pre-trade STATELESS 게이트 | 거래는 명부 읽기만; 명부 쓰기는 운영 트랜잭션(§11) | + +**module vs claim 요약.** F-01은 매수인에게 "너는 적격이다"라는 긍정 claim을 요구하지 않는다. 대신 "너는 운영자 측이 아니다"를 명부 대조로 확인하는 부정 스크린이다. 그래서 Trusted Issuer의 서명 증명서(A-13·A-03의 패턴 B)가 아니라, Decipher 거버넌스가 관리하는 제한대상 레지스트리와 그것을 읽는 compliance module로 구현된다 — 구조적으로 A-01(제재 명단)과 같은 계열이다. + +--- + +## §4. ② 입력 사실 — 판정에 필요한 데이터 + +### 4.1 본 부품이 판정하려면 어떤 증거가 필요한가 + +F-01은 매수인의 자산·자격을 계산하지 않는다. 오직 두 가지만 필요하다 — (1) 이 거래의 당사자가 누구인지(from·to의 ONCHAINID), (2) 그 당사자가 제한대상 명부에 있는지. 자격 증명서도, 신선도도, 금액도 보지 않는다. 그래서 입력은 A-13보다 훨씬 얇지만, 대신 제한대상 명부 자체의 정확성·최신성이 판정의 전부를 좌우한다 — 명부에 빠진 계열이 있으면 게이트가 뚫리고, 잘못 올라간 정상 참여자가 있으면 정당한 거래가 막힌다. 따라서 F-01의 "증거 품질"은 명부 거버넌스(§11)에 달려 있다. + +### 4.2 Data field — DEX가 실제로 읽는 항목 + +| 필드 | 출처 | 용도 | +| --- | --- | --- | +| `transfer.from` / `transfer.to` | 거래 요청(ERC-3643 transfer) | 당사자 지갑 주소 | +| `onchainId(from)` / `onchainId(to)` | Identity Registry(A-04) | 지갑 → 사람(ONCHAINID) 매핑; 다지갑 위장 방지 | +| `restrictedOperatorSet` | 제한대상 레지스트리(Decipher 거버넌스) | ONCHAINID → 제한대상 여부·태그 | +| `operatorRole` | 제한대상 레지스트리 원소 태그 | ENTITY·AFFILIATE·ASSOCIATED_PERSON·CONTROLLED_ACCOUNT | +| `transferType` | Manifest·거래 컨텍스트 | primary(1차 배포)·secondary(2차)·involuntary(강제·회수) 구분 | +| `venueStatus` | Manifest(외부자문 확정 시) | 근거 태그(반사기만 / +Reg ATS / +§15(c)) 결정 — 로직 불변 | + +### 4.3 수집 경로 — 3단계 흐름 + +1. **당사자 해석.** 거래 요청의 from·to 지갑을 Identity Registry(A-04)로 조회해 각각의 ONCHAINID를 얻는다. 지갑이 ONCHAINID에 연결돼 있지 않으면 상류(A-04)에서 이미 걸러진다. +2. **제한대상 대조.** 두 ONCHAINID를 restrictedOperatorSet에 대조한다. 이 명부는 Decipher 거버넌스가 off-chain에서 확정한 제한대상(법인·계열·임직원)을 온체인 레지스트리에 반영한 것이다(§11). +3. **거래유형 확인.** 제한대상이 낀 경우에 한해, transferType으로 예외(primary·involuntary)인지 확인한다. 예외가 아니면 차단한다. + +### 4.4 필수 확인 항목 전체 표 + +아래는 F-01 판정에서 반드시 확인하는 항목의 전체 목록이다(예시가 아니라 필수 항목). 공통 항목은 모든 거래에, 조건부 항목은 제한대상이 낀 경우에만 확인한다. + +| 구분 | 확인 항목 | 필수/조건부 | 실패시 | +| --- | --- | --- | --- | +| 공통 | from·to의 ONCHAINID 해석 성공 | 필수 | REVERT(A-04 상류) | +| 공통 | restrictedOperatorSet 로드 성공 | 필수 | FAIL-SAFE(보수적 차단) | +| 공통 | from ∈ 제한대상 여부 | 필수 | 해당시 예외판정으로 | +| 공통 | to ∈ 제한대상 여부 | 필수 | 해당시 예외판정으로 | +| 조건부 | transferType = primary(발행자 1차 배포)인가 | 제한대상 낀 경우 | 아니면 다음 예외 확인 | +| 조건부 | transferType = involuntary(forcedTransfer/recovery)인가 | 제한대상 낀 경우 | 아니면 FAIL | +| 조건부(근거) | venueStatus(ATS·BROKER) — 근거 태그용 | 확정 시 | 로직 불변, 태그만 | + +--- + +## §5. ③ 판정 로직 — 어떻게 PASS/FAIL이 결정되는가 + +### 5.0 판정 흐름 플로우차트 + +아래 그림은 F-01의 런타임 판정 흐름이다 — 거래 요청 → 명부 로드 → from 제한대상? → to 제한대상? → (제한대상이 끼면) 예외 경로? → PASS / PASS(예외) / FAIL. + +![런타임 판정 흐름](fig50.png) + +### 5.1 전체 흐름 (사람 말로) + +거래 하나가 들어오면 F-01은 이렇게 판단한다. 먼저 매도인(from)과 매수인(to)이 각각 누구인지를 ONCHAINID로 확정한다. 그다음 두 사람을 제한대상 명부에 대조한다. 둘 다 명부에 없으면 — 즉 운영자 측이 낀 거래가 아니면 — 그냥 통과시킨다. 둘 중 하나라도 명부에 있으면, 그 거래가 허용된 예외인지 본다. 예외는 딱 둘이다: 발행자가 최초 투자자에게 배포하는 1차 배포거나, 분실 복구·규제 명령 같은 강제·회수 이전이거나. 이 둘 중 하나면 통과(예외)시키고, 그것도 아니면 막는다(revert). 자격도 금액도 보지 않는다 — 오직 "운영자 측이 자발적으로 2차 거래의 당사자가 되려 하는가"만 본다. + +### 5.2 Pseudocode + 단계별 해설 + +``` +function F01_check(transfer): + # step 1 — 당사자 존재·해석 + idFrom = IdentityRegistry.onchainId(transfer.from) # A-04 + idTo = IdentityRegistry.onchainId(transfer.to) + if idFrom == NULL or idTo == NULL: + REVERT("IDENTITY_UNRESOLVED") # 상류(A-04) 소관 + + # step 2 — 명부 로드 (fail-safe) + reg = load(restrictedOperatorSet) + if reg == UNAVAILABLE: + return FAIL("OP_REGISTRY_UNAVAILABLE") # 보수적 차단 + + # step 3~4 — 제한대상 대조 + fromRestricted = reg.contains(idFrom) + toRestricted = reg.contains(idTo) + + # step 5 — 정상 통과 + if not fromRestricted and not toRestricted: + return PASS("OP_CLEAR") + + # step 6 — 예외 판정 (제한대상이 낀 경우) + if transfer.transferType == PRIMARY_DISTRIBUTION and Manifest.allowsPrimary(idFrom, idTo): + return PASS("OP_EXEMPT_PRIMARY") + if transfer.transferType == INVOLUNTARY: # forcedTransfer/recovery + return PASS("OP_EXEMPT_INVOLUNTARY") + + # 예외 아님 → 차단 + return FAIL("OP_SELF_DEALING_BLOCKED") +``` + +**해설.** + +- **step 1.** 판정 단위는 지갑이 아니라 ONCHAINID다. 운영자가 새 지갑을 만들어 우회하려 해도 그 지갑이 운영자의 ONCHAINID에 묶이면 명부에 걸린다 — 이 "지갑↔사람" 확정은 A-04가 담당하고 F-01은 그 결과를 소비한다. 지갑이 어떤 ONCHAINID에도 안 묶여 있으면 애초에 A-04가 거래를 막는다. + +- **step 2.** 명부를 읽지 못하면 통과가 아니라 차단이다(fail-safe). 반사기 예방이 목적이므로, 불확실할 때는 보수적으로 막는 게 옳다 — A-01(제재)의 fail-closed 원칙과 같다. + +- **step 3~5.** 제한대상 대조는 boolean이다. 확률적 판단이 없다 — control 여부 같은 재량 판단은 off-chain(A-06)에서 이미 끝나 명부에 반영돼 있고, 온체인은 "명부에 있나 없나"만 본다. 둘 다 없으면 즉시 통과. + +- **step 6.** 제한대상이 낀 경우에만 예외를 본다. 예외는 화이트리스트로 좁게 잡는다 — primary는 Manifest가 명시한 발행 배포 경로에 한정하고, involuntary는 강제이전·회수라는 비자발적 경로에 한정한다. 둘 다 아니면 차단이 기본값이다. + +### 5.3 판정 매트릭스 + +| from 제한대상 | to 제한대상 | transferType | 결과 | reasonCode | +| --- | --- | --- | --- | --- | +| ✕ | ✕ | 무관 | PASS | OP_CLEAR | +| ○ | ✕ | secondary | FAIL | OP_SELF_DEALING_BLOCKED | +| ✕ | ○ | secondary | FAIL | OP_SELF_DEALING_BLOCKED | +| ○ | ○ | secondary | FAIL | OP_SELF_DEALING_BLOCKED | +| ○ 또는 ○ | (한쪽 이상) | primary(Manifest 허용) | PASS | OP_EXEMPT_PRIMARY | +| ○ 또는 ○ | (한쪽 이상) | involuntary | PASS | OP_EXEMPT_INVOLUNTARY | +| 명부 로드 실패 | — | 무관 | FAIL | OP_REGISTRY_UNAVAILABLE | + +주의: 실패 부등식은 존재 여부의 boolean이라 초과/이상 문제가 없다. "제한대상 명부에 있으면(∈) 차단"이 기본이고, 예외 경로만이 그 차단을 해제한다. + +### 5.4 Time-of-check — 어느 시점의 명부를 보나 + +F-01은 pre-trade 게이트이므로 "거래 체결 직전"의 restrictedOperatorSet 스냅샷을 본다. 명부에 방금 추가된 제한대상은 그 시점 이후 거래부터 차단되고, 방금 제거된 자는 이후 거래부터 허용된다. 명부 변경(추가·제거)은 거래가 아니라 운영 트랜잭션이므로 별도 권한·기록으로 통제된다(§11). 여기서 중요한 설계 원칙 하나 — 명부 갱신과 거래 판정 사이의 시차를 줄이려면 명부 변경이 즉시 온체인에 반영돼야 하며, off-chain에서 계열로 판정된 자가 아직 온체인 명부에 반영되지 않은 창(window)이 F-01의 유일한 구조적 취약점이다(§12). + +### 5.5 게이트형의 본질 — 비결정성을 결정성으로 + +F-01의 본질은 "운영자 자기거래인가"라는 규범적·맥락적 질문을 "당사자가 명부에 있는가"라는 결정론적 boolean으로 환원한 데 있다. 규범적 부분(누가 계열인가, control이 있는가)은 off-chain에서 A-06이 판단해 명부에 반영하고, 온체인 F-01은 그 명부를 기계적으로 대조만 한다. 이 분리가 두 가지를 가능하게 한다 — (1) 온체인 판정이 가스·재량 없이 결정론적이고, (2) 규범 판단의 갱신(새 계열 추가 등)이 코드 재배포 없이 명부 갱신만으로 반영된다. 이는 A-01(제재: SDN 명단 대조)·A-04(신원: 레지스트리 대조)와 같은 게이트형 설계 철학이며, 증명서형(A-13·A-03)과 근본적으로 다른 계열이다. + +--- + +## §6. ④ 거절·예외 처리 — 검사에 실패하면 어떻게 되는가 + +### 6.1 전체 흐름 (사람 말로) + +F-01이 차단하면 거래는 체결되지 않고 revert된다. 매수인·매도인에게는 "이 거래는 진행할 수 없다"는 최소한의 사유만 노출하고, 왜(어느 당사자가 어떤 이유로 제한대상인지)는 내부 기록으로만 남긴다 — 제한대상 명부의 상세를 외부에 노출하면 우회에 악용될 수 있기 때문이다. 예외(발행 배포·강제이전)에 해당하면 차단 대신 예외 사유로 통과시키되, 그 예외 사용도 전부 기록한다. + +### 6.2 Failure codes + +| reasonCode | 언제 | 처리 | 노출 수준 | +| --- | --- | --- | --- | +| `OP_SELF_DEALING_BLOCKED` | 제한대상이 낀 2차 거래(예외 아님) | revert | 매수인엔 일반 사유만 | +| `OP_REGISTRY_UNAVAILABLE` | 제한대상 명부 로드 실패 | revert(fail-safe) | 매수인엔 일시 오류 | +| `IDENTITY_UNRESOLVED` | from·to의 ONCHAINID 미해석 | revert(A-04 상류) | A-04 메시지 | +| `OP_EXEMPT_PRIMARY` | 발행자 1차 배포(Manifest 허용) | PASS(예외) | 정상 처리, 내부 기록 | +| `OP_EXEMPT_INVOLUNTARY` | forcedTransfer/recovery | PASS(예외) | 정상 처리, 내부 기록 | + +### 6.3 예외 처리 경로 + +F-01의 예외는 딱 두 가지이며, 둘 다 좁게·명시적으로 통제한다. + +- **① 발행자 1차 배포(primary distribution).** 발행자(또는 Manifest가 지정한 primary 경로)가 최초 투자자에게 토큰을 배포하는 것은 2차 시장 매칭이 아니므로 운영자 자기거래 우려 밖일 수 있다. 다만 Decipher 운영자가 발행자·transfer agent 역할을 겸하는 구조라면 이 예외의 경계가 미묘해진다 — 그래서 예외는 Manifest에 명시된 primary-distribution 경로(발행자 주소 → whitelist 투자자)로만 한정하고, 그 밖의 운영자 관여 거래에는 열어주지 않는다. 이 예외의 범위 확정은 발행 아키텍처 확정 후 재검토 대상이다(§12). + +- **② 강제이전·회수(involuntary — forcedTransfer/recovery).** 분실 지갑 복구, 사망·상속 이전, 규제 명령 이행 등 비자발적 이전에서는 운영자가 기술적 주체가 되지만 이는 자발적 자기거래가 아니다. 이 경로는 별도의 상위 권한(멀티시그·time-lock)과 사유·서명·타임스탬프 기록으로 통제하며, F-01 차단에서 제외한다. A-04·B-03이 규율하는 forcedTransfer/recovery 권한 체계와 정합해야 한다. + +### 6.4 Error message — 매수인 노출용 vs 내부 기록용 분리 + +| 상황 | 매수인 노출 메시지 | 내부 기록(감사) | +| --- | --- | --- | +| 제한대상 차단 | "이 거래는 현재 진행할 수 없습니다." | 어느 당사자(ONCHAINID)가 어떤 태그(ENTITY/AFFILIATE/…)로 차단됐는지, 명부 버전, 타임스탬프 | +| 명부 로드 실패 | "일시적 오류로 거래를 처리할 수 없습니다. 잠시 후 다시 시도하세요." | 로드 실패 원인, fail-safe 발동 기록 | +| 예외 통과 | (정상 처리) | 예외 유형(primary/involuntary), 승인 권한자, 사유, 타임스탬프 | + +원칙 — 제한대상 명부의 구성(누가 운영자 계열인지)은 우회 악용을 막기 위해 매수인에게 노출하지 않는다. 동시에 모든 차단·예외는 내부적으로 완전히 기록해, 사후에 "왜 이 거래가 막혔나/허용됐나"를 재구성할 수 있게 한다. 이 기록은 BD/ATS 해당 시 Reg ATS 301(b)(10)(ii)의 감독 절차·기록 요구와도 연결된다. + +--- + +## §7. ⑤ 테스트 케이스 — 스펙이 제대로 작동하는지 검증 + +### 7.1 Test 1 — Pass (정상 통과) + +- **상황:** whitelist 투자자 A(매도) → whitelist 투자자 B(매수). 둘 다 제한대상 명부에 없음. 2차 거래. +- **입력:** onchainId(A), onchainId(B) 모두 restrictedOperatorSet에 부재. +- **기대:** PASS(OP_CLEAR). from·to 모두 제한대상 아님 → step 5에서 통과. + +### 7.2 Test 2 — Fail (운영자 법인이 당사자) + +- **상황:** Decipher 법인 계정이 자기 계정으로 BUIDL-like 토큰을 매수. 2차 거래. +- **입력:** onchainId(Decipher법인)에 태그 OPERATOR_ENTITY, restrictedOperatorSet에 존재. +- **기대:** FAIL(OP_SELF_DEALING_BLOCKED). to가 제한대상 → step 6 예외판정 → primary·involuntary 아님 → 차단. 매수인 노출은 일반 사유, 내부엔 ENTITY 태그 기록. + +### 7.3 Test 3 — Fail (계열사가 반대편) + +- **상황:** Decipher와 공통지배 관계인 거래 데스크(자매회사)가 subscriber 주문 반대편에서 매도. A-06이 control 관계를 확인해 명부에 반영해 둠. +- **입력:** onchainId(자매회사)에 태그 OPERATOR_AFFILIATE(Rule 405 control), 명부에 존재. +- **기대:** FAIL(OP_SELF_DEALING_BLOCKED). from이 제한대상 → 예외 아님 → 차단. 계열 판정은 off-chain(A-06)에서 이미 끝났고 온체인은 명부 대조만 함. + +### 7.4 Test 4 — Boundary (예외: 발행자 1차 배포) + +- **상황:** 발행자 주소가 Manifest 지정 primary 경로로 whitelist 최초 투자자에게 배포. 발행자가 운영자 계열과 겹쳐 명부에 있는 경우. +- **입력:** transferType=PRIMARY_DISTRIBUTION, Manifest.allowsPrimary(발행자, 투자자)=true. +- **기대:** PASS(OP_EXEMPT_PRIMARY). 제한대상이 끼었지만 primary 예외 성립 → 통과. 예외 사용은 내부 기록. (경계 주의: 같은 발행자가 2차 매칭에 당사자로 들어오면 예외 아님 → 차단.) + +### 7.5 Test 5 — 우회 시도 (운영자의 새 지갑) + +- **상황:** 운영자 임직원이 명부에 없는 새 지갑을 만들어 거래 시도. 그러나 그 지갑은 KYC상 임직원의 ONCHAINID에 연결됨. +- **입력:** 새 지갑 → onchainId(임직원)로 해석(A-04), 그 ONCHAINID에 태그 OPERATOR_ASSOCIATED_PERSON, 명부에 존재. +- **기대:** FAIL(OP_SELF_DEALING_BLOCKED). 판정 단위가 지갑이 아니라 ONCHAINID이므로 새 지갑 우회가 무력화됨. (만약 임직원이 KYC 없는 익명 지갑을 쓰면 A-04가 상류에서 차단 — F-01 이전에 걸림.) + +--- + +## §8. (α) 게이트형(negative screen) 패턴 — 왜 이 방식인가 + +### 8.1 Decipher의 검증 방식 3패턴 + +Decipher는 부품을 세 패턴으로 구현한다 — (A) 기계 판정형(결정론적 계산·명단 대조), (B) 증명서형(off-chain 실사 + 서명 claim 확인, 예: A-13·A-03), (C) 감시형(사후 flag + 운영 판단, 예: F-02·F-03). F-01은 (A) 중에서도 negative screen 게이트로, A-01(제재)과 같은 계열이다. + +### 8.2 F-01에 게이트형이 유일한 선택인 이유 + +F-01에 증명서형(B)은 맞지 않는다. B는 "이 사람이 어떤 자격을 갖췄음"을 신뢰기관이 서명해 확인하는 구조인데, F-01이 확인하려는 것은 자격의 유무가 아니라 "이 사람이 운영자 측인가"라는 부정 사실이다. 운영자 측 여부는 Decipher 자신이 가장 잘 아는 정보이지 제3자 Trusted Issuer가 증명할 대상이 아니다. 또 감시형(C)도 부적절하다 — 운영자 자기거래는 사후에 flag만 달고 넘어갈 성질이 아니라, 반사기 위반의 전제를 사전에 원천 차단해야 하는 hard block이기 때문이다. 따라서 "Decipher가 관리하는 제한대상 명부를 pre-trade에 대조해 즉시 차단"하는 게이트형이 유일하게 들어맞는다. 이는 제재(A-01)가 SDN 명단을 대조해 즉시 차단하는 것과 구조가 동일하다. + +### 8.3 게이트형의 법적 토대 — 반사기 예방 + fail-safe + +게이트형의 정당성은 두 가지에서 나온다. 첫째, 예방 원리 — F-01은 위반을 사후 적발하는 게 아니라 위반의 사실적 전제(운영자가 당사자가 됨)를 사전에 없앤다. 반사기(§10(b)/10b-5·§17(a))는 위반이 성립한 뒤의 제재이지만, F-01은 그 성립 자체를 막는 prophylactic 설계다. Reg ATS 301(b)(10)(i)(B)가 요구하는 "임직원 자기계좌 거래 통제"의 최강 이행이 바로 이 사전 차단이다. 둘째, fail-safe 원리 — 명부를 읽지 못하거나 불확실하면 통과가 아니라 차단이 기본값이다. 투자자 보호가 목적인 반사기 예방 부품에서, 불확실성은 보수적으로 차단하는 쪽으로 해소하는 것이 옳다. 이 두 원리가 게이트형(strict-liability 성격의 즉시 차단)을 F-01의 정당한 형태로 만든다. + +--- + +## §9. (β) Cross-Element·Cross-Recipe Coordination — 혼자 움직이지 않는다 + +### 9.1 본 부품의 책임 경계 + +F-01은 "이 거래의 당사자 중 운영자 측이 있는가, 있다면 허용 예외인가"까지만 판단한다. 그 사람이 적격인지는 A-03·A-13, 제재 대상인지는 A-01, 계열인지의 실체 판정은 A-06, 지갑 뒤 사람이 누구인지는 A-04, 그 거래가 가장매매 패턴인지는 F-02, 신고 대상인지는 F-03이 본다. F-01은 오직 운영자 측의 자발적 2차 거래 참여만 사전 차단한다. + +### 9.2 Element 관계 표 + +| 부품 | 관계 | 구체적 연결 | +| --- | --- | --- | +| A-04 (신원) | 판정 단위 공급 | from·to 지갑 → ONCHAINID 매핑; 새 지갑 우회를 A-04가 무력화(§7.5) | +| A-06 (affiliate) | 계열 실체 판정 공유 | control 여부는 A-06이 off-chain 판정 → F-01 명부에 반영. F-01은 판정 규칙이 아니라 결과를 소비 | +| A-01 (제재) | 동형 게이트 | 둘 다 negative screen·fail-safe·즉시 차단; 병렬 배치 | +| F-02 (시장감시) | 사전 차단 ↔ 사후 감시 | F-01이 못 막은 우회·예외 통과분을 F-02가 wash/matched 패턴(§9(a)(1))으로 사후 감시 | +| F-03 (SAR) | 위장 시도 신호 | 제한대상 우회 시도(새 지갑·명의 위장)는 F-03 보고 신호 | +| B-03 (이전제한 메타) | forcedTransfer/recovery 권한 정합 | 예외 ②(강제·회수)의 권한 체계가 B-03과 일치해야 함 | +| B-01 (Manifest 무결성) | primary 예외·명부 참조 무결성 | Manifest의 primary 경로·restrictedOperatorSet 참조 구성의 무결성을 B-01이 검증 | + +### 9.3 Recipe orchestration — R4 소속이나 글로벌 게이트 성격 (설계 관찰) + +PM 규약상 F-01은 R4(시장행위 감시)에 속한다. 그러나 F-01은 R4의 다른 부품들과 성격이 근본적으로 다르다 — F-02·F-03은 post-trade STATEFUL 감시(flag)인 데 반해, F-01은 pre-trade STATELESS hard gate다. 기능적으로 F-01은 A-01·A-02(제재·국가 제한) 같은 transaction-level 글로벌 게이트에 더 가깝다: 운영자 자기거래는 R1(발행)·R2(재판매)·R3(펀드) 어느 레시피의 거래든 가리지 않고 걸려야 하기 때문이다. + +이로부터 두 가지 설계 함의가 나온다. (1) F-01은 R4의 "감시" 묶음에 조직상 소속되지만, 실행상으로는 모든 거래에 병렬로 걸리는 글로벌 게이트로 배치하는 것이 옳다 — 즉 manifest.globalGates에 두어 A-01과 나란히 pre-trade에 평가하는 편이 R4 감시 파이프라인에만 얹는 것보다 안전하다. (2) 이 이중성(조직상 R4 / 실행상 글로벌)은 매니페스트 설계에서 명시적으로 다뤄야 하며, F-01을 R4 사후 감시에만 매달면 pre-trade 봉쇄가 누락될 위험이 있다. 이 배치 문제는 §12의 Open Issue로 남긴다. + +### 9.4 Conflict resolution rule + +- **예외와 차단이 겹칠 때.** 제한대상이 낀 거래가 동시에 예외(primary/involuntary)에도 해당하면, 예외가 차단에 우선한다 — 단 예외는 화이트리스트로 좁게 정의된 경우에만 성립하고, 애매하면 차단이 기본값이다. +- **F-01 통과 ↔ 다른 게이트 차단.** F-01이 통과시켜도 A-01(제재)·A-03(자격) 등 다른 게이트가 독립적으로 차단할 수 있다. F-01의 PASS는 "운영자 측 문제 없음"만 의미하며 다른 요건의 통과를 보장하지 않는다(cumulative AND). +- **명부 불확실.** 명부 로드 실패·미반영 창은 fail-safe(차단)로 해소한다(§5.4·§8.3). + +### 9.5 Manifest 무결성과의 조율 + +토큰별 Manifest가 F-01 관련으로 고정하는 값 — restrictedOperatorSet 레지스트리 주소, primary-distribution 허용 경로, forcedTransfer/recovery 권한 구성, 그리고 (확정 시) venueStatus. 이 값들의 무결성·변경 통제는 B-01 소관이며, Element 단위 거버넌스(2-of-3 멀티시그·time-lock)로 갱신한다. + +--- + +## §10. (γ) 3-Layer Solution — 제한대상 명부의 신뢰를 세 겹으로 + +### 10.1 왜 3겹 구조인가 + +F-01의 판정은 오직 제한대상 명부의 정확성에 달렸다. 명부에 빠진 계열이 있으면 게이트가 뚫리고, 잘못 올라간 정상 참여자가 있으면 정당한 거래가 막힌다. 그래서 명부 자체를 세 겹으로 신뢰 보증한다 — 증명서형(A-13)이 "매수인 자격"을 세 겹으로 보증했다면, F-01은 "누가 운영자 측인지"라는 명부를 세 겹으로 보증한다. + +### 10.2 각 층의 법적 토대 + +- **Layer 1 — 운영자 자기신고·거버넌스 등록.** Decipher 자신이 자기 법인·계열·임직원을 가장 잘 안다. 임직원 온보딩·계열 관계 변동 시 거버넌스가 제한대상 명부에 등록한다. 이는 Reg ATS 301(b)(10)(ii)가 요구하는 "서면 감독 절차"의 온체인 대응이다. +- **Layer 2 — A-06 control 판정 연동.** 계열(affiliate) 여부는 Rule 405 control 기준으로 A-06이 off-chain 판정하고, 그 결과를 명부에 반영한다. 지분 밝은 선이 아니라 기능적 control 판정이므로(§3.7), 경계 사례는 A-06의 판단 기록으로 뒷받침된다. +- **Layer 3 — 주기적 대사·감사.** 명부와 실제 인사·계열 현황(HR·법인 등기·지배구조)을 주기적으로 대사(reconciliation)해 누락·오류를 잡는다. 이 감사 기록이 사후 방어의 중심이다. + +### 10.3 층 간 escalation 규칙 + +- 자기신고(Layer 1)로 등록되지 않았으나 A-06(Layer 2)이 control을 확인하면 명부에 추가하고 REVIEW 큐에 기록한다. +- 대사(Layer 3)에서 명부에 없어야 할(관계 종료) 자가 발견되면 제거하되, 제거 시점 이후 거래부터 허용된다(§5.4). +- 어느 층에서든 우회 시도(명의 위장·새 지갑)가 포착되면 F-03(SAR 신호)로 에스컬레이션한다. + +### 10.4 Liability(책임) 분배 — 명부 누락으로 운영자 거래가 통과된 경우 + +명부에 빠진 계열이 거래를 통과시켜 반사기 문제가 발생한 경우, 설계 관점의 책임 분배는 이렇다. ① 자기신고·A-06 연동·대사라는 3겹 절차를 지켰는데도 갱신 창(§5.4) 안에서 통과된 경우 — 절차 준수 기록이 방어의 중심이고, 시스템은 탐지 즉시 명부 반영·F-02 사후 감시·F-03 보고로 손해 확산을 차단한 기록을 남긴다. ② 자기신고·연동·대사 절차를 게을리해 뚫린 경우 — 거버넌스의 절차 위반 문제로 전개된다. 즉 F-01의 방어력은 온체인 게이트가 아니라 off-chain 명부 거버넌스(§11)의 성실성에 달렸다. + +--- + +## §11. (δ) Frontend·Off-chain Operator Layer — 4-Layer로는 안 끝난다 + +### 11.1 4-Layer 밖의 층이 필요한 이유 + +F-01의 온체인 로직은 단순하다(명부 대조). 복잡성은 전부 off-chain에 있다 — 누구를 제한대상으로 볼지(계열 판정), 언제 명부에 넣고 뺄지(인사·지배구조 변동 추적), 어떻게 우회를 잡을지(대사·감시). 이 층이 부실하면 온체인 게이트는 빈 껍데기다. + +### 11.2 제한대상 명부 등록·갱신 절차 + +- **등록 트리거.** (a) 임직원 온보딩/오프보딩, (b) 계열 관계 성립/종료(M&A·지분변동·지배구조 변경, A-06 연동), (c) 운영자 지배 계좌 신설. +- **권한·기록.** 명부 추가·제거는 거버넌스 멀티시그(예: 2-of-3)와 time-lock으로만 가능하며, 모든 변경에 서명·사유·타임스탬프를 남긴다. 이는 거래가 아니라 운영 트랜잭션이다(§5.4의 STATELESS 근거). +- **온체인 반영 지연 최소화.** off-chain 판정과 온체인 명부 반영 사이의 창을 줄이는 것이 F-01 방어의 핵심이다(§12). + +### 11.3 감사·대사 (reconciliation) + +명부 ↔ 실제 현황(HR 인사·법인 등기·지배구조 도표)을 주기적으로 대사한다. BD/ATS 해당 시 이 기록은 Reg ATS 301(b)(10)(ii) 감독 절차 및 Rule 17a-4 기록보존과 연결된다(BD/ATS 의견서 §3 audit trail 참조). + +### 11.4 아키텍처 함의 + +F-01은 "온체인 3줄, off-chain 대부분"인 부품이다. 온체인은 명부를 읽어 즉시 차단하는 결정론적 게이트일 뿐이고, 실질 방어는 명부를 정확·최신으로 유지하는 거버넌스에 있다. 그래서 F-01의 감사·검증은 코드 리뷰가 아니라 명부 거버넌스 절차의 리뷰로 이뤄져야 한다. + +--- + +## §12. Open Issues — 변호사·아키텍트 follow-up 대상 + +| 우선순위 | 이슈 | 내용 | 넘길 곳 | +| --- | --- | --- | --- | +| P0 | 명부 반영 지연 창 | off-chain에서 계열로 판정된 자가 아직 온체인 restrictedOperatorSet에 반영되지 않은 창(window)이 F-01의 유일한 구조적 취약점(§5.4). 반영 지연 최소화 SLA·즉시 반영 메커니즘 설계 필요 | 아키텍트(거버넌스·오라클) | +| P0 | 매니페스트 배치(R4 vs 글로벌 게이트) | F-01은 조직상 R4이나 실행상 모든 거래에 걸려야 하는 글로벌 게이트 성격(§9.3). manifest.globalGates에 A-01과 나란히 둘지, R4 파이프라인에 둘지 확정. R4 사후 감시에만 매달면 pre-trade 봉쇄 누락 위험 | 아키텍트(Manifest 설계) | +| P1 | BD/ATS 지위 미결의 파급 | Decipher가 broker/ATS인지 확정되면 §3.5(301(b)(10))·§3.6(§15(c))이 F-01의 조건부 근거로 확정된다. 미결 상태에서는 반사기(§3.1~§3.3)만으로 이미 정당화되나, 지위 확정이 근거 두께와 감독·기록 의무를 바꾼다(BD/ATS 의견서 Q1) | 외부 전문 자문·SEC Crypto Task Force | +| P1 | 발행자 1차 배포 예외의 범위 | Decipher 운영자가 발행자·transfer agent 역할을 겸하는 구조라면 primary 예외(§6.3 ①)의 경계가 미묘. 어디까지가 "발행 배포"이고 어디부터가 "운영자 자기거래"인지, 발행 아키텍처 확정 후 재검토 | 발행 구조 확정 후 법률 검토 | +| P2 | 다크풀 집행 사례 pinpoint 인용 | §3.10의 운영자 자기거래 집행선(Pipeline 등)의 정확한 SEC release 번호·인용을 1차 출처(sec.gov)로 확정해 최종본에 반영 | 외부 자문·리서치 | +| P2 | 계열(control) 판정의 off-chain 경계 | control은 지분 밝은 선이 아니라 기능적 판단(§3.7)이므로 경계 사례(계약상 지배·간접 지배)의 판정 기준을 A-06과 공유·정합. 명부 등록 기준의 명문화 | A-06 연동·법률 검토 | +| P2 | fail-safe 발동 시 UX | 명부 로드 실패로 정당한 거래가 일시 차단될 때의 사용자 경험·재시도 정책. 가용성 vs 보수적 차단의 균형 | 아키텍트·프로덕트 | + +--- + +## §13. 파일명 규칙 + +- 본문 소스: `F-01_operator-self-dealing.md` +- 빌드 산출물: `F-01_operator-self-dealing.docx` (pandoc + Noto Sans CJK KR 패치) +- 도표: `fig30.png`(법조문 관계 흐름), `fig50.png`(런타임 판정 흐름) +- 출력 위치: `/mnt/user-data/outputs/` +- 스펙시트(후속): `spec-sheets/elements/F-01.md` + +--- + +*본 문서는 F-01(운영자 자기거래 제한) 부품의 심층 인수인계 자료다. 핵심 잠금 결론 — (1) F-01의 무조건적 법적 뿌리는 반사기(§10(b)/10b-5·§17(a))이며 운영자 지위 확정과 무관하다. (2) ATS/broker 확정 시 Reg ATS 301(b)(10)(i)(B)·§15(c)(1)이 조건부로 보강되며, F-01은 301(b)(10)(i)(B)의 최강 이행이다. (3) F-01은 ICA §17에서 나오지 않는다 — BUIDL은 §3(c)(7)로 투자회사 정의에서 제외되어 미등록이고, Decipher는 §2(a)(3) 의미의 펀드 관계자도 아니다. (4) F-01은 조직상 R4이나 실행상 글로벌 게이트로 배치하는 것이 옳다. 모든 영문 원문은 1차 출처(uscode.house.gov·ecfr.gov·govinfo.gov)에서 verbatim 확인했다.* \ No newline at end of file diff --git a/docs/compliance/elements/F-02.md b/docs/compliance/elements/F-02.md new file mode 100644 index 0000000..3483c76 --- /dev/null +++ b/docs/compliance/elements/F-02.md @@ -0,0 +1,673 @@ +# ELE.F-02_market-surveillance + +# F-02 시장행위 감시 — 부품 심층 인수인계 문서 (Walkthrough) + +**이 문서는 무엇인가.** Decipher RWA DEX의 컴플라이언스 부품 중 하나인 시장행위 감시 부품(내부 식별자 F-02)을, 미국 증권 시세조종·반사기 규제를 처음 보는 사람도 이해할 수 있도록 풀어 쓴 인수인계 문서다. 개발자·법무팀·외부 자문 변호사·학회원이 각자 작업의 base로 그대로 쓸 수 있도록 — ① 이 규제가 어디서 왔고 왜 존재하는지, ② 어떤 사실을 입력받아 ③ 어떤 로직으로 표시(flag)하고 ④ 표시 후 어떻게 처리하며 ⑤ 어떤 테스트로 검증하는지를, 기술 요소마다 풀이를 함께 붙여 설명한다. + +**이 부품은 거래를 막지 않는다 (가장 중요한 전제).** 앞선 대부분의 부품(A-13 QP, A-03 적격투자자, A-01 제재 등)은 자격 미달 거래를 체결 직전에 차단하는 게이트다. F-02는 다르다. F-02는 체결을 막지 않고, 이미 일어난 거래·주문을 사후에 관찰하여 객관적 의심 패턴을 표시(flag)하고 운영자 검토 큐에 적재할 뿐이다. 왜 막지 않는가는 이 문서 전체의 핵심 주제이며(§8), 한 줄로 답하면 이렇다 — 시세조종·사기는 조문상 고의·목적(scienter)을 요건으로 하는데, 고의는 코드가 체결 전에 판정할 수 없기 때문이다. 정당한 거래를 고의 없이 차단하면 오히려 별도의 책임(정당한 거래 방해)이 생긴다. + +**자체완결 원칙.** 이 문서는 다른 내부 문서를 열지 않아도 단독으로 이해되도록 작성했다. 인용은 미국 연방법·연방규칙·SEC·판례 등 외부 공식 자료만 사용한다. + +**출처 기준 (Version 1.0, 2026-07).** 본 부품의 미국 증권법 인용은 다음 1차 출처 현행본을 기준으로 한다 — 15 U.S.C. §78i(§9)·§78j(§10)은 uscode.house.gov 현행본(§78i는 2026-07-19 현재 유효, §78j는 2026 현행 편), 17 CFR §240.10b-5는 eCFR 현행본(Title 17, 2026-07-17 기준), 7 U.S.C. §6c(a)(5)(CEA §4c(a)(5))은 uscode.house.gov·govinfo.gov 현행본, 판례는 supremecourt.gov·govinfo.gov(U.S. Reports / U.S. Courts Opinions)를 기준으로 한다. 제정법 출처는 uscode.house.gov로 통일했으며 govinfo.gov/link/uscode/... 딥링크도 동일한 1차 출처다. 영문 원문은 verbatim으로 보존한다. + +**테스트 토큰 전제 (중요).** 본 문서는 실제 BlackRock BUIDL의 발행 표준, transfer architecture, 또는 현재 운영 조건을 단정하지 않는다. 본 프로젝트는 BUIDL-like §3(c)(7) private fund interest를 ERC-3643 테스트 토큰으로 모델링하여, 유통 단계의 시장행위 감시를 검증하는 것이다. 이하 'BUIDL'·'ERC-3643' 관련 서술은 모두 이 모델링 전제 하의 것이다. + +## §1. 규제 맥락 — 이 부품이 다루는 규제는 어디서 왔는가 (Context First) + +> **왜 맥락부터 읽어야 하나.** 이 부품은 한 줄로 말하면 "이 거래·주문이 시장을 속이는 조작(manipulation)이나 사기(fraud)의 객관적 징후를 보이는가"를 사후에 관찰한다. 그런데 그 기준인 시세조종·반사기 규제는 1934년법의 깊은 곳(§9·§10(b))과 그 하위 규칙(Rule 10b-5)에서 나오고, 각 조문마다 '무엇이 금지되는가'와 '무엇을 입증해야 하는가'가 미묘하게 다르다. 조문만 들이밀면 왜 F-02가 차단이 아니라 표시만 하는지, 왜 세 갈래(자전거래·조작적 연속거래·반사기)로 나뉘는지 알 수 없다. 그래서 큰 그림(미국 증권법의 구조에서 F-02의 자리 → 이 규제가 생긴 역사 → 세 금지행위 축 → 우리 시스템에서의 의미)을 먼저 깐다. + +### 1.1 미국 증권법의 4개 기둥과 그중 1934년법(유통시장)의 자리 + +미국 연방 증권규제는 한국처럼 하나의 「자본시장법」으로 통합돼 있지 않고, 시대별로 따로 만들어진 4개의 큰 법률이 각자 다른 국면을 맡는다. 쉽게 말하면 한국은 증권 관련 규제가 한 건물 안의 여러 부서라면, 미국은 길 건너 따로 선 4개의 건물이다. + +| 기둥(법률) | 맡는 국면 | 핵심 관심사 | 한국법 대응(직관용) | +| --- | --- | --- | --- | +| Securities Act of 1933(1933년법) | 증권의 발행(1차 시장) | "팔기 전에 등록·공시했는가" | 자본시장법 증권신고서·공모 규제 | +| Securities Exchange Act of 1934(1934년법) | 증권의 유통·거래소·중개업자(2차 시장) | "유통시장이 공정한가 · 조작·사기가 없는가" | 자본시장법 유통시장·불공정거래 규제 | +| Investment Company Act of 1940(ICA) | 집합투자기구(펀드) 자체의 규율 | "펀드 구조가 투자자를 착취하지 않는가" | 자본시장법 집합투자(펀드) 규제 | +| Investment Advisers Act of 1940 | 투자자문업자 | "남의 돈을 굴려주는 자의 신인의무" | 자본시장법 투자자문·일임업 | + +본 부품(시장행위 감시 부품)은 두 번째 기둥, 즉 1934년법의 영역에서 나온다. 이 점이 중요하다. F-02는 "이 사람이 살 자격이 있는가"(A-13·A-03의 영역)나 "펀드가 등록 면제를 유지하는가"(D-01의 영역)를 보는 부품이 아니다. F-02가 답하는 질문은 오직 하나다 — "이 유통 거래·주문이 시장을 인위적으로 왜곡하는 조작·사기의 징후를 보이는가." 한국법으로 치면 자본시장법의 불공정거래(시세조종·부정거래) 규제에 대응한다. + +**쉽게 말하면:** 앞선 부품들이 "문 앞에서 신분증을 검사하는 경비원"이라면, F-02는 "장 안을 돌아다니며 수상한 거래를 지켜보는 감시 카메라"다. 경비원은 자격 없는 사람을 문에서 돌려보내지만, 감시 카메라는 사람을 붙잡지 않는다 — 이상 행동을 녹화해 관리자에게 넘길 뿐이다. F-02가 차단이 아니라 표시(flag)만 하는 근본 이유가 여기 있다(자세한 법리는 §8). + +### 1.2 왜 이 규제가 존재하는가 — 1920년대 pool·wash sale 스캔들과 1934년법 + +1934년법의 시세조종 금지(§9)와 반사기 금지(§10(b))는 진공에서 태어난 법이 아니다. 1929년 대공황 직전 미국 증권시장을 휩쓴 조작 관행의 직접적 산물이다. + +쉽게 말하면 이렇다. 1920년대 미국 주식시장에는 pool(작전 세력)이 횡행했다. 여러 투자자가 은밀히 뭉쳐 특정 종목을 서로 사고팔며 거래가 활발한 것처럼 꾸미고(painting the tape), 가격을 인위적으로 끌어올린 뒤(pump), 아무것도 모르는 일반 대중에게 떠넘기고 빠져나가는(dump) 수법이었다. 그 핵심 기법 두 가지가 오늘날 F-02가 감시하는 바로 그 행위다 — ① wash sale(자전거래): 같은 사람이 좌우 양손으로 자기 물량을 서로 매매해 거래가 활발한 듯한 착시를 만드는 것, ② matched order(통정매매): 여럿이 미리 짜고 같은 수량·시각·가격에 한쪽은 사고 한쪽은 파는 것. 둘 다 "실제로는 소유가 안 바뀌었거나 미리 짠 거래인데, 겉보기엔 활발한 시장"이라는 거짓 외관을 만든다. + +1934년 의회(Congress)의 결론은 이랬다 — "가격은 진짜 수요·공급이 만들어야 하고, 인위적으로 조작된 외관은 투자자를 속인다." 그래서 1934년법 §9는 이런 조작 기법을 열거해 금지했고, §10(b)는 그 열거에 빠진 새로운 사기 수법까지 포괄하는 catch-all(포괄 금지) 조항으로 만들어졌다. §10(b)의 하위 규칙인 Rule 10b-5는 오늘날 미국 증권 사기 집행의 중심축이다. + +여기서 F-02가 감시하는 세 번째 축이 등장한다 — spoofing(허수주문)·layering(호가 층 쌓기). 이건 20세기 pool 시절엔 없던, 전자거래 시대의 조작이다. 체결할 의사 없는 주문을 냈다가 취소해 마치 매수/매도 압력이 있는 것처럼 호가창을 꾸미고, 그 착시에 낚인 다른 참가자가 움직이면 반대편에서 진짜 이익을 챙기는 수법이다. spoofing이라는 용어 자체는 상품선물 규제(CEA, 7 U.S.C. §6c(a)(5)(C))가 2010년 Dodd-Frank로 처음 명문화했지만(§3.8), 증권 토큰에 대해서는 그 조문이 직접 적용되지 않고 §9(a)(2)(거짓 외관을 만드는 연속거래)와 §10(b)/Rule 10b-5(기망적 행위)로 규율된다. + +### 1.3 세 가지 금지행위 축 — F-02가 감시하는 것의 지도 + +F-02는 하나의 단일 규칙이 아니라, 성격이 다른 세 갈래 금지행위를 하나의 감시 부품으로 묶은 것이다. 각 갈래의 조문·핵심·입증 포인트를 먼저 지도로 깔면 §3 이하가 훨씬 잘 읽힌다. + +| 감시 축 | 조문 | 금지되는 것(한 줄) | 객관적으로 표시 가능한 신호 | 코드가 못 정하는 것 | +| --- | --- | --- | --- | --- | +| ① 자전거래(wash) | §9(a)(1)(A) | 소유가 바뀌지 않는 거래로 활발한 외관을 만드는 것 | 매수·매도 양측이 같은 실소유자(ONCHAINID)로 귀착 | "거짓 외관을 만들 목적"(chapeau) | +| ② 통정매매(matched) | §9(a)(1)(B)·(C) | 미리 짠 반대 주문을 알고 주문을 내는 것 | 같은 수량·시각·가격의 대향 주문이 동시 존재 | "미리 알고 있었다"(knowledge) | +| ③ 조작적 연속거래 | §9(a)(2) | 활발한 외관·가격 등락을 만들어 남의 매매를 유인 | 연속 패턴·비정상 취소율·호가 층 | "유인할 목적"(purpose) | +| ④ 허수·층 쌓기(spoof/layer) | §9(a)(2) + §10(b)/10b-5 | 체결 의사 없는 주문으로 호가창을 꾸미는 것 | 높은 취소율·짧은 주문 수명·편향된 depth | "취소할 의도로 냈다"(intent to cancel) | +| ⑤ 포괄 기망 | §10(b) · Rule 10b-5 | 증권 매매와 관련한 모든 기망적 device·행위 | (개별 사안별) | "기망의 고의"(scienter) | + +**쉽게 말하면:** ①②는 §9의 열거된 구체 금지(자전·통정), ③④는 §9(a)(2)의 "거짓 외관을 만드는 연속거래"에 얹혀 spoofing/layering까지 포섭, ⑤는 그 모든 것을 뒤에서 받치는 §10(b)/10b-5 포괄 금지다. 다섯 갈래 모두 오른쪽 두 칸이 핵심이다 — 왼쪽에서 두 번째 칸(객관적 신호)은 코드가 표시할 수 있지만, 맨 오른쪽 칸(고의·목적)은 코드가 판정할 수 없다. 이 구조가 F-02를 감시형(표시만)으로 만든다. + +**하나의 반복되는 요소 — scienter(고의).** 위 표의 맨 오른쪽 칸을 관통하는 개념이 scienter다. 미국 대법원은 Ernst & Ernst v. Hochfelder(1976)에서 §10(b)/Rule 10b-5 위반에는 "속이거나 조작하거나 사기하려는 의도(intent to deceive, manipulate, or defraud)"가 필요하다고 판시했다(§3.9). §9(a)(1)도 앞머리(chapeau)에 "거짓 외관을 만들 목적으로"를 두고 있고, §9(a)(2)도 "남의 매매를 유인할 목적으로"를 요건으로 한다. 즉 이 규제 전체가 마음속 상태(state of mind)를 요건으로 하며, 그것은 블록체인 이벤트만 보고 기계가 확정할 수 있는 게 아니다. F-02는 이 한계를 정직하게 받아들여, 마음을 추측하지 않고 객관적 신호만 표시한 뒤 판단을 사람에게 넘긴다. + +### 1.4 Decipher 시스템에서 왜 중요한가 — R4의 법률효과와 Existential Risk + +F-02는 Recipe-R4(시장행위 감시)의 핵심 부품이다. R4가 발생시키려는 법률효과는 "이 거래에 반사기·반조작(anti-fraud·anti-manipulation) 위반이 없다는 추정"이다. 다른 Recipe(R1 발행면제·R3 펀드면제)가 "등록/면제가 성립한다"는 적극적 효과를 만든다면, R4는 "위반이 없다"는 소극적·방어적 상태를 뒷받침한다. + +왜 이게 존재적 위험(existential risk)인가. 세 가지 이유가 있다. + +첫째, 조작·사기 금지는 면제할 수 없는 규율이다. §5 등록 면제(Reg D)나 §3(c)(7) 펀드 면제를 아무리 완벽히 갖춰도, §9·§10(b)의 반조작·반사기는 그와 무관하게 항상 적용된다. 면제는 "등록 의무"를 면제할 뿐, "속이지 말라"는 명령까지 면제하지 않는다. 그래서 F-02가 감시하는 영역은 다른 모든 부품이 완벽해도 여전히 남는 위험이다. + +둘째, 감시의 부재 자체가 위험을 만든다. venue(거래 장소)나 그 운영자가 조작 행위를 방치·조장하면, 조작 참가자와 별개로 venue·운영자 자신이 방조·부주의 책임에 노출될 수 있다. 특히 이 DEX가 Reg ATS(대체거래시스템)나 broker-dealer로 분류되는지가 미해결(§12)인데, 만약 그렇게 분류되면 시장 감시 의무가 규정상 부과된다. 어느 쪽이든 "감시 체계를 갖추고 있었다"는 사실은 방어의 토대가 된다. + +셋째, 과잉 차단도 위험이다. 만약 F-02를 게이트로 만들어 의심 패턴을 무조건 차단하면, 고의 없는 정당한 거래(예: 한 사람이 자기 지갑 간에 정당하게 자산을 옮기는 것)까지 막아 이용자에게 손해를 주고, 그 자체로 별도의 책임·분쟁을 만든다. 그래서 "표시하되 차단하지 않는" 설계가 법적으로도 옳다(§8). + +**요약.** F-02는 "막는 부품"이 아니라 "지켜보고 표시해 사람에게 넘기는 부품"이다. 그 표시가 정확하고 재현 가능하며, 처리 절차와 시한이 정해져 있고, 당사자에게 함부로 알리지 않는(non-tipping) 것 — 이 네 가지가 F-02 스펙의 뼈대다. + +## §2. 메타 정보 (Internal Identifier Box) + +아래는 Decipher 내부 PM 규약상의 식별자·분류값을 한곳에 모은 박스다. 본문에서는 이 코드들을 단독으로 쓰지 않고, "본 부품"·"시장행위 감시 부품" 같은 자연어로 부른다. 코드는 시스템 추적용으로만 여기 둔다. + +| 항목 | 값 | 한 줄 풀이 | +| --- | --- | --- | +| 부품 이름 | 시장행위 감시(Market-Surveillance) | 유통 거래·주문의 조작·사기 징후를 표시하는 감시원 | +| 검사 대상 | wash trade(§9(a)(1)(A)) · matched order(§9(a)(1)(B)·(C)) · 조작적 연속거래(§9(a)(2)) · spoofing/layering(§9(a)(2)+§10(b)/10b-5) · 포괄 기망(§10(b)/Rule 10b-5) | "이 거래·주문이 시장을 왜곡하는 조작·사기의 징후를 보이나" | +| Internal ID | F-02 (Decipher PM 규약) | 부품 일련번호 | +| 검증 방식 | 감시형(Pattern C) — 객관 신호 자동 표시 + 운영자 판단 | 차단하지 않고 flag를 만들어 검토 큐에 적재 | +| Timing | post-trade(체결·주문 이후 사후 관찰) | 거래를 막지 않는다. 이미 일어난 이벤트를 사후에 본다 | +| Stateful 여부 | STATEFUL | Router commit마다 flag ledger·의심 클러스터 상태·주문 이력 window를 갱신·누적한다 | +| 주 활성화 Recipe | R4(시장행위 감시, Layer 7) | 이 레시피가 본 부품을 부른다 | +| Cumulative Recipe | R1·R2·R3와 병렬 작동(모든 체결이 R4 post-trade commit을 거침) | 발행·재판매·펀드 어느 거래든 사후 감시 대상 | +| Cascade Element | A-04(신원중복 → 실소유 클러스터) · A-06(affiliate → insider trading 연결) · F-01(운영자 자기거래) · F-03(사기·의심거래 보고) · A-12(모름 항변 → 고의·red flag 요소) | 본 부품이 참조·연계하는 부품 | +| 성숙도 | ⚠ R-6 단계(데모 필수) | 데모에 필수, 탐지 기준 정밀화 후속 진행 중 | +| 파일·위치 | F-02_market-surveillance.md · 산출물/elements/ | 산출물 경로 | + +**A-13(게이트형)과의 결정적 차이 한 줄.** A-13은 pre-trade·STATELESS·차단형이다. F-02는 post-trade·STATEFUL·표시형이다. 세 축이 모두 반대다. 이 문서를 읽으며 "왜 A-13과 다르지?"라는 의문이 들면, 대개 이 세 축의 차이에서 답이 나온다 — 사후에 보고(post-trade), 상태를 누적하며(STATEFUL), 막지 않고 표시한다(flag). + +## §3. 법적 근거 — 어느 법이 무엇을 금지하는가 (Layer 1 → 2 → 3) + +> **이 절을 읽는 법.** 아래 각 소단원(§3.1~§3.9)은 하나의 조문·규칙·판례를 다룬다. 논리 흐름 순서(적용범위 전제 → 자전 → 통정 → 조작적 연속거래 → 포괄 catch-all → 실행규칙 → 대비·해석 판례)로 배열했고, 중요도순이 아니다. 각 블록은 여섯 칸으로 고정된다 — ① 조항(§3.X 헤더가 겸함) · ② 핵심 원문(영문 verbatim, 한 글자도 변형 없음) · ③ 한국어(직역) · ④ 쉬운 설명 · ⑤ 신호(FLAG) 반영 · ⑥ ERC-3643 변환. 다섯째 칸은 A-13 같은 게이트형 부품에서는 "PASS/FAIL 반영"이지만, 본 부품은 감시형(차단하지 않고 표시)이라 "신호(FLAG) 반영"으로 이름을 바꾼다 — 이 조문이 어떤 flag 신호를 만드는가, 그리고 코드가 판정할 수 없는 요건은 무엇인가를 적는다. + +아래 표의 종류 칸이 그대로 Layer에 대응한다 — Statute = Layer 1(제정법), SEC Rule = Layer 2(SEC 규칙), Case = Layer 3(판례). 본 부품의 근거는 Layer 1(1934년법 §9·§10(b))과 Layer 2(Rule 10b-5)에 집중되며, Layer 3(Hochfelder)은 그 요건인 scienter의 의미를 확정하는 해석 근거로 쓴다. + +### 3.0.1 적용범위 전제 — 왜 §9·§10(b)가 비상장 DEX 토큰에 적용되는가 + +본론 전에 반드시 넘어야 할 관문이 하나 있다. §9(a)는 역사적으로 "national securities exchange에 등록된 증권"에만 적용됐다. 우리 DEX 토큰은 거래소에 등록돼 있지 않은 사모펀드 지분이다. 그렇다면 §9(a)가 애초에 적용되기는 하는가? + +결론부터: 적용된다. 세 단계로 확인된다. + +첫째, 2010년 Dodd-Frank(Pub. L. 111-203)가 적용범위를 넓혔다. §929L(1)(A)는 §9(a) 전반에서 "registered on a national securities exchange"라는 문구를 "other than a government security"로 교체했다("wherever appearing"). 그 결과 §9(a)(1)의 자전거래·통정매매는 이제 "정부증권을 제외한 모든 증권"에 적용된다. §9(a)(2)는 §762(d)(2)(A)로 전면 개정되면서 문언 자체에 "any security registered on a national securities exchange, any security not so registered"(등록 증권이든 비등록 증권이든)를 명시했다. 즉 비상장 증권은 §9(a)(1)·(2) 양쪽에 명문으로 포섭된다. + +둘째, §10(b)는 처음부터 더 넓다. 조문이 "any security registered on a national securities exchange or any security not so registered"라고 등록·비등록을 나란히 적어, 비상장 증권을 정면으로 포함한다. 그 실행규칙 Rule 10b-5는 "any security"(모든 증권)에 적용된다. §10(b)/10b-5는 §9에 열거되지 않은 새 사기 수법까지 받는 catch-all이므로, §9의 적용 여부와 무관하게 항상 뒤를 받친다. + +셋째, 관할 연결점(jurisdictional nexus)도 충족된다. §9(a)·§10(b)·Rule 10b-5 모두 "means or instrumentality of interstate commerce"(주간 통상의 수단·도구)의 사용을 요건으로 한다. 인터넷과 블록체인 네트워크를 통한 거래는 이 요건을 손쉽게 충족한다. + +한 가지 예외 카테고리만 짚어 둔다 — §9(g)는 "subsection (a)의 규정은 exempted security(면제증권)에는 적용되지 않는다"고 한다. 면제증권은 §3(a)(12)에 정의되며 정부증권·지방채 등을 말한다. 우리 토큰(사모펀드 지분)은 면제증권이 아니므로 이 예외에 걸리지 않는다. + +쉽게 말하면: "거래소에 상장 안 됐으니 시세조종법도 안 걸리겠지"는 2010년 이전의 낡은 상식이다. Dodd-Frank 이후로는 정부증권만 아니면 자전·통정·조작적 연속거래 금지가 다 걸리고, 포괄 사기금지(§10(b)/10b-5)는 애초부터 상장 여부를 안 가린다. 그래서 F-02는 "우리 토큰이 비상장이라 감시가 필요 없다"가 아니라 "비상장이어도 감시 대상"이라는 전제 위에 선다. + +### 3.0.2 근거의 두 지도 + +표 1 (Authority — 무엇이 근거인가): + +| 종류 | Authority | 내용 | F-02 관련성 | Direct/Supporting | Official URL | +| --- | --- | --- | --- | --- | --- | +| Statute | Exchange Act §9(a) chapeau · §9(g) | 시세조종 금지의 적용범위·관할·면제증권 예외 | 적용범위 전제 | Direct | uscode.house.gov / govinfo USCODE-2011-title15-sec78i | +| Statute | Exchange Act §9(a)(1)(A) | 소유 무변동 거래(자전거래) 금지 | 자전 신호 정의 | Direct | 위와 같음 | +| Statute | Exchange Act §9(a)(1)(B) | 매수측 통정 주문 금지 | 통정 신호(매수) 정의 | Direct | 위와 같음 | +| Statute | Exchange Act §9(a)(1)(C) | 매도측 통정 주문 금지 | 통정 신호(매도) 정의 | Direct | 위와 같음 | +| Statute | Exchange Act §9(a)(2) | 조작적 연속거래(거짓 외관·가격조작 유인) 금지 | 연속거래·spoof/layer 신호 정의 | Direct | 위와 같음 | +| Statute | Exchange Act §10(b) | 매매 관련 조작·기망 device의 포괄 금지 | catch-all 근거 | Direct | uscode.house.gov USC-prelim-title15-sec78j | +| SEC Rule | Rule 10b-5 (17 CFR §240.10b-5) | §10(b) 실행규칙 — 기망 scheme·부실표시·기망적 행위 | 포괄 신호 근거 | Direct | ecfr.gov title-17 §240.10b-5 | +| Statute | CEA §4c(a)(5)(C) (7 U.S.C. §6c(a)(5)(C)) | 상품법의 명문 spoofing 정의 | 대비·객관기준 참고 | Background | uscode.house.gov USC-prelim-title7-sec6c | +| Case | Ernst & Ernst v. Hochfelder, 425 U.S. 185 (1976) | §10(b)/10b-5 위반의 scienter 요건 확정 | 감시형 설계의 판례 근거 | Supporting | govinfo USREPORTS-425-185 | + +표 2 (순서·중요성 — 각 조문으로 F-02가 하는 일): + +| 순서 | 조문 | 중요성 | F-02가 그걸로 하는 일 | +| --- | --- | --- | --- | +| §3.1 | §9(a) chapeau·§9(g) | 필수(전제) | 적용범위·관할·면제 예외 확정 — 감시가 legally 의미 있는 이유 | +| §3.2 | §9(a)(1)(A) | 필수 | 자전거래 신호(WASH_SAME_OWNER)의 법적 정의 | +| §3.3 | §9(a)(1)(B) | 필수 | 통정 매수주문 신호(MATCHED_ORDER)의 법적 정의 | +| §3.4 | §9(a)(1)(C) | 필수 | 통정 매도주문 신호(MATCHED_ORDER)의 법적 정의 | +| §3.5 | §9(a)(2) | 필수 | 조작적 연속거래·spoof/layer 신호(MANIPULATIVE_SERIES·SPOOF_LAYER) 정의 | +| §3.6 | §10(b) | 필수 | 열거 밖 기망을 받는 catch-all 신호(FRAUD_OTHER)의 상위 근거 | +| §3.7 | Rule 10b-5 | 필수 | catch-all 신호의 구체 요건(defraud·오인·기망적 행위) | +| §3.8 | CEA §6c(a)(5)(C) | 참고 | "무엇을 표시할지"의 객관 기준(취소 의도 주문)을 상품법 정의에서 차용 | +| §3.9 | Hochfelder | 보강 | scienter=마음속 상태 → 코드 판정 불가 → 감시형(표시)이어야 함의 근거 | + +아래 그림은 이 절 전체의 논리 — 어느 조문이 어느 객관 신호로 이어지고, 왜 scienter 관문에서 차단이 아니라 표시로 귀결되는지 — 를 한 장으로 요약한다. + +![F-02 조문→신호 논리 흐름 (fig30)](F-02_fig30.png) + +### 3.1 §9(a) chapeau 및 §9(g) — 적용범위·관할·면제 예외 + +1. 조항 — Securities Exchange Act §9(a) 서두 및 §9(g), 15 U.S.C. §78i(a)·(g). 출처: govinfo USCODE-2011-title15-chap2B-sec78i. + +2. 핵심 원문 (verbatim): +> It shall be unlawful for any person, directly or indirectly, by the use of the mails or any means or instrumentality of interstate commerce, or of any facility of any national securities exchange, or for any member of a national securities exchange— + +> The provisions of subsection (a) of this section shall not apply to an exempted security. + +3. 한국어 (직역): "누구든지, 직접 또는 간접으로, 우편 또는 주간(州間) 통상의 수단·도구, 또는 전국증권거래소의 설비를 사용하여, 또는 전국증권거래소 회원으로서 다음의 행위를 하는 것은 위법이다—" / "본 조 (a)항의 규정은 면제증권에는 적용되지 아니한다." + +4. 쉬운 설명: 이 서두는 §9(a)의 모든 금지행위에 공통으로 붙는 관할 조건이다. "우편이나 주간 통상의 수단"을 쓰면 걸린다는 뜻인데, 인터넷·블록체인이 바로 그 "주간 통상의 수단"이므로 온라인 DEX 거래는 자동으로 이 관문을 통과한다. §9(g)는 유일한 문 밖 카테고리 — 정부증권 같은 면제증권만 §9(a)를 피한다. 우리 토큰은 면제증권이 아니라서 피하지 못한다. + +5. 신호(FLAG) 반영: 간접 ○ — 이 조항 자체는 특정 flag를 만들지 않는다. 대신 "F-02의 감시가 법적으로 유효한가"라는 선행조건을 확정한다. 이 전제가 무너지면(예: 면제증권) F-02의 신호는 법적 의미를 잃는다. 근거: DEX 토큰은 비면제·비상장 증권 + interstate commerce nexus 충족. + +6. ERC-3643 변환: 부품 활성화 게이트가 아니라 Compliance 모듈의 감시 대상 여부 판정. `surveillanceApplicable = true` (assetManifest.securityType ≠ EXEMPTED && jurisdictionNexus == INTERSTATE_COMMERCE). 이 플래그가 false면 F-02 감시 모듈은 no-op. + +### 3.2 §9(a)(1)(A) — 자전거래(소유 무변동 거래) + +1. 조항 — Exchange Act §9(a)(1)(A), 15 U.S.C. §78i(a)(1)(A). + +2. 핵심 원문 (verbatim): +> For the purpose of creating a false or misleading appearance of active trading in any security other than a government security, or a false or misleading appearance with respect to the market for any such security, (A) to effect any transaction in such security which involves no change in the beneficial ownership thereof + +3. 한국어 (직역): "정부증권을 제외한 모든 증권에 관하여 활발한 거래의 거짓 또는 오인을 일으키는 외관, 또는 그러한 증권의 시장에 관한 거짓 또는 오인을 일으키는 외관을 만들 목적으로, (A) 그 증권에서 수익적 소유권의 변동을 수반하지 아니하는 거래를 실행하는 것". + +4. 쉬운 설명: 자전거래(wash sale)의 정의다. 한 사람(또는 같은 실소유자)이 자기 물량을 좌우 양손으로 서로 사고팔면, 소유는 실제로 바뀌지 않았는데도 거래량은 늘어난다. 그러면 "이 종목 거래가 활발하구나"라는 착시가 생겨 다른 투자자를 속인다. 핵심 표지는 두 개다 — (i) 수익적 소유권의 변동이 없을 것(no change in beneficial ownership), (ii) 거짓 외관을 만들 목적일 것(for the purpose of...). (i)은 객관적으로 관측 가능하지만, (ii)는 마음속 목적이라 코드가 확정할 수 없다. + +5. 신호(FLAG) 반영: 직접 ○ — flag.basis = WASH_SAME_OWNER. 코드가 표시하는 객관 신호: 매수측 지갑과 매도측 지갑이 A-04의 실소유 클러스터 판정상 같은 ONCHAINID(같은 실소유자)로 귀착. 코드가 판정 못하는 것: "거짓 외관을 만들 목적"(chapeau의 purpose) — 정당한 자기 지갑 간 이전과 조작 목적 자전은 온체인 이벤트만으로 구별 불가. 따라서 차단하지 않고 표시만 한다. + +6. ERC-3643 변환: `flag.basis = WASH_SAME_OWNER`; 입력 = `A-04.beneficialOwnerCluster(buyer.onchainId) == A-04.beneficialOwnerCluster(seller.onchainId)`; 산출 = onchain event `SurveillanceFlag(txId, WASH_SAME_OWNER)` + off-chain 검토 큐 적재. 체결(transfer) 자체는 `canTransfer == true`로 진행(차단 없음). + +### 3.3 §9(a)(1)(B) — 통정매매(매수측 주문) + +1. 조항 — Exchange Act §9(a)(1)(B), 15 U.S.C. §78i(a)(1)(B). + +2. 핵심 원문 (verbatim): +> (B) to enter an order or orders for the purchase of such security with the knowledge that an order or orders of substantially the same size, at substantially the same time, and at substantially the same price, for the sale of any such security, has been or will be entered by or for the same or different parties + +3. 한국어 (직역): "(B) 실질적으로 같은 수량, 실질적으로 같은 시각, 실질적으로 같은 가격의 매도 주문이 동일 또는 상이한 당사자에 의하여 또는 그를 위하여 이미 제출되었거나 제출될 것이라는 것을 알면서 그 증권의 매수 주문을 제출하는 것". + +4. 쉬운 설명: 통정매매(matched order)의 매수측 정의다. 자전거래는 "같은 사람"이지만, 통정매매는 "미리 짠 여럿"이다. 갑이 판다는 것을 알고 을이 같은 수량·시각·가격으로 사면, 겉보기엔 독립된 두 거래 같지만 실은 짜고 친 한 판이다. 핵심 표지: (i) 실질적으로 동일한 크기·시각·가격의 반대 주문 존재, (ii) 그것을 알고 있었을 것(with the knowledge). (ii)의 "알고 있었다"가 마음속 상태라 코드가 확정 못한다. + +5. 신호(FLAG) 반영: 직접 ○ — flag.basis = MATCHED_ORDER. 코드가 표시하는 객관 신호: 실질적으로 동일한 size·time·price의 대향(매수↔매도) 주문/RFQ 응답이 짝을 이루어 체결. 코드가 판정 못하는 것: "미리 알고 있었다"(knowledge)의 통정 — 우연의 일치와 사전 공모를 이벤트만으로 구별 불가. + +6. ERC-3643 변환: `flag.basis = MATCHED_ORDER`; 신호 조건 = `abs(buyOrder.size - sellOrder.size) ≤ τ_size && abs(Δt) ≤ τ_time && abs(Δprice) ≤ τ_price` (임계 τ는 §5.3); 산출 = `SurveillanceFlag(txId, MATCHED_ORDER)` + 큐. RFQ 아키텍처(B-04)에서는 "대향 주문"이 RFQ 요청과 마켓메이커 응답의 사전 조율 형태로 나타남. + +### 3.4 §9(a)(1)(C) — 통정매매(매도측 주문) + +1. 조항 — Exchange Act §9(a)(1)(C), 15 U.S.C. §78i(a)(1)(C). + +2. 핵심 원문 (verbatim): +> (C) to enter any order or orders for the sale of any such security with the knowledge that an order or orders of substantially the same size, at substantially the same time, and at substantially the same price, for the purchase of such security, has been or will be entered by or for the same or different parties. + +3. 한국어 (직역): "(C) 실질적으로 같은 수량, 실질적으로 같은 시각, 실질적으로 같은 가격의 매수 주문이 동일 또는 상이한 당사자에 의하여 또는 그를 위하여 이미 제출되었거나 제출될 것이라는 것을 알면서 그 증권의 매도 주문을 제출하는 것." + +4. 쉬운 설명: §9(a)(1)(B)의 거울상이다. (B)는 매수측에서, (C)는 매도측에서 같은 통정을 금지한다. 짜고 친 거래는 사는 쪽·파는 쪽 어디서 봐도 위법이라는 것을 명확히 하려고 조문을 양방향으로 둔 것이다. 표지는 (B)와 동일하다. + +5. 신호(FLAG) 반영: 직접 ○ — flag.basis = MATCHED_ORDER(동일 신호, 매도측 관점). (B)와 (C)는 하나의 대향 짝을 각각의 방향에서 규율하므로, 코드는 한 쌍이 매칭되면 단일 MATCHED_ORDER flag를 만든다(중복 계상 금지). 코드가 판정 못하는 것: (B)와 동일한 knowledge. + +6. ERC-3643 변환: (B)와 동일 신호 경로. 구현상 하나의 매칭 이벤트에 대해 flag 1건만 적재(매수·매도 양측을 이중으로 세지 않음). `flag.basis = MATCHED_ORDER`. + +### 3.5 §9(a)(2) — 조작적 연속거래 및 spoofing/layering + +1. 조항 — Exchange Act §9(a)(2), 15 U.S.C. §78i(a)(2). + +2. 핵심 원문 (verbatim): +> To effect, alone or with 1 or more other persons, a series of transactions in any security registered on a national securities exchange, any security not so registered, or in connection with any security-based swap or security-based swap agreement with respect to such security creating actual or apparent active trading in such security, or raising or depressing the price of such security, for the purpose of inducing the purchase or sale of such security by others. + +3. 한국어 (직역): "단독으로 또는 1인 이상의 타인과 함께, 전국증권거래소에 등록된 증권, 등록되지 아니한 증권, 또는 그 증권에 관한 증권기반스왑·증권기반스왑계약과 관련하여, 그 증권에 실제 또는 외관상의 활발한 거래를 일으키거나 그 증권의 가격을 상승 또는 하락시키는 일련의 거래를, 타인의 매수 또는 매도를 유인할 목적으로 실행하는 것." + +4. 쉬운 설명: 이 조항이 F-02에서 가장 넓다. §9(a)(1)이 개별 행위(자전·통정)를 콕 집었다면, §9(a)(2)는 "일련의 거래(series)"로 (i) 활발한 외관을 만들거나 (ii) 가격을 올리고 내리는 것을 — 남을 유인할 목적으로 — 금지한다. 등록·비등록을 문언에 명시해 우리 토큰을 확실히 포함한다. spoofing(허수주문)과 layering(호가 층 쌓기)이 여기 얹힌다: 체결 의사 없는 주문을 냈다 취소해 "매수/매도 압력이 있다"는 외관·가격 변동을 만들면, 그것이 바로 "외관상 활발한 거래" 또는 "가격 상승·하락" 유인이다. 다만 주의 — spoofing/layering은 "취소할 수 있는 호가가 호가창에 노출되는 구조"를 전제로 한다(§3.8, §12). + +5. 신호(FLAG) 반영: 직접 ○ — 두 flag로 분기. (i) flag.basis = MANIPULATIVE_SERIES: 같은 실소유 클러스터·연계 참가자의 반복 거래가 짧은 시간에 거래량/가격을 비정상적으로 밀어올림. (ii) flag.basis = SPOOF_LAYER: 높은 주문 취소율·짧은 주문 수명·한쪽으로 치우친 호가 depth. 코드가 판정 못하는 것: "유인할 목적"(purpose of inducing) 및 spoof의 "취소 의도"(intent to cancel) — 마음속 목적/의도라 확정 불가. + +6. ERC-3643 변환: `flag.basis ∈ {MANIPULATIVE_SERIES, SPOOF_LAYER}`; MANIPULATIVE_SERIES 신호 = rolling window 내 동일/연계 클러스터의 거래 빈도·가격 임팩트가 임계 초과; SPOOF_LAYER 신호 = `cancelRate > τ_cancel && medianOrderLife < τ_life && depthImbalance > τ_depth`(임계 §5.3). 아키텍처 주의: 현재 B-04가 확정한 엔진 집합은 RFQ 단일(NO_GS_ENGINE_SET = {RFQ})이라 공개 호가창(resting limit order book)이 없다 → SPOOF_LAYER 신호는 현행 구조에서 대체로 휴면(dormant), 향후 order-book 엔진 도입 시 활성화. MANIPULATIVE_SERIES는 RFQ에서도 유효(연속 RFQ 체결로 가격·거래량 왜곡 가능). + +### 3.6 §10(b) — 조작·기망 device의 포괄 금지 + +1. 조항 — Exchange Act §10(b), 15 U.S.C. §78j(b). + +2. 핵심 원문 (verbatim): +> To use or employ, in connection with the purchase or sale of any security registered on a national securities exchange or any security not so registered, or any securities-based swap agreement any manipulative or deceptive device or contrivance in contravention of such rules and regulations as the Commission may prescribe as necessary or appropriate in the public interest or for the protection of investors. + +3. 한국어 (직역): "전국증권거래소에 등록된 증권 또는 등록되지 아니한 증권, 또는 증권기반스왑계약의 매수 또는 매도와 관련하여, 위원회가 공익 또는 투자자 보호를 위하여 필요하거나 적절하다고 정하는 규칙·규정에 위반하여 조작적 또는 기망적 device나 contrivance를 사용하거나 이용하는 것." + +4. 쉬운 설명: §9가 구체 기법을 열거했다면, §10(b)는 "매매와 관련한 조작·기망 수단이면 뭐든" 금지하는 포괄 조항(catch-all)이다. "등록된 증권 또는 등록되지 않은 증권"을 나란히 적어 비상장 우리 토큰을 정면으로 포함한다. 단, §10(b)는 스스로 완결되지 않고 "위원회가 정하는 규칙에 위반하여"를 요건으로 한다 — 그 규칙이 바로 Rule 10b-5다(§3.7). 즉 §10(b)는 권한 부여, Rule 10b-5는 실제 금지 문언. + +5. 신호(FLAG) 반영: 직접 ○(상위 근거) — flag.basis = FRAUD_OTHER의 법적 뿌리. §9의 다섯 유형(WASH·MATCHED·SERIES·SPOOF)에 딱 들어맞지 않는 기망 패턴을 받는 잔여 카테고리의 상위 근거. 구체 요건은 Rule 10b-5에서 온다. 코드가 판정 못하는 것: scienter(§3.9). + +6. ERC-3643 변환: 독립 flag를 직접 만들지 않고, Rule 10b-5(§3.7)의 (a)/(b)/(c) 요건을 통해 `flag.basis = FRAUD_OTHER`로 구체화. 모듈 관점에서는 "열거 외 기망 신호"를 담는 확장 훅(extensibility hook). + +### 3.7 Rule 10b-5 — §10(b)의 실행규칙 + +1. 조항 — Rule 10b-5, 17 CFR §240.10b-5. 출처: ecfr.gov title-17 §240.10b-5. + +2. 핵심 원문 (verbatim): +> It shall be unlawful for any person, directly or indirectly, by the use of any means or instrumentality of interstate commerce, or of the mails or of any facility of any national securities exchange, +> (a) To employ any device, scheme, or artifice to defraud, +> (b) To make any untrue statement of a material fact or to omit to state a material fact necessary in order to make the statements made, in the light of the circumstances under which they were made, not misleading, or +> (c) To engage in any act, practice, or course of business which operates or would operate as a fraud or deceit upon any person, +> in connection with the purchase or sale of any security. + +3. 한국어 (직역): "누구든지, 직접 또는 간접으로, 주간 통상의 수단·도구, 우편, 또는 전국증권거래소의 설비를 사용하여, (a) 사기하기 위한 device·scheme·artifice를 사용하는 것, (b) 중요한 사실에 관한 부실표시를 하거나, 진술이 이루어진 상황에 비추어 오인을 피하기 위하여 필요한 중요한 사실의 진술을 누락하는 것, 또는 (c) 누구에게든 사기 또는 기망으로 작용하거나 작용하게 될 행위·관행·업무 과정에 관여하는 것을, 증권의 매수 또는 매도와 관련하여 하는 것은 위법이다." + +4. 쉬운 설명: 미국 증권사기 집행의 중심 조문이다. 세 갈래로 금지한다 — (a) 사기 계획·수단, (b) 중요사실의 거짓·누락, (c) 사기로 작용하는 행위·업무 과정. F-02 맥락에서 조작적 거래는 주로 (a)와 (c)에 해당한다(시장을 속이는 계획·행위). "in connection with the purchase or sale of any security"(모든 증권의 매매와 관련) 문구가 적용 범위를 최대한 넓힌다. 판례상 이 규칙 위반에는 scienter(고의)가 필요하다(§3.9). + +5. 신호(FLAG) 반영: 직접 ○ — flag.basis = FRAUD_OTHER의 구체 요건. §9 유형에 안 맞는 기망적 거래 관행(예: 특정 시점 가격을 인위적으로 만드는 marking, 허위 정보와 결합된 거래 등)을 (a)·(c)의 "사기 계획·사기로 작용하는 행위"로 표시. 코드가 판정 못하는 것: "defraud"의 고의(scienter)와 "material fact"의 중요성 판단. + +6. ERC-3643 변환: `flag.basis = FRAUD_OTHER`; 트리거 = 열거 신호(WASH·MATCHED·SERIES·SPOOF) 밖의 이상 패턴이 (a) 기망 scheme 또는 (c) 기망적 course of business로 의심될 때. 실무상 이 flag는 규칙 기반 자동 표시보다 운영자·감시엔진의 재량 표시 비중이 큼(§11). + +### 3.8 CEA §4c(a)(5)(C) — 상품법의 명문 spoofing 정의 (대비·참고) + +1. 조항 — Commodity Exchange Act §4c(a)(5)(C), 7 U.S.C. §6c(a)(5)(C). 출처: uscode.house.gov USC-prelim-title7-sec6c / govinfo. (Dodd-Frank §747, 2010 신설.) + +2. 핵심 원문 (verbatim): +> It shall be unlawful for any person to engage in any trading, practice, or conduct on or subject to the rules of a registered entity that— + +> (C) is, is of the character of, or is commonly known to the trade as, "spoofing" (bidding or offering with the intent to cancel the bid or offer before execution). + +3. 한국어 (직역): "누구든지 등록실체(registered entity)의 규칙상 또는 그 규칙의 적용을 받는 거래·관행·행위로서 다음에 해당하는 것을 하는 것은 위법이다— (C) '스푸핑'(체결 전에 취소할 의도로 매수·매도 호가를 제출하는 것)에 해당하거나, 그 성질을 가지거나, 거래계에서 통상 그렇게 알려진 것." + +4. 쉬운 설명: 왜 상품법을 여기 두는가? "spoofing"이라는 용어와 정의가 명문으로 적힌 곳은 증권법이 아니라 상품선물법(CEA)이기 때문이다. 증권법에는 "spoofing"이라는 단어가 없다 — 증권 토큰의 허수주문은 §9(a)(2)의 "거짓 외관 연속거래"와 §10(b)/10b-5의 "기망"으로 규율된다. 그래서 이 조문은 우리 토큰에 직접 적용되지 않는다(Background 태그). 다만 그 정의("체결 전 취소 의도로 호가 제출")는 F-02가 "무엇을 객관 신호로 표시할지"를 정할 때 유용한 기준선이 된다. 선도 판례 United States v. Coscia, 866 F.3d 782 (7th Cir. 2017)는 이 반spoofing 조항이 위헌적으로 모호하지 않고 금지행위를 충분히 고지한다고 보아 유죄를 인용했다 — 즉 "취소 의도 호가"라는 표지가 사법적으로 작동 가능함을 확인한 사례다. + +5. 신호(FLAG) 반영: 간접(참고) — 이 조문은 DEX 토큰에 직접 flag를 만들지 않는다. 대신 SPOOF_LAYER 신호의 객관 표지 설계에 정의를 차용한다("취소 의도" 대리지표 = 높은 취소율·짧은 주문 수명). 코드가 판정 못하는 것: CFTC 해석지침조차 §4c(a)(5)(C) 위반에 "recklessness를 넘는 어느 정도의 고의(scienter)"를 요구한다 — 여기서도 마음속 상태가 요건. + +6. ERC-3643 변환: 신호 정의 참고자료로만 사용. `SPOOF_LAYER` 신호의 파라미터 문서에 근거 주석(reference)으로 인용. 코드 경로에 직접 매핑되는 claim/flag basis 없음. + +### 3.9 Ernst & Ernst v. Hochfelder — scienter 요건 (Layer 3) + +1. 조항 — Ernst & Ernst v. Hochfelder, 425 U.S. 185 (1976). 출처: govinfo USREPORTS-425-185. + +2. 핵심 원문 (verbatim, Syllabus 및 n.12): +> A private cause of action for damages will not lie under § 10(b) and Rule 10b-5 in the absence of any allegation of "scienter," i.e., intent to deceive, manipulate, or defraud on the defendant's part. + +> In this opinion the term "scienter" refers to a mental state embracing intent to deceive, manipulate, or defraud. + +3. 한국어 (직역): "피고 측에 '사이엔터'(scienter), 즉 기망·조작·사기의 의도가 있었다는 주장이 없는 한, §10(b) 및 Rule 10b-5에 근거한 손해배상 사적 청구는 성립하지 아니한다." / "본 판결에서 '사이엔터'라는 용어는 기망·조작·사기의 의도를 포함하는 마음속 상태(mental state)를 가리킨다." + +4. 쉬운 설명: 이 판결이 F-02 설계의 법적 뿌리다. 대법원은 §10(b)/Rule 10b-5 위반에는 과실(negligence)로는 부족하고 "속이거나 조작하거나 사기하려는 의도"(scienter)가 필요하다고 확정했다. 그리고 "manipulative"라는 단어 자체가 "가격을 인위적으로 통제·왜곡해 투자자를 속이려는 의도적·고의적 행위"를 뜻하는 시장 용어라고 했다. 결론: 조작·사기 위반의 성립은 마음속 상태에 달려 있다. 그런데 마음속 상태는 블록체인 이벤트만 보고 기계가 확정할 수 없다. 그래서 F-02는 마음을 추측해 차단하는 대신, 객관 신호만 표시하고 고의 판단은 사람에게 넘긴다. + +5. 신호(FLAG) 반영: 보강(설계 근거) — 이 판례는 특정 flag를 만들지 않는다. F-02의 근본 아키텍처(감시형·표시형)를 정당화한다. 만약 F-02를 게이트(차단)로 만들면, 코드가 사실상 scienter를 자체 판정하는 셈이 되어 (a) 판정 불가능한 것을 판정하는 척하게 되고 (b) 고의 없는 정당 거래를 오차단하게 된다. + +6. ERC-3643 변환: 코드 경로에 매핑되는 basis 없음. 대신 모든 flag 신호에 공통 메타 필드 `judgmentRequired = true`(고의는 운영자 판정 대상), `autoBlock = false`(자동 차단 금지)를 부여하는 설계 원칙의 근거. + +### 3.10 신호(FLAG) 분해 매트릭스 — 모든 표시 경로 (§5 분기와 1:1) + +아래 표는 F-02가 만들 수 있는 모든 flag 경로를 한 행씩 정리한 것으로, §5.2의 감시 순서 분기와 1:1 대응한다. 게이트형 부품의 "PASS/FAIL 경로"에 해당하는 것이 감시형에서는 "표시(FLAG)/무표시(CLEAR) 경로"다. + +| # | flag.basis | 근거 조문 | 코드가 표시하는 객관 신호 | 코드가 판정 못하는 것(→ 운영자) | 현행 아키텍처 활성 여부 | +| --- | --- | --- | --- | --- | --- | +| 1 | WASH_SAME_OWNER | §9(a)(1)(A) | 매수·매도 지갑이 A-04상 동일 실소유 클러스터 | "거짓 외관 목적"(purpose) | 활성 | +| 2 | MATCHED_ORDER | §9(a)(1)(B)·(C) | 동일 size·time·price 대향 주문/RFQ 짝 체결 | "미리 알고 있었다"(knowledge) | 활성(RFQ 형태) | +| 3 | MANIPULATIVE_SERIES | §9(a)(2) | 연계 클러스터의 반복거래가 거래량·가격 비정상 임팩트 | "유인할 목적"(purpose of inducing) | 활성 | +| 4 | SPOOF_LAYER | §9(a)(2)+§10(b)/10b-5 | 높은 취소율·짧은 주문수명·편향 depth | "취소 의도"(intent to cancel) | 휴면(order-book 엔진 도입 시 활성) | +| 5 | FRAUD_OTHER | §10(b)/Rule 10b-5 | 열거 밖 이상 패턴(예: marking, 허위정보 결합) | scienter(기망 고의)·material 판단 | 활성(재량 표시 비중 큼) | +| — | CLEAR | (해당 없음) | 위 어느 신호도 임계 미달 | (판정 불요) | 기본값 | + +핵심 규율: 어느 행에서도 산출은 "차단"이 아니라 "표시 + 체결 진행"이다. flag는 boolean 신호이고, 위반 여부(고의 포함)의 최종 판단은 운영자·감시엔진·규제당국의 몫이다(§8·§10·§11). + +### 3.11 ERC-3643 / T-REX 매핑 총정리 + +F-02는 자격 게이트가 아니라 사후 감시 모듈이므로, A-13류의 `claim.basis`(발급된 자격 증명) 대신 `flag.basis`(사후 표시 신호)를 산출한다. 매핑의 성격이 근본적으로 다르다 — claim은 pre-trade에 신원지갑에서 조회하는 자격, flag는 post-trade에 Router commit이 생성하는 상태 이벤트다. + +| 구분 | A-13 게이트형(대비) | F-02 감시형 | +| --- | --- | --- | +| 산출 기본 단위 | claim.basis (6종 자격) | flag.basis (5종 신호 + CLEAR) | +| 검사 시점 | pre-trade (transfer 전) | post-trade (Router commit 후) | +| transfer 영향 | canTransfer=false면 차단(revert) | canTransfer 불변(항상 진행), 별도 flag event | +| 상태성 | STATELESS | STATEFUL (flag ledger·rolling window·cluster 이력) | +| ONCHAINID 사용 | 자격 claim 조회 | A-04 실소유 클러스터 참조(자전·연속거래 판정 입력) | +| 온체인/오프체인 | 온체인 claim 검증 | 온체인 flag event만, 통계 계산은 오프체인 | +| forcedTransfer/recovery | (미사용) | (미사용 — 차단 안 함; 사후 시정은 별도 거버넌스) | + +flag.basis 표준 값(5종, 섹션 간 통일): +- WASH_SAME_OWNER (§9(a)(1)(A)) +- MATCHED_ORDER (§9(a)(1)(B)·(C)) +- MANIPULATIVE_SERIES (§9(a)(2)) +- SPOOF_LAYER (§9(a)(2)+§10(b)/10b-5; 현행 휴면) +- FRAUD_OTHER (§10(b)/Rule 10b-5) + +공통 메타 필드(모든 flag 공통): `autoBlock = false`, `judgmentRequired = true`, `nonTipping = true`(§3.9·§6.4 근거). + +## §4. 입력 사실 — 무엇을 보고 판단하는가 + +> **왜 입력부터 못박나.** 감시형 부품의 정확성은 "무엇을 관측하는가"에서 90%가 결정된다. 관측 대상 이벤트·필드가 흐릿하면 신호가 재현 불가능해지고, 재현 불가능한 flag는 규제 방어에서 무용지물이다(오히려 자의적 감시라는 역공을 부른다). 그래서 이 절은 F-02가 읽는 이벤트 스트림·데이터 필드·수집 경로·신호별 필수 항목을 남김없이 표로 고정한다. + +### 4.1 관측 대상 — post-trade 이벤트 스트림 + +F-02는 거래를 막지 않으므로, pre-trade 게이트처럼 "허가 요청"을 받지 않는다. 대신 이미 일어난 이벤트를 사후에 관측한다. 관측 대상은 두 계층이다: + +첫째, 온체인 확정 이벤트 — Router가 transfer를 commit할 때 발생하는 체결 로그(누가·무엇을·얼마에·언제 샀는가). 이것이 자전(WASH)·통정(MATCHED)·연속거래(SERIES) 판정의 1차 입력이다. + +둘째, 오프체인 주문·호가 이벤트 — RFQ 요청·마켓메이커 응답·주문 제출·주문 취소 등. 이것이 통정(대향 주문 짝)·spoof/layer(취소율·주문 수명) 판정의 입력이다. 현행 B-04 아키텍처(RFQ 단일)에서는 공개 호가창이 없어 취소 기반 신호의 입력이 제한적이다(§3.5·§12). + +### 4.2 읽는 데이터 필드 + +| 필드 | 출처 | 타입 | F-02에서의 용도 | +| --- | --- | --- | --- | +| txId | 온체인 체결 로그 | bytes32 | flag 이벤트의 앵커 키 | +| buyer.onchainId | Identity Registry | address/ID | A-04 클러스터 조회 키(매수측) | +| seller.onchainId | Identity Registry | address/ID | A-04 클러스터 조회 키(매도측) | +| beneficialOwnerCluster | A-04 산출 | clusterId | 자전·연속거래의 "같은 실소유자" 판정 | +| size | 체결 로그 | uint | 통정 매칭·연속거래 임팩트 계산 | +| price | 체결 로그 | uint | 통정 매칭·가격 임팩트 계산 | +| timestamp | 체결 로그 | uint | 대향 주문 시각 근접성·window 계산 | +| orderId | 오프체인 주문 로그 | id | 주문·취소 짝지음 | +| orderSubmitTime | 오프체인 주문 로그 | uint | 주문 수명 계산(spoof) | +| orderCancelTime | 오프체인 주문 로그 | uint | 취소율·주문 수명 계산(spoof) | +| side | 주문/체결 | enum(BUY/SELL) | 대향 짝·depth 편향 계산 | +| affiliateFlag | A-06 산출 | bool | insider trading 연결(§9) 표시 여부 | +| operatorEntityTag | F-01 산출 | bool | 운영자 자기거래 여부(WASH 특수사안) | + +### 4.3 수집 경로 + +온체인 이벤트는 Router commit 시 emit되는 이벤트 로그를 감시 인덱서가 구독(subscribe)해 수집한다. 오프체인 주문·취소 이벤트는 RFQ/주문 처리 서버의 로그를 감시 파이프라인이 수집한다. 두 소스는 txId·orderId·timestamp로 정합(reconcile)되며, 정합 실패(온체인 체결에 대응하는 오프체인 주문 기록 누락 등)는 그 자체가 자료 무결성 flag의 대상이다(§11). 감시 데이터는 Rule 17a-4류의 감사 추적 구조로 보존돼야 한다는 논점이 미해결로 남아 있다(§12, 외부 위임). + +### 4.4 신호별 필수 확인 항목 (전체 표 — 예시 아님) + +아래는 각 flag 신호를 산출하기 위해 반드시 확인해야 하는 항목의 전수 표다. 공통 행은 모든 신호에 걸리고, 신호별 ①②③은 해당 신호에만 필요한 추가 항목이다. + +공통(모든 신호): +- (공통-1) 체결 이벤트 수신·정합 완료(온체인 로그 ↔ 오프체인 주문 로그) +- (공통-2) 매수·매도 양측 onchainId 확보 및 A-04 클러스터 조회 가능 +- (공통-3) timestamp·size·price의 결측 없음(결측 시 신호 계산 보류 + 자료 flag) +- (공통-4) 관측 window 파라미터 로드(rolling window 길이·임계 τ) + +WASH_SAME_OWNER: +- ① buyer/seller의 A-04 클러스터 동일성 판정 결과(같은 clusterId 여부) +- ② 정당 사유 후보 태그(F-01 운영자 자기거래 여부, 자기 지갑 간 이전 여부) — dismiss 판단 입력 +- ③ 동일 클러스터 반복 여부(단발 vs 연속 — SERIES와의 연계) + +MATCHED_ORDER: +- ① 대향(BUY↔SELL) 주문/RFQ 응답의 size 근접도(|Δsize| 대 τ_size) +- ② 시각 근접도(|Δt| 대 τ_time) +- ③ 가격 근접도(|Δprice| 대 τ_price) + +MANIPULATIVE_SERIES: +- ① rolling window 내 동일/연계 클러스터 거래 빈도 +- ② 해당 거래들의 가격 임팩트(가격 상승·하락 누적폭) +- ③ 거래량 대비 유효 유동성 비율(외관상 활발 vs 실질 거래) + +SPOOF_LAYER (현행 휴면): +- ① 주문 취소율(cancelRate) — 제출 대비 취소 비율 +- ② 주문 수명(orderLife) 중앙값 — 제출~취소 간격 +- ③ 호가 depth 편향(depthImbalance) — 한쪽 치우침 정도 +- (전제) order-book 엔진 존재 여부. RFQ 단일이면 ①②③ 산입 불가 → 신호 비활성. + +FRAUD_OTHER: +- ① 열거 신호(위 1~4) 미해당 확인(잔여 카테고리이므로 선행 배제) +- ② 이상 패턴 유형 태그(marking-the-close 후보, 외부 허위정보 결합 후보 등) +- ③ 운영자·감시엔진 재량 표시 근거 메모(재현 가능한 관측 사실 기록) + +## §5. 감시·판정 로직 — 어떻게 표시하는가 + +> **게이트가 아니라 감시임을 기억하라.** 이 절의 "판정"은 통과/거절이 아니라 표시/무표시다. 순서는 게이트형과 같은 원리(싸고 확실히 걸러지는 검사 먼저)를 따르되, 종착점이 다르다 — 어느 신호가 켜져도 거래는 진행되고, 켜진 신호는 flag로 적재되어 사람에게 넘어간다. + +### 5.1 전체 흐름 + +1. Router가 transfer를 commit → 체결 이벤트 emit. +2. 감시 인덱서가 이벤트 수신 + 오프체인 주문 로그와 정합(§4.3). +3. 각 감시 축의 객관 신호를 계산(§5.2 순서). +4. 임계 초과 신호가 있으면 해당 flag를 flag ledger에 적재 + 검토 큐에 push. +5. STATEFUL 상태 갱신 — rolling window, 클러스터 거래 이력, 취소율 누적을 새 이벤트로 업데이트. +6. 체결은 어떤 경우에도 롤백하지 않는다(§3.9의 autoBlock=false 원칙). +7. 당사자에게 flag 사실을 통지하지 않는다(non-tipping, §6.4). + +아래 그림은 위 흐름을 런타임 관점에서 도식화한 것이다 — 어느 분기에서도 체결은 진행되고, 신호가 켜지면 검토 큐로 넘어간다. + +![F-02 런타임 감시 흐름 — post-trade (fig50)](F-02_fig50.png) + +### 5.2 감시 순서 및 의사코드 + +순서 원칙: 존재 판정이 값싸고 확실한 것 먼저(클러스터 동일성 → 대향 짝 → 통계 window → 잔여 재량). look-back window가 필요한 통계 신호는 뒤로, 단건 판정 가능한 신호는 앞으로 둔다. + +``` +onPostTradeEvent(e): + reconcile(e.onchain, e.offchainOrders) # 공통-1 + if missing(e.size, e.price, e.timestamp): # 공통-3 + emitDataFlag(e); return # 자료 결측 → 신호 보류 + + flags = [] + + # 1) WASH — 단건, 최저비용 + if A04.cluster(e.buyer) == A04.cluster(e.seller): + flags += WASH_SAME_OWNER + + # 2) MATCHED — 대향 짝 존재 판정 + m = findOpposingOrder(e) # 동일 size/time/price 대향 + if m and near(e.size, m.size, τ_size) + and near(e.time, m.time, τ_time) + and near(e.price, m.price, τ_price): + flags += MATCHED_ORDER # 짝당 1건(중복 계상 금지) + + # 3) SERIES — rolling window 통계 + w = window(A04.cluster(e.buyer)) + if w.tradeFreq > τ_freq and w.priceImpact > τ_impact: + flags += MANIPULATIVE_SERIES + + # 4) SPOOF/LAYER — order-book 존재 시에만 + if engineSet.hasOrderBook(): # 현행 RFQ면 false + if cancelRate(w) > τ_cancel + and medianOrderLife(w) < τ_life + and depthImbalance(w) > τ_depth: + flags += SPOOF_LAYER + + # 5) FRAUD_OTHER — 잔여·재량 + if none(flags) and anomalyDetector(e).flagged(): + flags += FRAUD_OTHER + + for f in flags: + record(flagLedger, e.txId, f) # STATEFUL 적재 + enqueue(reviewQueue, e.txId, f, nonTipping=true) + + updateState(w, e) # window·이력 갱신 + # 체결은 롤백하지 않음 — 반환값 없음(차단 신호 없음) +``` + +### 5.3 임계값 및 초과/이상 규율 + +임계값 τ는 법이 숫자로 정해주지 않는다 — §9·§10(b)는 "거짓 외관을 만들 목적", "유인할 목적" 같은 목적·정도의 문제이지, "취소율 몇 % 초과"를 규정하지 않는다. 따라서 τ는 집행 사례·업계 관행에서 도출하는 운영 파라미터이며, 그 정밀화는 P0/P1 미결 과제다(§12). 여기서 고정하는 것은 값이 아니라 부등호의 방향과 의미다: + +| 파라미터 | 부등호 | 의미(신호 발생 조건) | +| --- | --- | --- | +| cancelRate | > τ_cancel (초과) | 취소율이 임계를 초과하면 신호. 임계 도달(=)만으로는 미발생 | +| medianOrderLife | < τ_life (미만) | 주문 수명이 임계 미만이면 신호(너무 짧으면 체결의사 의심) | +| depthImbalance | > τ_depth (초과) | 편향이 임계를 초과하면 신호 | +| tradeFreq | > τ_freq (초과) | 빈도가 임계를 초과하면 신호 | +| priceImpact | > τ_impact (초과) | 가격 임팩트가 임계를 초과하면 신호 | +| |Δsize|, |Δt|, |Δprice| | ≤ τ (이하) | 대향 주문의 근접도가 임계 이하이면 "실질적으로 동일"로 매칭 | + +규율 두 가지를 못박는다. (i) 조작 방향 신호(취소율·빈도·임팩트·편향)는 강한 부등호 초과(>)를 쓴다 — 임계에 "도달"하는 것만으로는 신호를 켜지 않는다(보수적으로 오탐 억제). (ii) 근접도 매칭(통정)은 이하(≤)를 쓴다 — "실질적으로 같은"(substantially the same)의 포섭을 위해 경계값을 포함한다. 이 방향은 임의로 뒤집으면 법적으로 틀린다(초과/이상 혼동은 반복 지적된 오류 유형). + +### 5.4 상태(STATEFUL)와 갱신 시점 + +F-02는 STATEFUL 부품이다. 상태는 세 가지다 — (i) flag ledger(어떤 txId에 어떤 flag가 붙었는가), (ii) rolling window(클러스터별 최근 거래 빈도·가격·거래량 이력), (iii) 취소율/주문수명 누적(order-book 엔진 활성 시). 이 상태는 Router commit(체결 확정) 시점에 갱신된다 — pre-trade가 아니라 post-trade가 갱신 트리거다. 이 점이 pre-trade STATELESS 게이트(A-13 등)와 근본적으로 다르다. window는 시간 기준 슬라이딩(예: 최근 N 시간·M 거래)이며, 경계 이탈 이벤트는 window에서 만료(expire)된다. + +### 5.5 비결정성 → 결정화 + +조작·사기의 성립은 마음속 상태(scienter·purpose·knowledge, §3.9)에 달려 있어 본질적으로 비결정적이다. F-02는 이 비결정성을 세 값 열거(enum)로 결정화한다: + +- CLEAR — 어느 객관 신호도 임계 미달. 별도 조치 없음. +- FLAGGED — 하나 이상의 객관 신호 임계 충족. 검토 큐 적재, 체결 진행, 당사자 미통지. +- (운영자 판정 단계) — FLAGGED 항목에 대해 운영자·감시엔진이 dismiss(정당 사유 확인) / escalate(SAR 등 보고) / hold-for-investigation 중 택일. 이 판정은 코드 밖 상태값이다. + +핵심: 코드는 CLEAR/FLAGGED의 boolean 신호까지만 결정한다. "위반인가"의 최종 판단(고의 인정 포함)은 결코 코드가 하지 않는다 — 그것이 감시형 부품의 정의다. + +## §6. flag 처리·예외 — 거절 코드가 없는 부품 + +> **왜 이 절이 다른 부품과 다른가.** 게이트형 부품의 §6은 "거절 코드(failure code)"를 다룬다. F-02에는 거절 코드가 없다 — 아무도 거절하지 않기 때문이다. 대신 flag 코드와 그 처리 절차·시한·통지 규율을 다룬다. 이 구조 자체가 §3.9(scienter는 코드가 판정 못함)와 과잉차단 위험(§1.4 셋째)의 직접 산물이다. + +### 6.1 거절 없음 — 표시와 큐 + +F-02는 transfer를 revert하지 않는다. 모든 산출은 "체결 진행 + (필요 시) flag 적재 + 검토 큐 push"다. 따라서 아래 코드들은 "거절 사유"가 아니라 "표시 사유(flag reason)"다. + +### 6.2 flag 코드 표 + +| flag code | 근거 | 처리 | +| --- | --- | --- | +| WASH_SAME_OWNER | §9(a)(1)(A) | 체결 진행 + 큐; 운영자가 정당 자기이전/운영자 자기거래 여부 확인 후 dismiss/escalate | +| MATCHED_ORDER | §9(a)(1)(B)·(C) | 체결 진행 + 큐; 대향 짝의 사전 조율 정황 검토 | +| MANIPULATIVE_SERIES | §9(a)(2) | 체결 진행 + 큐; 패턴·가격임팩트 검토, 반복 시 우선순위 상향 | +| SPOOF_LAYER | §9(a)(2)+§10(b) | (현행 휴면) order-book 도입 시 활성; 취소패턴 검토 | +| FRAUD_OTHER | §10(b)/10b-5 | 체결 진행 + 큐; 재량 표시 근거 메모 필수 | +| DATA_INTEGRITY | §4.3 정합 실패 | 신호 계산 보류 + 자료 조사 큐(별도) | + +### 6.3 검토 절차와 시한 + +flag는 무기한 방치되면 감시 체계의 의미가 사라진다. 각 flag는 (i) 접수 → (ii) 1차 검토(정당 사유 후보 확인) → (iii) 판정(dismiss/escalate/hold) 순으로 흐르며, 각 단계에 처리 시한이 부여된다. 의심거래 보고(SAR)로 escalate되는 경로의 법정·관행 시한은 F-03(사기·의심거래 보고)과 공유되며, 그 구체 시한·채널(FinCEN/SEC/자율규제)은 미결 과제로 남아 있다(§12). 모든 판정은 재현 가능한 근거와 함께 기록되어 감사 추적을 남긴다. + +### 6.4 당사자 메시지 vs 내부 메시지 (non-tipping) + +이 구분은 F-02에서 특히 엄격하다. 조작·사기 조사 대상자에게 "당신 거래에 flag가 붙었다"고 알리면(tipping-off), 증거 인멸·조사 방해를 부를 수 있어 그 자체가 문제다. 따라서: + +- 당사자(매수인/매도인) 대상 메시지: 없음. flag는 당사자에게 노출되지 않는다. 거래는 정상 체결됐으므로 당사자는 통상의 체결 확인만 받는다. +- 내부(운영자/감시엔진/규제보고) 메시지: flag code·객관 신호 수치·근거·txId를 담아 검토 큐에만 전달. + +모든 flag의 공통 메타 `nonTipping = true`가 이 규율을 코드 레벨에서 강제한다(§3.11). + +### 6.5 오탐(false positive) 처리 + +감시형은 필연적으로 오탐을 낳는다 — 특히 WASH는 정당한 자기 지갑 간 이전에도 켜진다. 오탐은 "버그"가 아니라 감시형의 정상 작동이며, 운영자 판정 단계에서 걸러진다. 정당 사유가 확인되면 운영자가 dismiss하되, dismiss 사실과 사유를 기록한다(나중에 "왜 이 flag를 무시했나"에 답할 수 있도록). 무기록 dismiss는 금지 — 기록 없는 무시는 감시 부재와 구별되지 않는다. + +## §7. 테스트 케이스 + +> **감시형 테스트의 초점.** 게이트형은 "통과해야 할 것이 통과하고 거절돼야 할 것이 거절되는가"를 본다. 감시형은 "표시돼야 할 것이 표시되고(민감도), 표시되지 말아야 할 것이 조용한가(특이도), 그리고 어떤 경우에도 거래가 차단되지 않는가"를 본다. 아래 표에서 모든 케이스의 '체결' 열은 항상 '진행'이어야 한다 — 이것이 F-02의 제1 불변식이다. + +| # | 유형 | 입력 시나리오 | 기대 flag | 체결 | 검증 포인트 | +| --- | --- | --- | --- | --- | --- | +| T-01 | CLEAR | 서로 다른 실소유자 간 1회 정상 매매 | 없음(CLEAR) | 진행 | 정상 거래는 조용해야 | +| T-02 | WASH | 같은 클러스터 두 지갑 간 매매(A-04 동일 clusterId) | WASH_SAME_OWNER | 진행 | 자전 신호 민감도 | +| T-03 | WASH 오탐 | 같은 클러스터지만 정당 자기이전(F-01 운영자 아님) | WASH_SAME_OWNER + 운영자 dismiss(기록) | 진행 | 오탐이 켜지되 dismiss 경로 작동 | +| T-04 | MATCHED | 동일 size·time·price 대향 RFQ 짝 체결 | MATCHED_ORDER(1건) | 진행 | 짝당 1건, 이중계상 없음 | +| T-05 | MATCHED 경계 | |Δsize|=τ_size 정확히 임계값 | MATCHED_ORDER(≤이므로 발생) | 진행 | 근접도 매칭은 이하(≤) 포함 | +| T-06 | SERIES | 같은 클러스터가 window 내 고빈도·가격 밀어올림 | MANIPULATIVE_SERIES | 진행 | 통계 window·임팩트 임계 | +| T-07 | SERIES 경계 | tradeFreq=τ_freq 정확히 임계 | 없음(초과 아님) | 진행 | 조작방향은 초과(>), 도달만으론 미발생 | +| T-08 | SPOOF 휴면 | RFQ 단일 환경에서 취소 다발 | 없음(엔진 order-book 아님) | 진행 | 아키텍처 게이트로 휴면 확인 | +| T-09 | SPOOF 활성 | (가정) order-book 엔진 + 취소율>τ_cancel & life<τ_life & imbalance>τ_depth | SPOOF_LAYER | 진행 | 엔진 도입 시 3조건 AND | +| T-10 | FRAUD_OTHER | 열거 신호 미해당 + 이상탐지기 표시(marking 후보) | FRAUD_OTHER(+근거 메모) | 진행 | 잔여 카테고리·재량 표시 근거 | +| T-11 | Cascade(A-06) | 자전거래인데 매도인이 affiliate(A-06 true) | WASH_SAME_OWNER + insider link 태그(§9) | 진행 | affiliate 연계 표시 | +| T-12 | Cascade(F-03) | escalate 대상 → SAR 경로 진입 | flag → F-03 보고 큐 공유 | 진행 | F-03와의 시한·채널 연계 | +| T-13 | Data | 체결에 대응하는 오프체인 주문 로그 결측 | DATA_INTEGRITY(신호 보류) | 진행 | 자료 결측 시 신호 계산 보류 | +| T-14 | non-tipping | 임의 flag 발생 | 당사자 통지 0건, 내부 큐만 | 진행 | nonTipping 강제 확인 | +| T-15 | 불변식 | 위 모든 케이스 | — | 진행(예외 없음) | 어떤 flag도 transfer를 차단하지 않음 | + +## §8. (α) 검증 패턴 — 왜 감시형(Pattern C)인가 + +> **패턴 지정은 리걸의 일이다.** 패턴을 잘못 고르면 법적으로 틀린다 — 감시형을 차단형으로 만들면 정당 거래를 막아 별도 책임이 생기고, 증명서형을 기계 판정형으로 만들면 코드가 못하는 판단을 하는 척하게 된다. F-02의 패턴은 감시형(Pattern C)으로 확정되며, 그 근거는 조문과 판례에 있다. + +세 가지 표준 검증 패턴 중 F-02의 자리: + +| 패턴 | 성격 | F-02 해당? | 이유 | +| --- | --- | --- | --- | +| A 기계 판정형 | 결정론적 조건문(기간·명단·계산) | ✕ | 위반 성립이 마음속 상태(scienter)에 달려 결정론 불가 | +| B 증명서형 | 오프체인 판단을 서명 claim으로 확인 | ✕ | "조작 안 함"을 사전 증명하는 claim이 성립 불가 | +| C 감시형 | 객관 신호 자동 표시 + 사람 판정 | ○ | 객관 신호는 표시 가능, 고의는 사람이 판정 | + +왜 감시형이어야 하는가 — 세 근거를 다시 못박는다. + +첫째, 조문이 목적·고의를 요건으로 한다. §9(a)(1)은 "거짓 외관을 만들 목적으로"(for the purpose of creating a false or misleading appearance), §9(a)(2)는 "타인의 매매를 유인할 목적으로"(for the purpose of inducing), §9(a)(1)(B)·(C)는 "알면서"(with the knowledge)를 요건에 둔다. 목적·지(知)는 온체인 이벤트가 아니라 마음속 상태다. + +둘째, 판례가 이를 확정한다. Hochfelder(§3.9)는 §10(b)/10b-5 위반에 "기망·조작·사기의 의도를 포함하는 마음속 상태"(scienter)를 요구하고, "manipulative"는 "가격을 인위적으로 통제·왜곡해 투자자를 속이려는 의도적 행위"를 뜻한다고 했다. 코드가 이 의도를 확정한다고 주장하면 그것은 허위다. + +셋째, 과잉차단은 그 자체가 위법 위험이다. WASH 신호는 정당한 자기 지갑 간 이전에도 켜진다(§6.5). 이를 자동 차단하면 고의 없는 정당 거래를 막아 이용자에게 손해를 주고 별도 분쟁을 만든다. 그래서 "표시하되 차단하지 않는" 설계가 법적으로 옳다. + +감시형이 만족해야 할 품질 요건 세 가지: +- 재현가능성(reproducibility): 같은 이벤트 스트림 + 같은 파라미터 → 같은 flag. 자의적 표시가 아님을 증명하는 토대. +- 감사가능성(auditability): 모든 flag·dismiss에 근거·시각·판정자 기록. Rule 17a-4류 보존 구조 논점(§12). +- 비통지성(non-tipping): 당사자 미통지(§6.4). 조사 방해 방지. + +## §9. (β) 부품 간·묶음 간 조율 (Coordination) + +> **F-02는 섬이 아니다.** 자전 판정은 A-04의 실소유 클러스터 없이는 성립하지 않고, insider trading 연계는 A-06 없이는 표시할 수 없으며, 보고 경로는 F-03와 시한을 공유한다. 이 절은 그 연결선을 명시한다. + +### 9.1 Cascade map (부품 간) + +| 상대 부품 | 방향 | 관계 | F-02에서의 역할 | +| --- | --- | --- | --- | +| A-04 신원중복 | A-04 → F-02 | 필수 입력 | 실소유 클러스터가 WASH·SERIES의 "같은 실소유자" 판정 근거. A-04 없으면 자전 신호 불가 | +| A-06 affiliate | A-06 → F-02 | 조건부 연계 | affiliateFlag=true인 당사자의 조작 신호는 insider trading(§10(b)) 연결 태그를 부가 | +| F-01 운영자 자기거래 | F-01 → F-02 | 특수사안 | operatorEntityTag=true인 자전은 운영자 자기거래라는 별도 중대사안으로 분류 | +| F-03 사기·의심거래 보고 | F-02 ↔ F-03 | 하류·공유 | escalate된 flag는 F-03의 SAR 보고 파이프라인·시한을 공유 | +| A-12 모름 항변 차단 | A-12 ↔ F-02 | 개념 공유 | red flag 목록은 scienter(고의)의 정황 요소 — F-02 운영자 판정의 참고 입력 | + +핵심 의존: A-04는 F-02의 하드 의존이다(자전·연속거래 판정의 전제). A-06·F-01·A-12는 조건부 연계(사실관계 충족 시 태그 부가). F-03는 하류(escalate 후 보고). + +### 9.2 Cross-Recipe (묶음 간) + +F-02는 Recipe-R4(시장행위 감시)의 핵심 부품이다. R4의 성격은 다른 Recipe와 근본적으로 다르다: + +| 관계 | 상대 Recipe | 패턴 | 설명 | +| --- | --- | --- | --- | +| Orthogonal | R1 발행·R2 재판매·R3 펀드 | 병렬·직교 | 게이트 Recipe들은 pre-trade 차단, R4는 post-trade 표시. 서로 간섭하지 않음. 모든 체결이 게이트를 통과한 뒤 R4의 사후 관찰 대상이 됨 | +| Cumulative(관측) | R1·R2·R3 전부 | 누적 관측 | 발행·재판매·펀드 어느 거래든 R4의 post-trade commit을 거침 | +| Conflict | — | 없음 | 감시는 자격 게이트와 충돌하지 않음(효과가 다른 축) | + +이 직교성이 중요하다. 게이트(A-01 제재 등)가 "이 거래를 허용할까"를 pre-trade에 묻는다면, F-02는 "이미 일어난 이 거래가 조작의 징후인가"를 post-trade에 관찰한다. 두 축은 시점·산출·효과가 모두 달라 상호 배타적이지 않다 — 한 거래가 게이트를 통과하고도(적법 참가자·적법 자격) 여전히 조작 패턴을 보일 수 있다. 그래서 F-02는 게이트를 대체하지 않고 보완한다. + +## §10. (γ) 3-Layer Solution 및 책임 분배 + +> **누가 무엇을 책임지나.** 감시형은 코드 혼자 완결되지 않는다. 코드는 신호를, 사람은 판단을, 조직은 체계를 책임진다. 이 3층 구조와 책임 경계를 명시한다. + +| Layer | 담당 | 하는 일 | F-02에서의 구체 | +| --- | --- | --- | --- | +| Layer 1 자동 신호 | 코드(온체인+감시 인덱서) | 객관 신호의 결정론적 계산·적재 | 클러스터 동일성·대향 짝·통계 임계 계산 → flag event | +| Layer 2 신뢰 판정 | 운영자·감시엔진 | flag의 고의·정당성 판정, dismiss/escalate | WASH 오탐 dismiss, SERIES 조사, SAR 판단 | +| Layer 3 외부 검증 | 규제당국·감사 | 보고 수리, 주기 감사, 체계 적정성 평가 | SAR 수리(FinCEN/SEC), 감사 추적 검토 | + +책임 분배(누가 무엇에 답하나): +- 코드의 책임: 신호가 정확하고 재현 가능할 것. 같은 입력에 다른 flag가 나오면 코드의 실패. +- 운영자의 책임: 판정이 시한 내 이루어지고 근거가 기록될 것. 무기록 dismiss·시한 초과는 운영자의 실패. +- venue(조직)의 책임: 감시 체계를 갖추고 자료를 보존할 것. 체계 부재·자료 소실은 조직의 실패이며, 이것이 방조·부주의 책임 노출의 핵심(§1.4 둘째). + +이 3층에서 각 층은 아래 층을 신뢰하되 검증한다 — 운영자는 코드 신호를 신뢰하되 오탐을 판정으로 거른다. 규제·감사는 운영자 판정을 신뢰하되 근거 기록으로 검증한다. + +## §11. (δ) 프론트엔드·오프체인 운영자 레이어 + +> **온체인은 flag만, 판단은 오프체인.** 통계 계산(window·취소율)과 사람의 판정은 오프체인에서 일어난다. 온체인에는 flag event와 그 앵커만 남는다. 이 레이어의 구성과 규율을 명시한다. + +구성 요소: +- 감시 인덱서: 온체인 체결 로그 구독 + 오프체인 주문 로그 수집 + 정합(§4.3). window·임계 계산 수행. +- 검토 큐 대시보드: FLAGGED 항목을 운영자에게 제시. flag code·객관 신호 수치·txId·근거를 표시하되, 당사자 신원의 노출은 조사 필요 최소한으로 제한. +- SAR 파이프라인: escalate 항목을 F-03와 공유되는 보고 채널로 전달(시한·채널 §12 미결). +- 정합 모니터: 온체인 체결과 오프체인 주문의 불일치(결측)를 DATA_INTEGRITY flag로 표시. + +운영 규율: +- non-tipping: 대시보드·알림 어디에도 당사자에게 flag를 노출하는 경로를 두지 않는다(§6.4). +- 재현성: 대시보드가 보여주는 신호 수치는 저장된 이벤트·파라미터로 재계산 가능해야 한다. +- 보존: flag·판정·근거는 감사 추적으로 보존한다. 보존 구조가 Rule 17a-4(f)류 요건을 충족해야 하는지는 미결(§12). + +아키텍처 주의(B-04 연계): 현행 RFQ 단일 엔진에서는 공개 호가창이 없어, 대시보드의 spoof/layer 패널은 데이터 부재로 비활성 상태다. order-book 엔진이 도입되면 이 패널과 SPOOF_LAYER 신호가 함께 활성화된다. + +## §12. Open Issues (우선순위) + +| 우선순위 | 논점 | 내용 | 처리 | +| --- | --- | --- | --- | +| P0 | BD/ATS 분류 미해결 | 본 DEX가 broker-dealer·Reg ATS로 분류되면 시장감시가 규정상 의무가 되고 감시 수준·기록 요건이 강화됨. SEC는 온체인 venue 분류를 명시적으로 미해결로 남겨둠 | 외부 전문 변호사 위임 + SEC Crypto Task Force 관여 | +| P0 | 임계값 τ 정밀화 | cancelRate·orderLife·tradeFreq·priceImpact 등 임계는 법이 숫자를 안 정함. 집행 사례·업계 관행 기반 도출 필요. 잘못 잡으면 오탐 폭증 또는 감시 공백 | 집행사례 분석 + 운영 기준서(패턴 C) 정밀화 | +| P0 | SAR 시한·채널 | escalate flag의 보고 시한·수신 기관(FinCEN vs SEC vs 자율규제)이 아키텍처에 따라 달라짐. F-03와 공유 | F-03 운영 기준서 + 외부 위임 | +| P1 | RFQ에서 spoof 개념의 범위 | B-04가 확정한 RFQ 단일 엔진에는 공개 호가창이 없어 SPOOF_LAYER가 휴면. order-book 엔진 도입 시 활성 조건·파라미터 필요 | 엔진 로드맵과 연동, 활성 조건 사전 정의 | +| P1 | Rule 17a-4(f) 감사 추적 구조 | flag·판정·근거의 보존이 17a-4(f)류 무결성 요건(불변·재현)을 충족해야 하는지, 온체인 event가 그 일부를 대체할 수 있는지 | 외부 위임(메모리상 미해결 항목과 동일) | +| P2 | cross-venue 조작 한계 | 다른 venue와 연계한 조작은 단일 DEX가 관측 불가. 단일 venue 감시의 본질적 한계 명시 필요 | 한계 고지 + 향후 정보공유 체계 검토 | +| P2 | scienter 판정 기준 문서화 | 운영자가 dismiss/escalate를 가르는 정황 기준(A-12 red flag 연계 포함)을 문서화해 일관성·재현성 확보 | 운영 기준서에 판정 체크리스트 수록 | + +## §13. 파일명 규칙 + +- 산출물(본 문서): `F-02_market-surveillance.md` · `F-02_market-surveillance.docx` +- 출력 경로: `/mnt/user-data/outputs/` +- 도식: `F-02_fig30_statute-logic.png`(조문→신호 논리 흐름) · `F-02_fig50_runtime-decision.png`(런타임 감시 흐름) +- 후속 Spec Sheet(압축): `spec-sheets/elements/F-02_시장행위감시.md` +- 검증 로그: `src_verified_F-02.md`(1차 출처 재fetch 금지 기록) + +--- + +## 부록 A. 한 장 요약 + +- 정체: F-02는 유통 거래·주문의 조작·사기 징후를 사후에 표시하는 감시형(Pattern C) 부품. 차단하지 않는다. +- 근거: §9(a)(1)(A) 자전 · §9(a)(1)(B)·(C) 통정 · §9(a)(2) 조작적 연속거래/spoof-layer · §10(b)/Rule 10b-5 포괄 기망. Dodd-Frank(2010)로 비상장 증권까지 포섭됨을 확인. +- 왜 감시형: 조문·판례(Hochfelder)가 모두 마음속 상태(scienter·목적·지)를 요건으로 함 → 코드가 확정 불가 → 표시만 하고 판단은 사람. +- 산출: flag.basis 5종(WASH_SAME_OWNER·MATCHED_ORDER·MANIPULATIVE_SERIES·SPOOF_LAYER·FRAUD_OTHER) + CLEAR. 공통 메타 autoBlock=false·judgmentRequired=true·nonTipping=true. +- 상태: STATEFUL. Router commit이 flag ledger·window·취소율을 갱신. +- 아키텍처 주의: 현행 RFQ 단일(B-04)이라 SPOOF_LAYER는 휴면. order-book 엔진 도입 시 활성. +- 제1 불변식: 어떤 flag도 transfer를 차단하지 않는다. +- 최우선 미결: BD/ATS 분류, 임계값 정밀화, SAR 시한·채널, 17a-4(f) 감사 추적(모두 외부 위임/후속). \ No newline at end of file diff --git a/docs/compliance/elements/F-03.md b/docs/compliance/elements/F-03.md new file mode 100644 index 0000000..0806274 --- /dev/null +++ b/docs/compliance/elements/F-03.md @@ -0,0 +1,722 @@ +# ELE.F-03_suspicious-activity-monitoring + +# F-03 사기감시 (Suspicious Activity Monitoring / Fraud Surveillance) — 부품 심층 인수인계 문서 (Walkthrough) + +⚠ 출처·정정 노트 (읽기 전 필독). 본 부품의 인용은 다음 1차 출처를 기준으로 한다 — 15 U.S.C. §77q(a)(1933년 증권법 §17(a))·§78j(b)(1934년 증권거래소법 §10(b))·31 U.S.C. §5318(g)·§5312(a)(2)(G)·§5318(h)(은행비밀법)은 uscode.house.gov 현행본, 17 C.F.R. §240.10b-5·§240.17a-8과 31 C.F.R. §1023.320은 eCFR 현행본(각각 Title 17 2026-07-17 기준, Title 31 2026-06-16 기준), Aaron v. SEC, 446 U.S. 680 (1980)·Ernst & Ernst v. Hochfelder, 425 U.S. 185 (1976)은 govinfo.gov(U.S. Reports)다. Cornell LII·Justia는 인용하지 않는다. 영문 원문은 한 글자도 변형하지 않고 verbatim으로 보존한다(공개도메인 연방법·연방규칙·판례는 전문 인용 가능). + +특히 헷갈리기 쉬운 정정 포인트는 다음과 같다(상세는 부록 C). + +- F-03은 거래를 차단하는 게이트가 아니다. A-13·A-03가 사전(pre-trade)에 PASS/FAIL을 내는 것과 달리, F-03은 이미 체결된 거래를 사후(post-trade)에 표시(flag)하고 사람(Operator)이 SAR 여부를 판단하는 감시형(패턴 C) 부품이다. "거절 코드"가 아니라 "flag 상태"를 다룬다. +- 보고 문턱은 이상(≥) 규율이다. 31 C.F.R. §1023.320(a)(2)의 "at least $5,000"은 초과(>)가 아니라 이상(≥ $5,000)이다. 정확히 $5,000도 문턱을 넘는다. +- 제출 시한은 포함(≤) 규율이다. 1023.320(b)(3)의 "no later than 30 calendar days"는 최초 인지일로부터 30일 이내(30일 포함), suspect 미특정 시 +30일(총 최대 60일)이다. +- SAR 기밀(no-tipping-off)의 현행 BD-레벨 준거는 31 C.F.R. §1023.320(e)이며(§5318(g)(2)(A)(i)가 그 상위 수권), "SAR 또는 SAR의 존재를 드러내는 어떤 정보도" 공개할 수 없다. 이 조문이 F-03 설계의 급소 — 온체인 공개원장에 flag·SAR 사실을 남기면 그 자체가 위반이다. +- F-03의 SAR 보고 의무는 BD 등록을 전제로 활성화된다(§5312(a)(2)(G)·Rule 17a-8). BD 지위 미확정 구간에서는 F-03은 사실을 공급하고 기록을 보존하는 탐지 계층으로 작동하되, 보고 의무 자체는 잠재 상태로 둔다(§12). + +--- + +## §1. 규제 맥락 — 이 부품이 다루는 규제는 어디서 왔는가 (Context First) + +> 이 부품을 읽는 사람이 가장 먼저 헷갈리는 지점은 "F-03이 무슨 법의 무슨 요건을 판정하느냐"이다. 답은 — F-03은 단일 요건을 판정하지 않는다. F-03은 서로 다른 두 계보의 법이 같은 설계로 수렴하는 지점이다. 하나는 증권 사기 금지(제4편 불공정거래)의 사후 책임 축이고, 다른 하나는 은행비밀법(BSA)의 의심거래 보고(SAR) 의무 축이다. 이 절은 그 두 계보가 어디서 왔고 왜 F-03이라는 하나의 부품으로 만나는지를 먼저 세운다. + +### 1.1 미국 증권 규제의 네 기둥과 그중 F-03이 서는 자리 + +미국 증권 규제는 네 개의 연방 제정법을 기둥으로 한다 — 1933년 증권법(Securities Act, 발행 규율), 1934년 증권거래소법(Exchange Act, 유통·시장·중개업자 규율), 1940년 투자회사법(ICA, 펀드 규율), 1940년 투자자문업법(IAA, 자문업 규율). Decipher의 다른 부품들이 이 중 하나에 뿌리를 둔다 — A-03은 증권법 Reg D, A-13은 ICA §3(c)(7), C-01·C-08은 유통 국면의 Rule 144. + +F-03은 그중 1934년법 제4편(불공정거래·시장조작 금지)의 사기 금지 조항에 뿌리를 두면서, 동시에 증권법 제도가 아닌 별도의 횡단 법률 — 은행비밀법(Bank Secrecy Act, 31 U.S.C. §5311 이하) — 의 의심거래 보고 의무를 함께 진다. 이 이중 뿌리가 F-03의 성격을 규정한다. + +- 증권 사기 축: 증권법 §17(a)(발행·매도 국면), 1934년법 §10(b)와 Rule 10b-5(매매 전반). 이들은 "무엇이 사기인가"를 정의하는 실체 금지 규범이다. F-03의 감시는 바로 이 금지선을 넘는 거래를 탐지하려는 것이다. +- BSA 보고 축: §5318(g)의 의심거래 보고 수권과 그 집행규칙 31 C.F.R. §1023.320(브로커-딜러 SAR). 이들은 "탐지했으면 어떻게 신고하는가"를 정의하는 절차 규범이다. + +정리하면 F-03은 시장행위 감시 묶음(Recipe-R4, "anti-fraud + market manipulation 위반 부재 추정")의 사기 쪽 절반이다. 같은 R4의 다른 절반인 F-02(시장행위 감시)가 자전거래·허수주문 같은 시장조작(manipulation) 패턴을 다룬다면, F-03은 사기(fraud)와 그 보고 의무(SAR)를 다룬다. + +### 1.2 왜 이 규제가 존재하는가 — 두 계보의 역사 + +증권 사기 금지는 대공황의 산물이다. 1929년 붕괴 이후 의회는 "시장의 사기를 사후에 폭넓게 잡는 그물"이 필요하다고 보았고, 그 결과가 증권법 §17(a)(1933)와, 더 넓게 매매 전반을 덮는 1934년법 §10(b)·Rule 10b-5(1942년 SEC 제정)다. 이 조항들은 등록·면제 같은 사전 관문과 달리, 이미 벌어진 행위를 사후에 위법으로 규정하는 책임 규범이다 — 즉 본질적으로 사후적이다. + +의심거래 보고(SAR)는 다른 계보다. 자금세탁·조직범죄·테러자금을 추적하기 위해 의회는 1970년 은행비밀법(정식 명칭 Currency and Foreign Transactions Reporting Act)을 만들었고, 이후 §5318(g)(1992년 신설)로 재무장관이 금융기관에 "의심거래를 보고하라"고 요구할 권한을 부여했다. 브로커-딜러에 대한 구체 규칙은 31 C.F.R. §1023.320으로, 2002년 말부터 적용된다. SAR 제도의 논리는 "차단"이 아니라 "관찰과 신고" — 금융기관이 자기 창구를 지나가는 의심 거래를 정부(FinCEN)에 보고하게 하여 수사·정보 자원이 그 위에서 작동하게 하는 것이다. + +두 계보는 목적이 다르지만(투자자 보호 vs 자금세탁 방지) 실행 형태가 같다 — 둘 다 거래를 막지 않고, 사후에 관찰하며, 판단은 사람이 한다. 그래서 하나의 감시 부품으로 수렴한다. + +### 1.3 "차단하는 부품"이 아니라 "표시하는 부품" — F-03의 근본 성격 + +Decipher 부품은 검증 방식에 따라 셋으로 나뉜다(자세히는 §8) — 기계 판정형(A, 결정론적 차단), 증명서형(B, off-chain 판단에 대한 합리적 신뢰), 감시형(C, 표시 후 사람 판단). F-03은 순수 감시형(C)이다. + +이 구분은 사소하지 않다. 사기와 의심은 본질적으로 사실 판단이며, 흔히 고의(scienter)라는 주관적 요소까지 얽힌다(§3.4·§3.5). 기계는 "이 거래가 사기다"를 확정할 수 없다 — 확정하려 들면 대량 오탐과 부당한 거래 봉쇄를 낳는다. 게다가 SAR 제도 자체가 "차단 의무"가 아니라 "보고 의무"다(§1023.320은 거래 거절을 요구하지 않는다). 따라서 F-03의 올바른 형태는 사전 게이트가 아니라 사후 flag이다 — 거래는 이미 체결되었고, F-03은 그 거래를 관찰·표시하며, SAR 판단과 제출은 Operator(사람)가 한다. + +이 성격이 F-03의 세 가지 구조적 특성을 낳는다. (1) Timing = post-trade(체결 후 이벤트 소비). (2) Statefulness = STATEFUL(flag를 적재하고 30/60일 시계를 관리). (3) 출력 = 차단이 아닌 flag 상태 전이. + +### 1.4 Decipher 시스템에서 왜 중요한가 — 두 방향의 책임 노출 + +F-03이 없거나 부실하면 Decipher는 두 방향에서 동시에 노출된다. + +첫째, 증권 사기 책임. 사기 거래가 venue를 통해 체결되고 아무도 관찰하지 않았다면, venue와 그 운영주체는 사기의 조력(§17(a)(3)·Rule 10b-5의 "course of business which operates as a fraud")에 노출된다. 특히 §17(a)(2)·(3)은 고의 없이 과실만으로도 SEC 집행이 가능하다(Aaron v. SEC, §3.4) — "몰랐다"가 방어가 되지 않는다. 관찰 체계의 부재 자체가 위험이다. + +둘째, SAR 미신고 책임. BD로 등록·운영한다면(또는 그 지위로 취급된다면) §5318(g)·1023.320의 SAR 의무가 걸린다. 의심 거래를 인지하고도 30/60일 내 신고하지 않으면 그 자체가 BSA 위반이다(1023.320(g): "Failure to satisfy the requirements of this section may be a violation of the Bank Secrecy Act"). 반대로 선의로 신고하면 안전항(§5318(g)(3))이 민사 면책을 준다 — 즉 "신고하지 않을 이유"보다 "신고할 이유"가 법적으로 더 강하다. + +F-03은 이 두 노출을 같은 관찰 파이프라인으로 관리하는 부품이다. 존재의 이유는 "사기를 기계로 판정"하는 데 있지 않고, "사기·의심의 신호를 빠짐없이 포착하여 사람의 판단과 법정 신고로 연결하는 감사가능한 기록"을 만드는 데 있다. + +--- + +## §2. 메타 정보 (Internal Identifier Box) + +| 항목 | 값 | +| --- | --- | +| 부품 ID | F-03 | +| 부품명 | 사기감시 (Suspicious Activity Monitoring / Fraud Surveillance) | +| 카테고리 | F — 행위·운영 (Conduct & Operations) | +| 검사 대상 | 의심거래(suspicious transaction)의 탐지·표시와 SAR 보고 판단 연결 | +| 소속 Recipe | R4 시장행위 감시 (Layer 7) — "anti-fraud + market manipulation 위반 부재 추정" | +| Recipe 내 위치 | R4 필수 부착(F-02·F-01·A-12와 함께). R1·R2·R3와는 orthogonal(사후 commit 계층) | +| 활성화 트리거 | 모든 체결 거래의 post-trade 이벤트(자산 무관). SAR 보고 의무는 BD 등록 시 활성(§12 미결) | +| 검증 방식 | 감시형 (Pattern C — 탐지·flag + Operator 판단, 차단기 아님) | +| Timing | Post-trade (EX_POST_TRIGGER) | +| Statefulness | STATEFUL (flag 적재 + 30/60일 시계 + 5년 보존) | +| Decidability | MONITORING_BASED (의심·scienter = 사실판단, 기계 확정 불가) | +| 주요 근거 (Layer 1) | 증권법 §17(a)[15 U.S.C. §77q(a)] · 1934년법 §10(b)[15 U.S.C. §78j(b)] · BSA §5318(g)[31 U.S.C. §5318(g)] | +| 주요 근거 (Layer 2) | Rule 10b-5[17 C.F.R. §240.10b-5] · 31 C.F.R. §1023.320(BD SAR) · Rule 17a-8[17 C.F.R. §240.17a-8] | +| 주요 근거 (Layer 3) | Aaron v. SEC (1980) · Ernst & Ernst v. Hochfelder (1976) · FinCEN(SAR 지정 수령처) | +| Cascade | A-12(red flag)·A-06(affiliate/insider link) 신호 소비 · A-01·A-04(신원 사실) 소비 · F-02와 경계 분담 · B-01 보존체계 편입 | +| 출력 | flag 상태 전이 {NO_FLAG · DETECTED · UNDER_REVIEW · SAR_FILED · CLEARED · NO_ACTION} (거절 코드 아님) | +| claim.basis | 해당 없음 (증명서형 부품이 아님 — §3.13) | +| 파일 | F-03_suspicious-activity-monitoring.md / .docx · 도표 F-03_fig30.png · F-03_fig50.png | + +--- + +## §3. 법적 근거 (Layer 1 → 2 → 3) + +> 읽는 법. 법적 근거는 세 겹이다 — Layer 1(조문)은 의회가 만든 법률 텍스트(statute), Layer 2(규칙)는 SEC·FinCEN이 그것을 실무 수준으로 구체화한 연방규칙(rule), Layer 3(해석)은 판례·발행문서가 모호한 부분을 메운 해석이다. 아래 §3.0.2 표 1의 "종류" 칸이 그대로 Layer에 대응한다 — Statute = Layer 1, SEC Rule / FinCEN Rule = Layer 2, Case = Layer 3. 본 절은 조문이 작동하는 논리 흐름 순서로 배열돼 §3.1~§3.11 번호를 유지하며, 각 항목이 어느 Layer인지는 이 표로 확인한다. F-03은 두 계보(증권 사기 §3.1~§3.5 / BSA SAR §3.6~§3.11)가 하나의 감시 설계로 수렴하는 구조임에 유의한다. + +### 3.0 법조문 관계 플로우차트 (개발자용) + +아래 그림은 두 계보가 F-03 설계로 수렴하는 흐름을 정리한 것이다 — 증권 사기 축(§17(a) + §10(b)→Rule 10b-5, scienter는 Aaron·Hochfelder가 규정)이 "탐지 대상 사기"를 정의하고, BSA SAR 축(§5318(g)→1023.320, BD 연결은 §5312(a)(2)(G)·Rule 17a-8, 프로그램 요건은 §5318(h))이 "보고 의무·기밀·시한"을 정의하며, 둘이 만나 F-03 = post-trade 감시·flag + Operator SAR 판단으로 귀결된다. 각 조항 상세는 §3.1~§3.11. + +![F-03 법조문 관계 흐름](F-03_fig30.png) + +### 3.0.1 실제 BUIDL에 어떻게 적용되나 + +BUIDL 매도 시나리오(예: 김 부장 → Acme Capital, $100K)에서 F-03은 R4의 post-trade commit 단계에 붙는다. 체결이 확정되면 Router가 이벤트를 방출하고, F-03의 off-chain 감시 엔진이 그 거래의 신호(금액 $100K ≥ $5,000, 상대방·타이밍, A-12 red flag 결과, A-06 affiliate 링크)를 수집한다. 1023.320(a)(2)의 4유형 중 어느 하나라도 "의심"에 걸리면 flag(DETECTED)를 적재하고 30일 시계를 시작한다. 이후 판단은 Operator가 한다 — 의심이 확인되면 FinCEN에 SAR를 제출하고(안전항 적용), 해소되면 근거를 기록하고 CLEARED로 닫는다. 이 전 과정에서 매수인·매도인에게는 flag나 SAR의 존재가 일절 노출되지 않는다(1023.320(e)). 정상적 BUIDL 거래 대다수는 4유형 어디에도 걸리지 않아 NO_FLAG로 기록만 남는다. + +### 3.0.2 조문 근거표 (Authority) + 순서·중요성 + +표 1 (Authority) — 종류 칸이 곧 Layer. + +| 종류 | Authority | 내용 | F-03 관련성 | Direct/Supporting | Official URL | +| --- | --- | --- | --- | --- | --- | +| Statute | Securities Act §17(a) · 15 U.S.C. §77q(a) | offer·sale에서의 사기·중대 허위 진술 금지 | 탐지 대상 사기의 실체 정의(발행·매도 축) | Direct | uscode.house.gov | +| Statute | Exchange Act §10(b) · 15 U.S.C. §78j(b) | 매매 관련 manipulative·deceptive device 금지 수권 | Rule 10b-5의 상위 수권 | Direct | uscode.house.gov | +| SEC Rule | Rule 10b-5 · 17 C.F.R. §240.10b-5 | 매매 전반(in connection with) 사기 일반 금지 | 탐지 대상 사기의 실체 정의(유통 축) | Direct | ecfr.gov | +| Case | Aaron v. SEC, 446 U.S. 680 (1980) | §17(a)(1)=scienter要 / (a)(2)·(a)(3)=과실足 | 과실만으로도 책임 → 광범위 관찰 명령 | Direct | govinfo.gov | +| Case | Ernst & Ernst v. Hochfelder, 425 U.S. 185 (1976) | Rule 10b-5=scienter要 | 10b-5 축의 주관 요건 경계 | Supporting | govinfo.gov | +| Statute | BSA §5318(g) · 31 U.S.C. §5318(g) | 의심거래 보고 수권 + 통지금지 + 안전항 | SAR 의무·기밀·면책의 상위 근거 | Direct | uscode.house.gov | +| Statute | BSA §5312(a)(2)(G) · 31 U.S.C. §5312(a)(2)(G) | "financial institution"에 등록 BD 포함 | SAR 의무가 BD에 걸리는 정의 hook | Conditional | uscode.house.gov | +| FinCEN Rule | 31 C.F.R. §1023.320 | 브로커-딜러 SAR: 문턱·4유형·시한·보존·기밀 | 보고 의무의 실무 본체 | Direct | ecfr.gov | +| SEC Rule | Rule 17a-8 · 17 C.F.R. §240.17a-8 | 등록 BD → Chapter X(BSA) 준수 연결 | 증권법 축에서 BSA 의무로 잇는 다리 | Conditional | ecfr.gov | +| Statute | BSA §5318(h) · 31 U.S.C. §5318(h) | AML 프로그램 최소 요건(정책·CO·훈련·독립감사) | 감시 체계의 제도적 최소 골격 | Supporting | uscode.house.gov | +| FinCEN | FinCEN (Financial Crimes Enforcement Network) | SAR 지정 수령·분석 기관(§5318(g)(4)) | 제출 상대·통로 | Background | fincen.gov | + +표 2 (순서·중요성) — 순서는 중요도순이 아니라 논리 흐름순. + +| 순서(§3.X) | 조문 | 중요성 | F-03이 그걸로 하는 일 | +| --- | --- | --- | --- | +| §3.1 | Securities Act §17(a) | 핵심 | 발행·매도 국면 사기를 "탐지 대상"으로 정의 | +| §3.2 | Exchange Act §10(b) | 핵심 | 10b-5의 수권 근거 확인 | +| §3.3 | Rule 10b-5 | 핵심 | 유통 국면 사기를 "탐지 대상"으로 정의 | +| §3.4 | Aaron v. SEC | 핵심 | 과실 책임 확인 → 관찰 부재 자체가 위험임을 근거화 | +| §3.5 | Ernst & Ernst v. Hochfelder | 보조 | 10b-5 축의 scienter 경계 명시(오탐 억제 논거) | +| §3.6 | BSA §5318(g)(1) | 핵심 | SAR 의무의 상위 수권 | +| §3.7 | 31 C.F.R. §1023.320(a)·(b) | 핵심 | 문턱(≥$5,000)·4유형·시한(30/60일)의 판정 파라미터 | +| §3.8 | 31 C.F.R. §1023.320(d)·(e) | 핵심 | 5년 보존 + 기밀(no-tipping-off) → 온체인 비노출 설계 | +| §3.9 | BSA §5318(g)(2)·(g)(3) | 핵심 | 통지금지·안전항 → 노출 경계와 신고 유인 | +| §3.10 | Rule 17a-8 + §5312(a)(2)(G) | 조건부 | BD 지위와 BSA 의무를 연결(활성화 조건) | +| §3.11 | BSA §5318(h) | 보조 | 감시 프로그램의 최소 제도 요건 | + +### 3.1 Securities Act §17(a) — offer·sale에서의 사기·중대 허위 진술 [uscode.house.gov] + +- **조항**: Securities Act §17(a), 15 U.S.C. §77q(a) — uscode.house.gov + +- **핵심 원문**: (a) It shall be unlawful for any person in the offer or sale of any securities (including security-based swaps) or any security-based swap agreement (as defined in section 78c(a)(78) of this title) by the use of any means or instruments of transportation or communication in interstate commerce or by use of the mails, directly or indirectly— (1) to employ any device, scheme, or artifice to defraud, or (2) to obtain money or property by means of any untrue statement of a material fact or any omission to state a material fact necessary in order to make the statements made, in light of the circumstances under which they were made, not misleading; or (3) to engage in any transaction, practice, or course of business which operates or would operate as a fraud or deceit upon the purchaser. + +- **한국어**: (a) 누구든지 증권(security-based swap 포함) 또는 security-based swap agreement의 offer 또는 sale에서, 주간통상의 운송·통신 수단 또는 우편을 이용하여 직접 또는 간접으로 — (1) 사기를 위한 장치·계략·술책을 사용하는 것, 또는 (2) 중대한 사실에 관한 허위 진술, 또는 진술이 이루어진 상황에 비추어 그 진술을 오도적이지 않게 하기 위하여 필요한 중대한 사실의 누락에 의하여 금전 또는 재산을 취득하는 것; 또는 (3) 매수인에 대한 사기 또는 기망으로 작동하거나 작동할 거래·관행·영업 방식에 관여하는 것은 위법이다. + +- **쉬운 설명**: 발행·매도 국면의 사기 일반 조항이다. F-03에 닿는 경로는 이렇다 — F-03이 탐지하려는 대상이 바로 이 (1)~(3)에 해당하는 거래다. 특히 (3)의 "course of business which operates or would operate as a fraud or deceit upon the purchaser"(매수인에 대한 사기로 작동하는 영업 방식)는 개별 거짓말이 아니라 사기적 거래 패턴을 포착하는 넓은 그물이라, 감시가 개별 거래뿐 아니라 연속 거래 패턴(1023.320의 "pattern of transactions")까지 봐야 하는 이유를 준다. 쉽게 말하면, F-03은 "이 그물에 걸릴 만한 거래가 우리 venue를 지나갔는가"를 사후에 관찰하는 부품이고, 이 조문이 그 그물의 한쪽 축(발행·매도 국면)을 정의한다. + +- **탐지·flag 반영**: 간접 ✕ (판정 조건 정의가 아니라 탐지 대상의 실체 정의). F-03은 이 조문을 PASS/FAIL로 계산하지 않는다. 대신 4유형 규칙(§3.7)이 이 사기 개념의 운영 대리지표다. + +- **ERC-3643 변환**: 직접 매핑 없음. 탐지 규칙 세트(fraudPatternRules)의 근거 규범으로 문서화되며, 온체인 강제(revert) 대상이 아니다. + +### 3.2 Exchange Act §10(b) — manipulative·deceptive device 금지 수권 [uscode.house.gov] + +- **조항**: Securities Exchange Act of 1934 §10(b), 15 U.S.C. §78j(b) — uscode.house.gov (2026-04-29 유효본) + +- **핵심 원문**: It shall be unlawful for any person, directly or indirectly, by the use of any means or instrumentality of interstate commerce or of the mails, or of any facility of any national securities exchange— … (b) To use or employ, in connection with the purchase or sale of any security registered on a national securities exchange or any security not so registered, or any securities-based swap agreement any manipulative or deceptive device or contrivance in contravention of such rules and regulations as the Commission may prescribe as necessary or appropriate in the public interest or for the protection of investors. + +- **한국어**: 누구든지 직접 또는 간접으로 주간통상의 수단·도구, 우편, 또는 national securities exchange의 시설을 이용하여 — (b) national securities exchange에 등록된 증권 또는 등록되지 아니한 증권, 또는 securities-based swap agreement의 매수 또는 매도와 관련하여(in connection with), Commission이 공익 또는 투자자 보호를 위하여 필요·적정하다고 정하는 규칙·규정에 위반하여 manipulative(시세조종적) 또는 deceptive(기망적) 장치·수단을 사용·이용하는 것은 위법이다. + +- **쉬운 설명**: 이 조문 자체는 "구체적으로 무엇이 금지되는가"를 다 말하지 않는다 — SEC가 규칙으로 채우라고 위임한다("in contravention of such rules and regulations as the Commission may prescribe"). 그 위임을 받아 만들어진 규칙이 §3.3의 Rule 10b-5다. 쉽게 말하면 §10(b)는 엔진이고 10b-5는 그 엔진이 실제로 굴러가는 바퀴다. F-03 문맥에서 이 조문의 의미는 — 유통(2차 시장) 국면의 사기를 잡는 법적 권한이 여기서 나온다는 것, 그리고 그 권한이 "purchase or sale과 관련한" 모든 거래에 미친다는 것(범위의 광협을 §3.3에서 확정). + +- **탐지·flag 반영**: 간접 ✕ (10b-5의 수권 근거). F-03은 이 조문을 직접 판정하지 않는다. + +- **ERC-3643 변환**: 직접 매핑 없음. 10b-5(§3.3)의 상위 근거로만 인용. + +### 3.3 Rule 10b-5 — 매매 관련 사기·허위 진술의 일반 금지 [ecfr.gov] + +- **조항**: 17 C.F.R. §240.10b-5 — ecfr.gov (Title 17 현행본; 수권: Exchange Act §10(b), 15 U.S.C. §78j(b)) + +- **핵심 원문**: It shall be unlawful for any person, directly or indirectly, by the use of any means or instrumentality of interstate commerce, or of the mails or of any facility of any national securities exchange, (a) To employ any device, scheme, or artifice to defraud, (b) To make any untrue statement of a material fact or to omit to state a material fact necessary in order to make the statements made, in the light of the circumstances under which they were made, not misleading, or (c) To engage in any act, practice, or course of business which operates or would operate as a fraud or deceit upon any person, in connection with the purchase or sale of any security. + +- **한국어**: 누구든지 직접 또는 간접으로, 주간통상의 수단·도구, 우편, 또는 national securities exchange의 시설을 이용하여, 증권의 매수 또는 매도와 관련하여(in connection with) — (a) 사기를 위한 장치·계략·술책을 사용하는 것, (b) 중대한 사실에 관한 허위 진술을 하거나, 진술이 이루어진 상황에 비추어 그 진술을 오도적이지 않게 하기 위하여 필요한 중대한 사실의 진술을 누락하는 것, 또는 (c) 어느 누구에 대한 사기 또는 기망으로 작동하거나 작동할 행위·관행·영업 방식에 관여하는 것은 위법이다. + +- **쉬운 설명**: §3.1이 1933년법의 발행·매도 축이라면, 10b-5는 1934년법의 매매 전반 축이다 — "in connection with the purchase or sale"이라 2차 시장 거래 전체를 덮는다. F-03이 탐지하는 사기의 유통 국면 정의가 여기다. 두 조문의 차이 하나를 기억하라 — §17(a)(2)·(3)은 과실로 족하지만(§3.4), 10b-5 책임에는 고의(scienter)가 요구된다(§3.5, Hochfelder). 이 차이는 F-03 설계에 실질적 함의가 있다 — 10b-5 축은 주관 요건이 높아 기계 확정이 더욱 불가능하므로, F-03은 "판정"이 아니라 "표시 후 사람 판단"이어야 한다는 결론을 강화한다. + +- **탐지·flag 반영**: 간접 ✕ (탐지 대상의 실체 정의, 유통 축). §3.1과 함께 fraudPatternRules의 근거 규범. + +- **ERC-3643 변환**: 직접 매핑 없음. F-03이 발행(R1) 이후에도 유통(R2)·펀드 상시(R3) 거래에 붙어 post-trade로 작동하는 구조가 "in connection with the purchase or sale"의 시간적 범위에 대응한다. + +### 3.4 Aaron v. SEC, 446 U.S. 680 (1980) — §17(a) 각 항의 scienter 차등 [govinfo.gov] + +- **조항**: Aaron v. SEC, 446 U.S. 680 (1980) — govinfo.gov (U.S. Reports) + +- **핵심 판시(holding)**: 대법원은 SEC 집행에서 증권법 §17(a)(1)은 scienter(고의)를 요구하지만, §17(a)(2)와 §17(a)(3)은 scienter를 요구하지 않는다(과실로 족하다)고 판시하였다. (문언 근거 — (a)(1)의 "device, scheme, or artifice to defraud"는 고의를 함축하나, (a)(2)의 "untrue statement … or … omission"과 (a)(3)의 "operates … as a fraud or deceit"는 그 문언 자체가 고의를 요구하지 않는다.) + +- **한국어**: §17(a)(1)은 고의가 있어야 위반이 되지만, §17(a)(2)·(3)은 과실만 있어도 SEC가 집행할 수 있다. + +- **쉬운 설명**: 이 판례가 F-03에 중요한 이유는 "몰랐다"·"실수였다"가 방어가 아님을 확정하기 때문이다. venue가 사기적 거래를 "고의로" 도운 것이 아니어도, 과실로 방치했다면 §17(a)(2)·(3) 사정권에 들어간다. 쉽게 말하면 — 관찰 체계를 두지 않은 것 자체가 과실로 평가될 수 있고, 그래서 F-03 같은 상시 감시가 "있으면 좋은 것"이 아니라 "책임을 줄이는 필수 장치"가 된다. 동시에 이 판례는 §3.5(10b-5=고의 요구)와 대비되어, 두 축의 문턱이 다름을 보여준다 — F-03의 탐지 규칙은 이 차등을 반영해 과실 수준의 신호(비정형·무경제목적 거래)까지 폭넓게 포착하되, 최종 SAR 판단은 사람이 사실관계로 한다. + +- **탐지·flag 반영**: 직접 ○ (설계 방향 근거). "관찰 부재 = 위험" 및 "광범위 탐지" 원칙의 판례 근거. + +- **ERC-3643 변환**: 직접 매핑 없음. 탐지 감도(sensitivity) 설정을 보수적(넓게)으로 두는 정책 파라미터의 근거. + +### 3.5 Ernst & Ernst v. Hochfelder, 425 U.S. 185 (1976) — Rule 10b-5는 scienter 요구 [govinfo.gov] + +- **조항**: Ernst & Ernst v. Hochfelder, 425 U.S. 185 (1976) — govinfo.gov (U.S. Reports) + +- **핵심 판시(holding)**: 대법원은 §10(b)와 Rule 10b-5에 따른 사적 손해배상 청구에서 과실만으로는 부족하고 scienter — 기망·조작의 고의(intent to deceive, manipulate, or defraud) — 가 요구된다고 판시하였다. + +- **한국어**: §10(b)·Rule 10b-5 위반이 성립하려면 단순 과실이 아니라 기망·조작·사기의 고의(scienter)가 있어야 한다. + +- **쉬운 설명**: §3.4와 짝을 이루는 판례다 — 증권법 §17(a)(2)·(3)은 과실로 족하지만, 1934년법 10b-5는 고의를 요구한다. F-03 관점에서 이 판례의 쓸모는 두 가지다. 첫째, 10b-5 축의 문턱이 높다는 것은 기계가 "10b-5 위반"을 확정하는 게 원리적으로 불가능함을 뒷받침한다(고의는 기계가 읽을 수 없다) — 감시형 설계의 정당화. 둘째, 오탐 억제의 논거 — F-03이 flag를 다는 것은 "위반 확정"이 아니라 "사람이 볼 만한 신호가 있다"는 표시일 뿐이며, 고의 판단은 Operator의 사실 심사로 넘어간다. 쉽게 말하면, 기계는 의심의 문을 열 뿐 유죄를 선고하지 않는다. + +- **탐지·flag 반영**: 간접 ✕ (경계 논거). 감시형 채택과 flag의 성격(비확정성)을 규정. + +- **ERC-3643 변환**: 직접 매핑 없음. flag 이벤트의 의미를 "혐의 확정"이 아닌 "심사 트리거"로 문서화하는 근거. + +### 3.6 BSA §5318(g)(1) — 의심거래 보고 수권 [uscode.house.gov] + +- **조항**: Bank Secrecy Act §5318(g)(1), 31 U.S.C. §5318(g)(1) — uscode.house.gov + +- **핵심 원문**: (1) In general.—The Secretary may require any financial institution, and any director, officer, employee, or agent of any financial institution, to report any suspicious transaction relevant to a possible violation of law or regulation. + +- **한국어**: (1) 일반. 재무장관은 모든 금융기관과 그 이사·임원·직원·대리인에게, 법 또는 규정의 가능한 위반과 관련된 의심거래를 보고하도록 요구할 수 있다. + +- **쉬운 설명**: 의심거래 보고(SAR) 제도의 뿌리 조문이다. 핵심 단어는 "any suspicious transaction relevant to a possible violation"(가능한 위반과 관련된 의심거래) — 확정된 위반이 아니라 "가능한 위반"이면 족하고, "의심"이라는 낮은 문턱을 쓴다. 이것이 F-03이 왜 확정 판정이 아니라 의심 표시로 작동하는지를 법 문언으로 확정한다. 쉽게 말하면, 법은 "사기라고 증명하면 신고하라"가 아니라 "의심되면 신고하라"고 한다. 다만 이 조문은 재무장관에게 "요구할 수 있다"는 권한만 준다 — 실제 의무는 그 권한을 행사해 만든 규칙(브로커-딜러는 §3.7의 1023.320)에서 구체화된다. + +- **탐지·flag 반영**: 직접 ○ (SAR 의무의 상위 수권). F-03의 보고 계층 전체가 이 조문 위에 선다. + +- **ERC-3643 변환**: 직접 매핑 없음. off-chain SAR 워크플로(sarPipeline)의 최상위 근거. + +### 3.7 31 C.F.R. §1023.320(a)·(b) — 브로커-딜러 SAR: 문턱·4유형·시한 [ecfr.gov] + +- **조항**: 31 C.F.R. §1023.320(a), (b) — ecfr.gov (Title 31 현행본, 2026-06-16 기준) + +- **핵심 원문 (a)(1)·(a)(2)**: (a)(1) Every broker or dealer in securities within the United States (for purposes of this section, a "broker-dealer") shall file with FinCEN, to the extent and in the manner required by this section, a report of any suspicious transaction relevant to a possible violation of law or regulation. … (a)(2) A transaction requires reporting under the terms of this section if it is conducted or attempted by, at, or through a broker-dealer, it involves or aggregates funds or other assets of at least $5,000, and the broker-dealer knows, suspects, or has reason to suspect that the transaction (or a pattern of transactions of which the transaction is a part): (i) Involves funds derived from illegal activity or is intended or conducted in order to hide or disguise funds or assets derived from illegal activity … as part of a plan to violate or evade any Federal law or regulation or to avoid any transaction reporting requirement under Federal law or regulation; (ii) Is designed, whether through structuring or other means, to evade any requirements of this chapter or of any other regulations promulgated under the Bank Secrecy Act; (iii) Has no business or apparent lawful purpose or is not the sort in which the particular customer would normally be expected to engage, and the broker-dealer knows of no reasonable explanation for the transaction after examining the available facts, including the background and possible purpose of the transaction; or (iv) Involves use of the broker-dealer to facilitate criminal activity. + +- **핵심 원문 (b)(3) When to file**: A SAR shall be filed no later than 30 calendar days after the date of the initial detection by the reporting broker-dealer of facts that may constitute a basis for filing a SAR under this section. If no suspect is identified on the date of such initial detection, a broker-dealer may delay filing a SAR for an additional 30 calendar days to identify a suspect, but in no case shall reporting be delayed more than 60 calendar days after the date of such initial detection. + +- **한국어**: (a)(1) 미국 내 모든 브로커-딜러는 이 조가 요구하는 범위·방식으로, 법·규정의 가능한 위반과 관련된 의심거래 보고서를 FinCEN에 제출하여야 한다. (a)(2) 어떤 거래가 브로커-딜러에 의해·에서·를 통하여 이루어지거나 시도되고, 자금 또는 자산이 최소 $5,000을 포함하거나 합산하며, 브로커-딜러가 그 거래(또는 그 거래가 일부를 이루는 거래 패턴)가 다음 중 하나에 해당함을 알거나·의심하거나·의심할 이유가 있는 경우 이 조에 따른 보고가 요구된다 — (i) 불법활동에서 파생된 자금을 포함하거나, 불법 파생 자금·자산을 은닉·위장하려는(연방법·규정 위반·회피 또는 보고요건 회피 계획의 일부로) 것; (ii) structuring 등으로 이 장(章) 또는 BSA 하 규정의 요건을 회피하도록 설계된 것; (iii) 사업적·외견상 적법 목적이 없거나 해당 고객이 통상 관여할 만한 종류가 아니고, 브로커-딜러가 가용 사실(배경·가능한 목적 포함)을 검토한 뒤에도 합리적 설명을 알지 못하는 것; 또는 (iv) 브로커-딜러를 범죄활동 조력에 이용하는 것. (b)(3) SAR는 보고 브로커-딜러가 SAR 제출 근거가 될 수 있는 사실을 최초 인지한 날로부터 30역일 이내에 제출하여야 한다. 최초 인지일에 suspect가 특정되지 않으면 특정을 위해 추가 30역일 지연할 수 있으나, 어떤 경우에도 최초 인지일로부터 60역일을 넘겨 지연할 수 없다. + +- **쉬운 설명**: F-03의 판정 파라미터가 전부 여기 있다. (1) 문턱 — 관여·합산 금액이 $5,000 이상(≥, 초과 아님). (2) 4유형 — 불법자금·은닉, structuring/회피, 무경제목적·비정형, 범죄조력. 이 중 하나라도 "의심"에 걸리면 대상이다. (3) 판단 기준 — "knows, suspects, or has reason to suspect"(알거나·의심하거나·의심할 이유가 있음)라는 낮고 넓은 기준. (4) 패턴 — 단건뿐 아니라 "pattern of transactions"까지 봐야 한다(연속 거래 집계). (5) 시한 — 최초 인지 후 30일 이내, suspect 미특정 시 +30일(총 최대 60일). 쉽게 말하면, F-03의 탐지 엔진은 "$5,000 넘고 이 네 냄새 중 하나가 나면 표시"이고, 표시된 순간 30일 시계가 돌기 시작한다. (a)(2)의 "conducted or attempted … by, at, or through"는 시도된 거래·중개된 거래도 포함하므로, 미체결 시도까지 신호원에 넣어야 한다. + +- **탐지·flag 반영**: 직접 ○ (판정 파라미터의 본체). §5.2 탐지 파이프라인이 이 문턱·4유형·시한과 1:1 대응한다. + +- **ERC-3643 변환**: 온체인 강제 없음(비게이트). 파라미터화 — SAR_THRESHOLD_USD = 5000 (부등호 ≥), SUSPICION_CATEGORIES = {ILLICIT_FUNDS, STRUCTURING_EVASION, NO_LAWFUL_PURPOSE, CRIME_FACILITATION}, FILE_DEADLINE_DAYS = 30 (+30 최대 60). 탐지는 Transfer 이벤트를 소비하는 off-chain 엔진; 온체인은 아무 것도 revert하지 않는다. + +### 3.8 31 C.F.R. §1023.320(d)·(e) — 보존(5년) + 기밀(no-tipping-off) [ecfr.gov] + +- **조항**: 31 C.F.R. §1023.320(d), (e) — ecfr.gov + +- **핵심 원문 (d) Retention of records**: A broker-dealer shall maintain a copy of any SAR filed and the original or business record equivalent of any supporting documentation for a period of five years from the date of filing the SAR. Supporting documentation shall be identified as such and maintained by the broker-dealer, and shall be deemed to have been filed with the SAR. + +- **핵심 원문 (e)(1)(i) General rule**: No broker-dealer, and no director, officer, employee, or agent of any broker-dealer, shall disclose a SAR or any information that would reveal the existence of a SAR. Any broker-dealer, and any director, officer, employee, or agent of any broker-dealer that is subpoenaed or otherwise requested to disclose a SAR or any information that would reveal the existence of a SAR, shall decline to produce the SAR or such information, citing this section and 31 U.S.C. 5318(g)(2)(A)(i), and shall notify FinCEN of any such request and the response thereto. + +- **한국어**: (d) 브로커-딜러는 제출한 SAR 사본과 근거자료의 원본 또는 영업기록 상당본을 SAR 제출일로부터 5년간 보존하여야 한다. 근거자료는 그렇게 식별·보존되며 SAR와 함께 제출된 것으로 간주된다. (e)(1)(i) 어떤 브로커-딜러도, 그 이사·임원·직원·대리인도, SAR 또는 SAR의 존재를 드러낼 어떤 정보도 공개하여서는 아니 된다. SAR 또는 그 존재를 드러낼 정보의 공개를 소환·요청받은 경우, 본 조와 31 U.S.C. 5318(g)(2)(A)(i)를 인용하여 제출을 거부하고, 그러한 요청과 그에 대한 대응을 FinCEN에 통지하여야 한다. + +- **쉬운 설명**: 이 두 조항이 F-03 아키텍처의 급소다. (d) 보존 — SAR와 근거자료를 5년간 보존해야 한다. F-03이 만드는 flag·심사 기록·근거 스냅샷은 이 보존 의무의 대상이며, B-01의 보존 체계(≥3년, 버전 사슬 = 존속기간)에 편입되어야 한다(Rule 17a-8의 "longer period"까지 겹치면 더 긴 기간 적용, §3.10). (e) 기밀 — 이것이 결정적이다. "SAR 또는 SAR의 존재를 드러낼 어떤 정보도 공개 금지"는, F-03의 flag·SAR 사실을 공개 블록체인 원장에 남기면 안 된다는 것을 뜻한다. 온체인은 누구나 읽을 수 있으므로, 특정 지갑에 "flag" 이벤트를 공개적으로 방출하면 그 자체가 SAR 존재의 노출이 되어 위반이다. 쉽게 말하면 — F-03의 탐지 로직은 이벤트를 읽지만, 그 결과(flag·SAR)는 오프체인 기밀 저장소에 두어야 한다. 온체인에 둘 수 있는 것은 SAR 존재를 드러내지 않는 최소한(예: 아무 것도 안 두거나, 무의미한 해시조차 피함)뿐이다. + +- **탐지·flag 반영**: 직접 ○ ((d)는 보존, (e)는 노출 경계의 근거). §6.4(노출 경계)와 §11(Operator·저장) 설계의 1차 근거. + +- **ERC-3643 변환**: 핵심 제약 — flag·SAR 상태는 온체인 저장·이벤트 금지(NO_ONCHAIN_SAR_TRACE). ONCHAINID는 SAR 대상 식별에 오프체인에서만 참조. 보존 필드 — sarRecord retention ≥ 5y(제출일 기산), off-chain 암호화 저장, B-01 export 파이프라인 편입. + +### 3.9 BSA §5318(g)(2)·(g)(3) — 통지금지·안전항 [uscode.house.gov] + +- **조항**: Bank Secrecy Act §5318(g)(2)·(g)(3), 31 U.S.C. §5318(g)(2)·(g)(3) — uscode.house.gov + +- **핵심 원문 (g)(2)(A)(i)**: If a financial institution or any director, officer, employee, or agent of any financial institution, voluntarily or pursuant to this section or any other authority, reports a suspicious transaction to a government agency— (i) neither the financial institution, director, officer, employee, or agent of such institution (whether or not any such person is still employed by the institution), nor any other current or former director, officer, or employee of, or contractor for, the financial institution or other reporting person, may notify any person involved in the transaction that the transaction has been reported … + +- **핵심 원문 (g)(3)(A)**: Any financial institution that makes a voluntary disclosure of any possible violation of law or regulation to a government agency or makes a disclosure pursuant to this subsection or any other authority, and any director, officer, employee, or agent of such institution who makes, or requires another to make any such disclosure, shall not be liable to any person under any law or regulation of the United States, any constitution, law, or regulation of any State or political subdivision of any State, or under any contract or other legally enforceable agreement (including any arbitration agreement), for such disclosure or for any failure to provide notice of such disclosure to the person who is the subject of such disclosure or any other person identified in the disclosure. + +- **한국어**: (g)(2)(A)(i) 금융기관 또는 그 이사·임원·직원·대리인이 자발적으로 또는 이 조·기타 권한에 따라 의심거래를 정부기관에 보고한 경우 — (i) 그 금융기관·이사·임원·직원·대리인(현재 재직 여부 불문)도, 그 금융기관 또는 보고자의 다른 현·전직 이사·임원·직원 또는 계약자도, 거래에 관여한 어떤 자에게도 그 거래가 보고되었음을 통지하여서는 아니 된다. (g)(3)(A) 법·규정의 가능한 위반을 정부기관에 자발적으로 공개하거나 이 항·기타 권한에 따라 공개하는 금융기관과, 그러한 공개를 하거나 타인에게 하게 하는 그 이사·임원·직원·대리인은, 그 공개 또는 공개 대상자·피식별자에 대한 통지 불이행에 대하여, 미국 또는 주(州)의 어떤 법·규정·헌법·계약(중재합의 포함)에 따라서도 누구에게도 책임을 지지 아니한다. + +- **쉬운 설명**: 두 조항이 F-03의 노출 경계와 신고 유인을 함께 정한다. (g)(2) 통지금지(no-tipping-off) — 신고했다는 사실을 거래 당사자에게 알리면 안 된다. §3.8(e)가 BD 레벨에서 이를 구체화한 것이고, 이 상위 조문이 그 뿌리다. (g)(3) 안전항 — 선의로 신고하면(또는 대상자에게 통지하지 않아도) 어떤 법·계약으로도 책임지지 않는다. 이 비대칭이 F-03 설계 철학을 정한다 — "신고하면 면책, 신고 안 하고 방치하면 §17(a)·10b-5·BSA 위반 노출"이므로, 의심이 서면 신고 쪽으로 기우는 것이 법적으로 안전하다. 쉽게 말하면, F-03은 오탐을 두려워해 표시를 아끼기보다, 신호를 폭넓게 잡아 사람의 판단으로 올리고, 사람이 신고를 결정하면 안전항이 뒤를 받친다. + +- **탐지·flag 반영**: 직접 ○ ((g)(2)=노출 경계, (g)(3)=신고 유인·감도 정책). §6.4·§8.2 설계의 근거. + +- **ERC-3643 변환**: 직접 매핑 없음. no-tipping-off를 프런트·알림·오류메시지 계층에 강제하는 불변식(customerFacingSurface must not encode flag/SAR)과, 탐지 감도를 보수적으로 두는 정책의 근거. + +### 3.10 Rule 17a-8 + BSA §5312(a)(2)(G) — BD 지위와 BSA 의무의 연결 [ecfr.gov · uscode.house.gov] + +- **조항**: 17 C.F.R. §240.17a-8 — ecfr.gov (Title 17 현행본, 2026-07-17 기준); 31 U.S.C. §5312(a)(2)(G) — uscode.house.gov + +- **핵심 원문 (Rule 17a-8)**: Every registered broker or dealer who is subject to the requirements of the Currency and Foreign Transactions Reporting Act of 1970 shall comply with the reporting, recordkeeping and record retention requirements of chapter X of title 31 of the Code of Federal Regulations. Where chapter X of title 31 of the Code of Federal Regulations and § 240.17a-4 of this chapter require the same records or reports to be preserved for different periods of time, such records or reports shall be preserved for the longer period of time. + +- **핵심 원문 (§5312(a)(2)(G))**: "financial institution" means— … (G) a broker or dealer registered with the Securities and Exchange Commission under the Securities Exchange Act of 1934 (15 U.S.C. 78a et seq.); + +- **한국어**: (Rule 17a-8) 1970년 Currency and Foreign Transactions Reporting Act의 요건에 복종하는 모든 등록 브로커-딜러는 연방규정 Title 31 Chapter X의 보고·기록작성·기록보존 요건을 준수하여야 한다. Title 31 Chapter X와 본 장 §240.17a-4가 동일 기록·보고를 서로 다른 기간 보존하도록 요구하는 경우, 그 기록·보고는 더 긴 기간 동안 보존하여야 한다. (§5312(a)(2)(G)) "금융기관"이란 — (G) 1934년 증권거래소법에 따라 SEC에 등록된 브로커 또는 딜러를 포함한다. + +- **쉬운 설명**: 이 두 조문이 "왜 증권 거래 venue에 BSA SAR 의무가 걸리는가"를 잇는다. §5312(a)(2)(G)는 BSA가 정의하는 "금융기관"에 등록 BD를 명시적으로 포함하고, Rule 17a-8은 등록 BD가 Chapter X(1023.320 포함)를 준수해야 한다고 못박는다. 즉 SAR 의무는 "증권 규제"가 아니라 "BSA"에서 나오지만, 등록 BD라는 지위를 통해 증권 venue에 걸린다. F-03에 중요한 함의 — SAR 보고 의무의 활성화는 BD 등록을 조건으로 한다. Decipher가 BD로 등록·운영하면 F-03의 보고 계층이 법적 의무가 되고, 아직 아니라면(§12) F-03은 탐지·기록을 갖추되 보고 의무는 잠재 상태다. Rule 17a-8의 "longer period"는 또 다른 실무 포인트 — 1023.320(d)의 5년 SAR 보존과 17a-4의 기록 보존이 겹치면 더 긴 기간을 적용하므로, F-03 기록의 보존 파라미터는 두 규칙의 최댓값으로 설정해야 한다. + +- **탐지·flag 반영**: 조건부 △ (활성화 조건). BD 등록 시 §3.6~§3.9 의무가 F-03에 부착; 미등록 시 탐지·기록만 유지. + +- **ERC-3643 변환**: 활성화 플래그 — bdRegistered(boolean, Operator·거버넌스 평면 사실). true면 sarObligationActive = true. 보존 기간은 max(1023.320(d) 5y, 17a-4 해당 항목)로 산정. + +### 3.11 BSA §5318(h) — AML 프로그램 최소 요건 [uscode.house.gov] + +- **조항**: Bank Secrecy Act §5318(h)(1), 31 U.S.C. §5318(h)(1) — uscode.house.gov + +- **핵심 원문**: (1) In general.—In order to guard against money laundering through financial institutions, each financial institution shall establish anti-money laundering programs, including, at a minimum— (A) the development of internal policies, procedures, and controls; (B) the designation of a compliance officer; (C) an ongoing employee training program; and (D) an independent audit function to test programs. + +- **한국어**: (1) 일반. 금융기관을 통한 자금세탁을 방지하기 위하여, 각 금융기관은 최소한 다음을 포함하는 자금세탁방지(AML) 프로그램을 수립하여야 한다 — (A) 내부 정책·절차·통제의 개발; (B) 컴플라이언스 책임자(compliance officer)의 지정; (C) 상시 임직원 교육 프로그램; (D) 프로그램을 시험하는 독립 감사 기능. + +- **쉬운 설명**: 감시가 개별 규칙만으로 작동하지 않음을 정한 조문이다 — 탐지 로직 뒤에 제도(정책·책임자·교육·독립감사)가 있어야 한다. F-03은 기술 부품이지만 그 운영은 이 네 기둥 위에서 굴러가야 한다. 특히 (B) 컴플라이언스 책임자와 (D) 독립 감사는 F-03의 Operator 계층(§11)이 누구의 책임 아래 있고 누가 그 판단을 검증하는지를 규정한다. 쉽게 말하면, F-03의 자동 탐지는 이 프로그램의 "감시 도구"이고, 사람과 절차가 그 도구를 운영·검증한다. + +- **탐지·flag 반영**: 간접 ✕ (제도 요건). F-03 자체의 판정 조건은 아니나, Operator 계층의 최소 골격을 정의. + +- **ERC-3643 변환**: 직접 매핑 없음. Operator 운영 요건(§11)의 근거 — 탐지 규칙 변경 거버넌스, 심사자 자격, 독립 감사 로그. + +### 3.12 Sub-요건 분해 매트릭스 + +위 §3.1~§3.11의 원리를, F-03이 실제로 수행하는 원자적 탐지·처리 단위로 분해한다. 각 행은 §5.2의 탐지 파이프라인 분기와 1:1 대응한다(단계 표기: D = 탐지, S = 상태전이, GOV = 거버넌스/Operator 평면 전제). F-03은 게이트가 아니므로 "FAIL 코드"가 아니라 flag 상태를 산출한다. + +| Sub-ID | 원자 단위 | 근거 원리 | 단계 | 트리거 조건 | 산출 상태 | +| --- | --- | --- | --- | --- | --- | +| F03-D1 | 금액 문턱 | 1023.320(a)(2) "at least $5,000" | D | 관여·합산 금액 ≥ $5,000 | 통과 시 D2로, 미만 시 NO_FLAG | +| F03-D2a | 유형(i) 불법자금·은닉 | 1023.320(a)(2)(i)·§17(a)·10b-5 | D | 불법 파생·은닉·위장 신호 | 해당 시 DETECTED | +| F03-D2b | 유형(ii) structuring/회피 | 1023.320(a)(2)(ii) | D | 분할·구조화로 보고요건 회피 신호 | 해당 시 DETECTED | +| F03-D2c | 유형(iii) 무경제목적·비정형 | 1023.320(a)(2)(iii)·§17(a)(3) | D | 사업목적 결여·고객 비정형·설명 부재 | 해당 시 DETECTED | +| F03-D2d | 유형(iv) 범죄조력 | 1023.320(a)(2)(iv) | D | venue를 범죄활동 조력에 이용 | 해당 시 DETECTED | +| F03-D3 | 패턴 집계 | 1023.320(a)(2) "pattern of transactions"·§17(a)(3) | D+S | 단건 미달이나 연속 거래 패턴이 유형 해당 | DETECTED(패턴 사유) | +| F03-D4 | 시도 거래 포함 | 1023.320(a)(2) "conducted or attempted" | D | 미체결 시도가 유형 해당 | DETECTED | +| F03-S1 | 최초 인지 시각 확정 | 1023.320(b)(3) "initial detection" | S | DETECTED 최초 시점 기록 | 30일 시계 시작 | +| F03-S2 | 심사 진입 | §5318(h)·Operator | S+GOV | DETECTED → Operator 큐 | UNDER_REVIEW | +| F03-S3a | suspect 특정 지연 | 1023.320(b)(3) "additional 30 … max 60" | S | suspect 미특정 | 시한 +30(총 ≤60일) | +| F03-S4a | SAR 제출 | 1023.320(a)(1)·(b)·§5318(g)(1) | S+GOV | 의심 확인(사람 판단) | SAR_FILED(FinCEN) | +| F03-S4b | 해소·종결 | §5318(g)(1)(의심 부재) | S+GOV | 합리적 설명 확인 | CLEARED / NO_ACTION | +| F03-C1 | 노출 경계 불변식 | 1023.320(e)·§5318(g)(2) | S(상시) | 고객대면 표면에 flag/SAR 인코딩 시도 | 차단(위반 방지) | +| F03-C2 | 보존 | 1023.320(d)·17a-8 | S(상시) | SAR·근거·심사기록 | 보존 max(5y, 17a-4) | +| F03-C3 | 온체인 비노출 불변식 | 1023.320(e) | S(상시) | flag/SAR의 온체인 이벤트·저장 시도 | 금지(off-chain만) | + +정책 vs 법정 구분 — F03-D1(≥$5,000)·D2a~d(4유형)·S1·S3a·S4·C1~C3은 법정(규칙 문언). 탐지 감도(얼마나 넓게 신호를 잡을지)·심사 처리 SLA(내부 며칠)는 정책이되, 법정 시한(30/60일)을 초과할 수 없다는 상한 제약을 받는다. + +### 3.13 ERC-3643 변환 총정리 — Compliance Module·이벤트 매핑 (claim.basis 해당 없음) + +F-03은 증명서형(Pattern B) 부품이 아니므로 claim.basis 값을 산출하지 않는다(A-13의 QP_* 6종 체계는 F-03에 적용되지 않는다). F-03의 ERC-3643/T-REX 매핑은 (1) 게이트가 아닌 사후 관찰 계층이라는 점, (2) 결과물의 온체인 비노출이라는 점 두 가지로 규정된다. + +| 항목 | 매핑 | 근거 | 비고 | +| --- | --- | --- | --- | +| 판정 성격 | 비게이트(canTransfer 반환 불변) | §1.3·§3.7 | Compliance의 transfer 허부에 관여하지 않음 | +| 데이터 입력 | Transfer/created 이벤트 소비(off-chain 감시 엔진) | §3.3·§3.7 | post-trade, 온체인 revert 없음 | +| 대상 식별 | ONCHAINID(대상 지갑·인물) — off-chain 참조만 | §3.8(e) | 온체인 flag 이벤트로 노출 금지 | +| 상태 저장 | off-chain 암호화 flag store(STATEFUL) | §3.8(e)·C3 | 온체인 저장·이벤트 금지(NO_ONCHAIN_SAR_TRACE) | +| 파라미터 | SAR_THRESHOLD_USD=5000(≥) · CATEGORIES={ILLICIT_FUNDS, STRUCTURING_EVASION, NO_LAWFUL_PURPOSE, CRIME_FACILITATION} · FILE_DEADLINE_DAYS=30(+30, ≤60) | §3.7 | Operator·거버넌스 변경 관리 대상 | +| 활성화 | bdRegistered → sarObligationActive | §3.10 | 미등록 시 탐지·보존만 | +| 상시 불변식 | customerFacingSurface ∌ {flag, SAR}; onChain ∌ {flag, SAR} | §3.8·§3.9 | no-tipping-off의 기술 강제 | +| 보존 | sarRecord ≥ 5y(제출일) · flag/심사기록 → B-01 export | §3.8(d)·§3.10 | max(5y, 17a-4) | +| 상태 enum | {NO_FLAG · DETECTED · UNDER_REVIEW · SAR_FILED · CLEARED · NO_ACTION} | §6.2 | 거절 코드 아님 | +| forcedTransfer/freeze | F-03의 도구 아님 | — | 그것은 사후 시정(remediation)이지 F-03의 flag가 아님 | + +핵심 두 문장 — (1) F-03은 온체인 컴플라이언스 게이트가 아니라 오프체인 관찰·보고 계층이다. (2) 그 결과물(flag·SAR)은 공개원장에 흔적을 남기면 안 된다 — 1023.320(e)의 기밀 의무 때문이다. + +--- + +## §4. 입력 사실 (Input Facts) + +> F-03이 무엇을 "표시"하려면 무엇을 읽어야 하는가. 이 절은 탐지 엔진이 소비하는 신호와 그 수집 경로를 정리한다. F-03은 판정(PASS/FAIL)이 아니라 탐지(flag)를 하므로, "증거"는 자격 증명이 아니라 거래 행태의 신호다. + +### 4.1 탐지에 필요한 데이터 + +F-03의 탐지는 세 종류의 신호를 결합한다. (1) 거래 자체 — 금액(≥$5,000 판정), 상대방, 타이밍, 방향, 자산. (2) 거래 그래프·패턴 — 동일·연계 당사자의 연속 거래(structuring·집계 판정), 순환 흐름, 급변 행태. (3) 참가자 사실 — 다른 부품이 이미 산출한 신원·자격 신호(A-01 제재, A-04 신원중복, A-12 red flag, A-06 affiliate/insider link). F-03은 이 사실들을 새로 판단하지 않고 소비한다 — 판단 경계는 §9.1. + +### 4.2 Data field — 감시 엔진이 읽는 항목 + +| 필드 | 출처 | 용도(어느 유형·Sub-ID) | +| --- | --- | --- | +| tx.amountUsd | Router 이벤트 | F03-D1(≥$5,000) | +| tx.counterparties | Router 이벤트 + Identity Registry | F03-D2c·D3(비정형·패턴) | +| tx.timestamp / block | 체인 | F03-S1(최초 인지 시각), 시간 산술(§5.4) | +| tx.attempted(flag) | Router(미체결 시도 로그) | F03-D4(시도 포함) | +| graph.recentByParty | off-chain 집계 저장 | F03-D2b·D3(structuring·패턴) | +| kyc.redFlags | A-12 산출 | F03-D2c(무경제목적·설명부재) | +| party.affiliateLink | A-06 산출 | F03-D2a·insider link(§9.2) | +| party.sanctionsHit | A-01 산출 | F03-D2a·D2d(불법·조력 신호 보강) | +| party.identityDedup | A-04 산출 | F03-D2b(위장 다지갑 → 구조화 신호) | +| bdRegistered | 거버넌스 평면 | 활성화(§3.10) | + +### 4.3 수집 경로 — post-trade 이벤트 스트림 + +1. 체결 확정 → Router가 post-trade 이벤트 방출(체결·시도 모두). +2. off-chain 감시 엔진이 이벤트를 구독, 금액·당사자·타이밍을 읽음. +3. 엔진이 그래프 저장소를 조회해 최근 연계 거래(패턴) 집계. +4. 엔진이 A-01·A-04·A-06·A-12의 산출 신호를 조인. +5. 규칙 매칭(§5.2) → flag 상태 결정 → off-chain 기밀 flag store에 기록(온체인 아님). + +이 경로 전체가 사후다 — 어느 단계도 거래를 되돌리지 않는다. F-03이 시정(forcedTransfer·freeze)을 촉발할 수는 있으나, 그것은 F-03의 산출이 아니라 Operator가 별도 부품·권한으로 내리는 후속 조치다(§9.1·§10). + +### 4.4 탐지 유형별 필수 확인 항목 (전체 표) + +아래는 1023.320(a)(2) 4유형 각각에 대해 F-03이 반드시 확인하는 신호의 전체 표다("예시"가 아니라 필수 확인 항목). 공통 행(금액 문턱·패턴·시도)은 모든 유형에 선행 적용된다. + +| 구분 | 필수 확인 항목 | 근거 | +| --- | --- | --- | +| 공통-① 금액 | 관여·합산 ≥ $5,000 (단건 또는 집계) | 1023.320(a)(2) | +| 공통-② 패턴 | 연속·연계 거래 집계(단건 미달도 패턴이면 대상) | 1023.320(a)(2) "pattern" | +| 공통-③ 시도 | 미체결 시도도 신호원에 포함 | 1023.320(a)(2) "attempted" | +| 유형(i) 불법자금 | 불법 파생 자금 여부·은닉/위장 정황·보고요건 회피 목적 | (a)(2)(i)·§17(a)·10b-5 | +| 유형(ii) 회피 | 분할·구조화·계좌/지갑 분산으로 BSA 요건 회피 설계 | (a)(2)(ii) | +| 유형(iii) 무목적 | 사업·적법 목적 결여, 고객 통상 행태 이탈, 가용사실 검토 후 합리적 설명 부재 | (a)(2)(iii)·§17(a)(3) | +| 유형(iv) 조력 | venue를 범죄활동 조력에 이용하는 정황 | (a)(2)(iv) | +| 판단 기준 | "knows / suspects / has reason to suspect" — 확정 아님, 의심 문턱 | (a)(2) chapeau·§5318(g)(1) | + +주의 — 유형(iii)의 "합리적 설명 부재"는 F-03 혼자 확정하지 못한다. 기계는 "설명이 없어 보인다"는 신호까지만 만들고, "합리적 설명이 정말 없는가"의 최종 평가는 Operator가 가용 사실을 검토해 판단한다(§5.5·§11). + +--- + +## §5. 판정 로직 — 어떻게 flag가 결정되는가 (Detection Logic) + +> F-03에는 "PASS/FAIL"이 없다. 대신 "표시(flag)하느냐, 표시했다면 어떤 사유·상태로 두느냐"가 있다. 이 절은 그 탐지·상태전이 파이프라인을 흐름도·의사코드·임계표로 편다. 핵심 원칙 — 싸고 잘 걸러지는 검사(금액 문턱)를 먼저, 사실판단이 필요한 검사(유형·설명 부재)를 나중에, 사람의 최종 판단(SAR)은 맨 끝에. + +### 5.0 판정 흐름 플로우차트 + +아래 그림은 체결 이벤트에서 시작해 신호 수집 → 금액 문턱 → 4유형 매칭 → flag 적재(30일 시계) → Operator 심사 → SAR 제출/해소 → 보존으로 이어지는 런타임 흐름이다. 전 구간에 no-tipping-off 경계가 상시 적용된다. 각 분기는 §5.2 의사코드와 1:1 대응한다. + +![F-03 런타임 탐지·flag 흐름](F-03_fig50.png) + +### 5.1 개념 — 게이트가 아니라 사후 표시 (STATEFUL flag) + +C-08 같은 상태추적형은 STATEFUL이면서도 결국 거래를 FAIL시킬 수 있는 게이트다. F-03은 STATEFUL이지만 게이트가 아니다 — 거래는 이미 체결되었고, F-03은 그 위에서 flag를 적재·전이할 뿐이다. 두 개의 상태 축이 있다. (1) flag 상태 — {NO_FLAG · DETECTED · UNDER_REVIEW · SAR_FILED · CLEARED · NO_ACTION}. (2) 시계 상태 — 최초 인지 시각으로부터 30일(+30, 최대 60일)의 법정 카운트다운. 두 축은 함께 움직인다 — DETECTED가 되는 순간 시계가 시작되고, SAR_FILED/CLEARED가 되면 그 인지 건의 시계가 멈춘다. + +### 5.2 탐지 파이프라인 Pseudocode + 단계별 해설 + +``` +# post-trade 이벤트 소비 (체결·시도 모두). 어떤 경로도 거래를 되돌리지 않는다. +function onPostTrade(tx): + signals = collect(tx) # 4.2 필드 + A-01/A-04/A-06/A-12 조인 + + # [1] 금액 문턱 — 싸고 잘 걸러지는 검사 먼저 (F03-D1) + amt = tx.amountUsd + aggregated = aggregateRecent(tx.parties) # 패턴 집계 (F03-D3) + if max(amt, aggregated) < 5000: # 부등호: ≥ 5000 이 대상, 미만은 제외 + record(tx, NO_FLAG); return # 기록만 (보고 불요) + + # [2] 4유형 규칙 매칭 — 사실판단 신호 (F03-D2a~d). 하나라도 해당하면 의심. + hits = [] + if matchIllicitFunds(signals): hits += ["ILLICIT_FUNDS"] # (a)(2)(i) + if matchStructuring(signals): hits += ["STRUCTURING_EVASION"] # (a)(2)(ii) + if matchNoLawfulPurpose(signals): hits += ["NO_LAWFUL_PURPOSE"] # (a)(2)(iii) + if matchCrimeFacilitation(signals): hits += ["CRIME_FACILITATION"] # (a)(2)(iv) + + if hits is empty: + record(tx, NO_FLAG); return # 문턱은 넘었으나 어느 냄새도 없음 + + # [3] flag 적재 + 시계 시작 (F03-S1). 온체인 아님 — off-chain 기밀 저장 (C3) + flagId = openFlag(tx, reasons=hits, state=DETECTED) + startClock(flagId, at=tx.timestamp, deadlineDays=30) # 1023.320(b)(3) + + # [4] Operator 큐로 (F03-S2). 여기서부터 사람 판단 (§5.5) + enqueueReview(flagId, state=UNDER_REVIEW) + # (이후 Operator: SAR_FILED → FinCEN 제출 / CLEARED·NO_ACTION → 근거 기록) + return + +# 상시 불변식 — 어느 고객대면 표면·온체인에도 flag/SAR 인코딩 금지 (F03-C1·C3) +invariant: customerFacingSurface excludes {flag, SAR} # 1023.320(e), §5318(g)(2) +invariant: onChainState/events exclude {flag, SAR} # 1023.320(e) +``` + +단계 해설. [1] 금액 문턱은 결정론적이고 값싸다 — 대다수 정상 거래를 여기서 NO_FLAG로 흘려보낸다. 단, 단건이 미달이어도 패턴 집계가 문턱을 넘으면 통과시킨다(structuring 대응). [2] 4유형 매칭은 신호 기반이며 본질적으로 불완전하다 — 특히 matchNoLawfulPurpose는 "설명 부재로 보임"까지만 판단하고 확정은 사람에게 넘긴다. [3] DETECTED가 되면 즉시 최초 인지 시각을 못박고 30일 시계를 켠다 — 이 시각 확정이 법정 시한 관리의 기준점이다. [4] 이후는 Operator 평면 — 기계는 문을 열 뿐 SAR를 결정하지 않는다. + +### 5.3 임계·시한 매트릭스 (부등호 규율) + +| 항목 | 값 | 부등호 | 근거 | 경계 처리 | +| --- | --- | --- | --- | --- | +| 보고 문턱 | $5,000 | ≥ (이상) | 1023.320(a)(2) "at least" | 정확히 $5,000 → 대상(문턱 넘음) | +| 제출 시한 | 30역일 | ≤ (이내) | 1023.320(b)(3) "no later than 30" | 30일째 제출 → 적시(시한 내) | +| 지연 상한 | 60역일 | ≤ (이내) | 1023.320(b)(3) "no case … more than 60" | 60일째 → 상한(초과 불가) | +| suspect 지연 | +30역일 | — | 1023.320(b)(3) "additional 30" | suspect 미특정 시에만 발동 | +| 판단 기준 | knows/suspects/reason to suspect | 낮은 문턱 | (a)(2)·§5318(g)(1) | 확정 아님 — 의심이면 대상 | +| 보존 | 5년(+17a-4 겹침 시 더 김) | ≥ | 1023.320(d)·17a-8 | 제출일 기산, max 적용 | + +부등호 정정 — C-08의 "≥ 규율은 통과, > 규율은 미달"과 방향이 다름에 유의. F-03에서 금액은 "$5,000 이상이면 대상"이고 시한은 "30일 이내면 적시"다. 즉 문턱은 대상 포함형(≥), 시한은 준수 포함형(≤)이다. 정확히 $5,000, 정확히 30일째는 모두 규칙 안쪽이다. + +### 5.4 시간 산술 — "initial detection"을 블록체인 이벤트로 어떻게 재나 + +1023.320(b)(3)의 시계는 "최초 인지일(date of initial detection of facts that may constitute a basis for filing)"에서 시작한다. F-03에서 이 시각은 [3] 단계에서 flag가 DETECTED로 열리는 순간이다 — 대개 체결 블록의 타임스탬프가 아니라 감시 엔진이 그 사실을 인지한 시점이다(패턴 집계로 뒤늦게 걸리면 인지 시점이 체결보다 늦을 수 있다). 실무 규율 — (1) DETECTED 시각을 감사가능하게 못박고(변경 불가 로그), (2) 이후 30일(+30) 카운트다운을 역일(calendar day)로 계산하며, (3) 패턴으로 뒤늦게 인지된 건은 "인지 시점"을 기준으로 하되 그 지연의 정당성(집계 주기)을 기록으로 남긴다. 블록 타임스탬프와 인지 시각의 괴리를 flag 기록에 함께 저장해 사후 검사 시 재구성 가능하게 한다. + +### 5.5 비결정성을 결정성으로 — 자동 탐지와 사람 판단의 경계 + +F-03 구현의 본질은 "기계가 확정할 수 있는 것"과 "사람만 확정할 수 있는 것"의 경계를 정확히 긋는 데 있다. 기계가 결정하는 것 — 금액 문턱(≥$5,000), 패턴 집계, 유형 규칙의 신호 해당 여부, 시계 관리, 노출 경계 불변식. 사람이 결정하는 것 — "합리적 설명이 정말 없는가", "이 정황이 의심을 정당화하는가", "SAR를 제출할 것인가". Aaron(§3.4)·Hochfelder(§3.5)가 보여주듯 사기·의심은 사실·때로 고의의 문제이고, 기계가 유죄를 선고할 수 없다. 그래서 F-03의 자동 부분은 "판정"이 아니라 "의심의 문을 여는 트리거"이고, 그 문 너머의 판단은 Operator가 사실관계로 한다. 이 경계 설정이 F-03이 오탐으로 거래를 부당 봉쇄하지 않으면서도(비게이트) 신호를 빠짐없이 사람에게 올리는(광범위 탐지·§3.4) 균형을 가능케 한다. + +--- + +## §6. flag 처리·에스컬레이션 (Handling & Escalation) + +> 다른 부품의 §6은 "거절·예외 처리"다. F-03은 거절하지 않으므로 이 절은 "표시된 것을 어떻게 다루는가"다. 특히 노출 경계(§6.4)는 F-03 고유의 급소 — 잘못 노출하면 그 자체가 위반이다. + +### 6.1 전체 흐름 (사람 말로) + +거래는 막지 않는다. 체결된 거래를 관찰하다 냄새가 나면 표시하고, 30일 시계를 켜고, 사람에게 올린다. 사람이 보고 의심이 확인되면 FinCEN에 신고하고, 해소되면 근거를 남기고 닫는다. 이 모든 과정에서 거래 당사자에게는 아무 것도 알리지 않는다. + +### 6.2 flag 상태·코드 + +거절 코드가 아니라 상태 전이다. 각 상태는 감사가능한 로그로 남고(오프체인·기밀), 시계 상태를 동반한다. + +| 상태 | 의미 | 진입 조건 | 시계 | +| --- | --- | --- | --- | +| NO_FLAG | 대상 아님(문턱 미달 또는 무해) | 금액 < $5,000 또는 유형 무해당 | 없음(기록만) | +| DETECTED | 의심 신호 포착, 심사 대기 | 문턱 통과 + 유형 1개 이상 | 30일 시작 | +| UNDER_REVIEW | Operator 심사 중 | DETECTED → 큐 진입 | 진행(+30 가능) | +| SAR_FILED | FinCEN에 SAR 제출 완료 | 사람 판단: 의심 확인 | 정지(제출) | +| CLEARED | 합리적 설명 확인, 종결 | 사람 판단: 의심 해소 | 정지 | +| NO_ACTION | 대상이나 보고 불요로 종결(근거 기록) | 사람 판단·예외(1023.320(c)) | 정지 | + +예외(1023.320(c)) 반영 — 강도/도난 등 별도 보고 경로가 있는 사안, 또는 SRO/SEC에 적절히 보고된 특정 위반은 SAR 대상에서 제외될 수 있다. 이 경우 NO_ACTION으로 종결하되 예외 의존의 근거를 기록·보존한다(1023.320(c)(2)). + +### 6.3 에스컬레이션·처리 시한 + +DETECTED → UNDER_REVIEW → 종결의 처리 SLA는 정책이되 법정 시한(30/60일)이 절대 상한이다. 운영 규율 — (1) DETECTED 즉시 Operator 큐 적재, (2) 내부 심사 목표는 법정 시한보다 짧게(예: 인지 후 수 영업일 내 1차 검토), (3) suspect 미특정으로 +30일을 쓰는 경우 그 사유를 기록, (4) 60일 상한 임박 건은 강제 에스컬레이션. 대시보드는 시계 잔여·상한 임박 큐를 상시 노출한다(단, 당사자 대면 표면에는 절대 노출 금지 — §6.4). + +### 6.4 노출 경계 — 매수인/매도인 대면 vs 내부 기밀 (F-03의 급소) + +이것이 F-03에서 가장 조심할 지점이다. 1023.320(e)·§5318(g)(2)는 SAR 또는 SAR의 존재를 드러낼 어떤 정보도 거래 당사자에게 노출하는 것을 금지한다(no-tipping-off). 따라서 두 정보 세계를 물리적으로 분리해야 한다. + +- 당사자 대면(매수인·매도인)에게 노출되는 것 — 아무 것도 없다. flag가 걸렸는지, SAR가 제출됐는지, 심사 중인지 일절 표시하지 않는다. 거래는 정상 체결된 그대로 보이며, 어떤 오류·경고·지연 메시지도 SAR/flag를 암시해서는 안 된다. "귀하의 거래가 검토 중입니다" 같은 문구조차 금지된다 — 그 자체가 신고 암시가 될 수 있다. +- 내부(Operator·컴플라이언스)에게만 존재하는 것 — flag 상태, 심사 큐, SAR 초안·제출 기록, 근거자료. 이는 오프체인 기밀 저장소에 두고 접근을 제한하며, 소환·요청 시에는 본 조와 §5318(g)(2)(A)(i)를 인용해 제출을 거부하고 FinCEN에 통지한다(1023.320(e)(1)(i)). +- 온체인 — flag/SAR의 어떤 흔적도 두지 않는다(§3.13 C3). 공개원장에 특정 지갑 대상 flag 이벤트를 방출하면 그 자체가 SAR 존재의 노출이다. 이 제약이 F-03을 "오프체인 관찰 계층"으로 강제하는 근본 이유다. + +허용되는 내부 공유(1023.320(e)(1)(ii)) — 당사자에게 통지되지 않는 한, 공동 SAR 작성을 위한 다른 금융기관과의 근거사실 공유, 법 집행·감독기관·검사 SRO에 대한 제출, 기업 조직 내부 공유는 금지되지 않는다. F-03의 내부 공유 설계는 이 허용 범위 안에서만 이루어진다. + +--- + +## §7. 테스트 케이스 (탐지·경계·노출) + +각 케이스는 §5.2 파이프라인과 §6 상태를 검증한다. 게이트가 아니므로 기대값은 "차단/통과"가 아니라 "flag 상태 + 시계 + 노출 여부"다. + +### 7.1 Test 1 — 명백한 의심 (structuring 패턴) + +입력 — 동일 인물이 A-04로 연결된 3개 지갑에서 각 $2,000씩, 6분 간격으로 3건. 단건은 $5,000 미만이나 집계 $6,000. matchStructuring 해당. + +기대 — 패턴 집계(F03-D3)가 문턱 통과 → hits=[STRUCTURING_EVASION] → DETECTED, 30일 시계 시작, UNDER_REVIEW로 큐 적재. 당사자 대면·온체인 노출 0. Operator 심사 후 SAR_FILED 가능. + +### 7.2 Test 2 — 명백한 정상 + +입력 — QP 기관이 BUIDL $500K를 통상 조건으로 1건 매수. 금액은 문턱 초과하나 4유형 어디에도 신호 없음(정형·경제목적·설명 명확). + +기대 — 금액 통과, hits 비어 있음 → NO_FLAG(기록만). 시계 없음. 보고 불요. 정상 거래 대다수가 여기. + +### 7.3 Test 3 — 경계 ($5,000 정확히 / 30일째 제출) + +입력 A — 단건 정확히 $5,000, 유형(iii) 신호 있음. 기대 — 부등호 ≥이므로 문턱 통과 → DETECTED(경계에서 대상 포함). 입력 B — DETECTED 후 정확히 30일째 SAR 제출. 기대 — "no later than 30"이므로 적시(시한 내). 31일째면 위반. + +### 7.4 Test 4 — 시도 거래(미체결) + 무경제목적 + +입력 — 미체결 시도가 반복되며 사업목적 불명, 가용사실 검토 후 합리적 설명 부재. + +기대 — F03-D4(attempted 포함) + 유형(iii) → DETECTED. "합리적 설명 부재"는 기계가 신호까지만, 최종은 Operator 판단(§5.5). Operator가 설명 확인 시 CLEARED, 미확인 시 SAR_FILED. + +### 7.5 Test 5 — no-tipping-off 위반 시나리오 (반드시 차단) + +입력 — 프런트엔드 개발 변경이 flag된 거래에 "검토 중" 배지를 표시하려 시도. 또는 온체인 컴플라이언스 모듈이 flag 지갑에 이벤트를 방출하려 시도. + +기대 — 상시 불변식(F03-C1·C3)이 이를 금지. 고객대면 표면·온체인에 flag/SAR 인코딩은 위반(1023.320(e))이므로 배포 전 차단되어야 한다. 이 테스트는 F-03에서 "탐지 정확도"만큼 중요한 "누설 방지"를 검증한다. + +--- + +## §8. 검증 패턴 — 감시형 (Pattern C: Monitoring, 차단기 아님) + +> A-13은 증명서형(Pattern B)이었다. F-03은 감시형(Pattern C)이다. 이 절은 세 패턴을 대비하고, 왜 F-03에는 감시형이 유일한 선택인지, 그 법적 토대가 무엇인지를 정리한다. + +### 8.1 Decipher의 검증 방식 3패턴 + +- 패턴 A 기계 판정형 — 결정론적 사실(명단·기간·계산)을 온체인에서 즉시 판정·차단(revert). 예: A-01 제재, C-08 거래량. +- 패턴 B 증명서형 — off-chain 판단(자격)을 신뢰기관의 서명 claim으로 받아 reasonable belief로 게이트. 예: A-13 QP, A-03 적격투자자. +- 패턴 C 감시형 — 사후에 표시(flag)하고 사람이 판단. 차단하지 않는다. 예: F-02 시장감시, F-03 사기감시, A-12 red flag(국소). + +### 8.2 왜 F-03이 패턴 C인가 + +세 가지 이유가 겹친다. (1) 대상의 본질적 비결정성 — 사기·의심은 사실판단이고, 10b-5는 고의(scienter)까지 요구한다(Hochfelder·§3.5). 기계가 "사기다"를 확정할 수 없다. (2) 규범의 성격 — SAR 제도는 "차단 의무"가 아니라 "보고 의무"다(1023.320은 거래 거절을 요구하지 않는다). 따라서 게이트로 구현하면 법이 요구하지 않은 봉쇄를 하는 셈이 되어, 오탐이 곧 부당한 거래 차단이 된다. (3) 판단 기준이 "의심"이라는 낮은 문턱(§5318(g)(1)·1023.320(a)(2))이라, 넓게 잡아 사람에게 올리는 구조가 규범 문언에 부합한다. 결론 — F-03은 사전 게이트(A)여서도 안 되고, 신뢰 claim(B)로 풀리지도 않는다. 사후 표시 + 사람 판단(C)이 유일한 정합이다. + +### 8.3 패턴 C의 법적 토대 + +패턴 C의 정당화는 규범 자체에 있다. (1) SAR는 판정이 아니라 보고 — §5318(g)(1)·1023.320(a)(1)은 "report"를 요구할 뿐 "block"을 요구하지 않는다. (2) 안전항 비대칭 — 선의 신고는 면책(§5318(g)(3)), 방치는 §17(a)·10b-5·BSA 노출. 이 비대칭이 "넓게 표시하고 사람이 결정"하는 감시형을 뒷받침한다. (3) 사람의 개입은 선택이 아니라 요구 — §5318(h)의 AML 프로그램(컴플라이언스 책임자·독립감사)은 판단·검증의 인적 계층을 제도적으로 명령한다. F-02와의 국소적 대비 — F-02(시장조작)도 패턴 C지만, 조작은 객관적 주문·체결 패턴(자전·허수)에 더 가까워 규칙화 여지가 크다. F-03(사기·의심)은 사실·고의 요소가 더 짙어 사람 판단 의존도가 높다 — 같은 패턴 C 안에서도 F-03이 더 "사람 쪽"에 있다. + +--- + +## §9. Coordination — 다른 부품과의 협응 (Cross-Element·Cross-Recipe) + +> F-03은 혼자 움직이지 않는다. 신원·자격 사실은 다른 부품에서 받아 쓰고, F-02와는 경계를 나누며, B-01의 보존 체계에 결과를 싣는다. 이 절은 그 경계와 흐름을 정한다. + +### 9.1 본 부품의 책임 경계 + +F-03이 하는 것 — post-trade 신호 수집, 4유형 규칙 매칭, flag 적재·시계 관리, Operator 큐 연결, 노출 경계 강제. F-03이 하지 않는 것 — (1) 신원·자격의 원판단(A-01·A-04·A-06·A-12가 함, F-03은 소비만), (2) 거래 차단(비게이트), (3) 시정 조치(forcedTransfer·freeze는 Operator가 별도 권한으로), (4) SAR 여부의 최종 결정(Operator·사람). 경계 원칙 — F-03은 "관찰과 표시와 시계", 그 너머(판단·신고·시정)는 Operator 평면. + +### 9.2 Element cascade map + +| 상대 부품 | 관계 | 방향 | +| --- | --- | --- | +| A-12 모름항변(red flag) | red flag 신호를 유형(iii) 판단에 소비 | A-12 → F-03 | +| A-06 내부자(affiliate) | affiliate/insider link를 유형(i)·조작 연계 신호로 소비 | A-06 → F-03 | +| A-01 제재 | 제재 히트를 불법·조력 신호 보강에 소비 | A-01 → F-03 | +| A-04 신원중복 | 위장 다지갑을 structuring 집계 단위 판단에 소비 | A-04 → F-03 | +| F-02 시장감시 | 조작(자전·허수) 담당 — 사기(F-03)와 경계 분담, insider link 시 상호참조 | F-02 ↔ F-03 | +| F-01 자기거래 | 운영자 자기거래 금지 — F-03은 그 위반 정황도 신호로 관찰 | F-01 → F-03 | +| B-01 manifest 정합 | flag·심사·SAR 기록을 B-01 보존 체계에 편입 | F-03 → B-01 | + +### 9.3 Recipe orchestration + +F-03은 R4(시장행위 감시)의 필수 부착 부품이다(F-02·F-01·A-12와 함께). R4는 R1(발행)·R2(재판매)·R3(펀드)와 orthogonal한 사후 commit 계층이다 — R1·R2·R3가 사전 게이트로 거래 성립 여부를 결정하고 나면, 거래가 성립한 뒤 R4가 post-trade로 관찰한다. BUIDL 1거래에 4 Recipe가 cumulative하게 붙되, R1~R3는 "이 거래를 허용할까"(AND 게이트), R4는 "허용된 거래를 관찰·표시"(비게이트)로 역할이 다르다. F-03은 R4 안에서 사기·SAR 축을, F-02는 조작 축을 맡는다. + +### 9.4 Conflict resolution rule + +F-03은 게이트가 아니므로 다른 게이트와 PASS/FAIL 충돌을 일으키지 않는다(직교). 발생 가능한 조정은 두 가지. (1) F-02와의 사유 중복 — 하나의 거래가 조작(F-02)과 사기(F-03) 신호를 동시에 낼 수 있다. 이 경우 각자 flag를 적재하되 SAR는 1건으로 통합 제출한다(1023.320(a)(3): "no more than one report is required … so long as the report … contains all relevant facts"). (2) 시정과의 순서 — F-03 flag가 forcedTransfer 같은 시정을 촉발할 때, 시정 조치가 당사자에게 SAR를 암시하지 않도록 no-tipping-off 경계를 시정 워크플로에도 전파한다. + +### 9.5 Manifest 무결성(B-01)과의 조율 + +F-03이 만드는 flag 상태·심사 기록·SAR·근거자료는 규제 기록이다. 이들은 B-01의 보존 체계(append-only 버전 사슬, ≥3년, Rule 17a-4 audit-trail 정합)에 실려야 한다. 다만 F-03 기록에는 특수 제약이 겹친다 — 1023.320(e)의 기밀 때문에 이 기록은 공개 대사·온체인 앵커의 대상이 될 수 없다. 즉 B-01 export 파이프라인에 실리되, 접근 통제·암호화가 적용된 별도 기밀 트랙으로 운영한다. B-01의 "current 유지" 의무와 F-03의 "5년 보존(max 17a-4)" 의무가 함께 걸린다(§3.10). + +--- + +## §10. 3-Layer Solution — Element / Recipe / Manifest / Operator 매핑 + +> F-03의 책임은 네 계층으로 분산된다. 자동 탐지(Element)가 신호를 잡고, Recipe(R4 commit)가 그것을 사후 관찰로 배치하며, Operator가 판단·신고하고, Manifest가 기록을 보존한다. 이 절은 각 층의 역할과 책임 분배를 정한다. + +### 10.1 각 층의 역할 + +- Element(F-03) — post-trade 신호 수집·4유형 매칭·flag 적재·시계 관리·노출 경계 불변식. 온체인 게이트 아님(오프체인 관찰 엔진). +- Recipe(R4 commit) — F-03을 사후 commit 계층에 배치. R1~R3 사전 게이트와 orthogonal. 거래 성립 후 관찰을 트리거. +- Operator(사람·컴플라이언스) — DETECTED 심사, 합리적 설명 평가, SAR 여부 결정·제출(FinCEN), 예외(1023.320(c)) 판단, 시정 촉발 결정. §5318(h) 프로그램(책임자·훈련·독립감사) 아래 운영. +- Manifest(B-01 보존) — flag·심사·SAR·근거자료를 기밀 트랙으로 보존(≥5y, max 17a-4). 온체인 앵커·공개 대사 제외. + +### 10.2 각 층의 법적 토대 + +Element 층은 1023.320(a)(2)의 문턱·4유형·판단기준을 신호로 구현한다. Recipe 층은 "사후 관찰"이라는 F-03의 성격(§1.3)을 아키텍처로 고정한다. Operator 층은 §5318(g)(1)·(h)의 보고·프로그램 요건, 그리고 사기·의심이 사람 판단임(Aaron·Hochfelder)을 반영한다. Manifest 층은 1023.320(d)·17a-8·17a-4(f)의 보존·기밀을 이행한다. + +### 10.3 층 간 escalation 규칙 + +Element가 DETECTED를 열면 → Operator 큐로 즉시 에스컬레이션(시계 시작). Operator가 SAR 결정 → FinCEN 제출 + 안전항 확보. Operator가 시정 필요 판단 → 별도 권한(forcedTransfer 등)으로 조치하되 no-tipping-off 전파. 모든 상태 전이 → Manifest 기밀 트랙 보존. 60일 상한 임박 → 강제 에스컬레이션·감사. + +### 10.4 Liability 분배 — 사기 거래가 신고되지 않은 경우 + +시나리오 — 사기적 거래가 venue를 통과했고 F-03이 이를 표시하지 못했거나, 표시했으나 Operator가 시한 내 신고하지 않은 경우. + +- Element 실패(탐지 누락) — 탐지 규칙의 감도·커버리지 책임. Aaron(§3.4)의 과실 기준상 "관찰 체계 부재/부실" 자체가 §17(a)(2)·(3) 노출을 키운다. 대응 — 감도를 보수적으로(넓게) 두고, 규칙 변경을 거버넌스로 관리. +- Operator 실패(시한 내 미신고) — 인지 후 30/60일 내 미제출은 BSA 위반(1023.320(g)). 대응 — 시계·상한 임박 강제 에스컬레이션, 독립감사(§5318(h)(D)). +- 누설(no-tipping-off 위반) — 당사자에게 신고를 암시하면 §5318(g)(2)·1023.320(e) 위반. 대응 — 고객대면·온체인 노출 불변식(F03-C1·C3)을 배포 전 강제. +- 반면 선의 신고 — §5318(g)(3) 안전항이 민사 면책. 즉 책임 구조가 "표시하고 신고하는 쪽"을 보호한다 — F-03의 보수적 설계를 법이 뒷받침한다. + +--- + +## §11. Operator Layer — Frontend·Off-chain 운영 + +> F-03은 4-Layer(Element/Recipe/Manifest/Operator)로 끝나지 않고 프런트·오프체인 운영 계층에서 완성된다. SAR 판단은 본질적으로 사람의 일이고, 그 사람과 절차의 요건이 여기 있다. + +### 11.1 왜 Operator 층이 F-03의 중심인가 + +다른 부품은 Operator 층이 보조(예외 심사)지만, F-03은 Operator 층이 중심이다 — SAR 여부·합리적 설명 평가·시정 결정이 전부 사람의 판단이기 때문이다(§5.5). §5318(h)는 이를 제도로 요구한다 — 컴플라이언스 책임자, 상시 교육, 독립 감사. F-03의 자동 부분은 이 사람들의 "감시 도구"일 뿐이다. + +### 11.2 Off-chain 감시·심사 운영 + +- 감시 엔진 — Router 이벤트 구독, 신호 조인, 규칙 매칭, flag 적재. 오프체인·기밀 저장. 규칙 세트(문턱·4유형·감도)는 버전 관리·거버넌스 변경(§5318(h)(A)). +- 심사 워크플로 — DETECTED 큐, 1차 검토 SLA(법정 시한 내), suspect 특정·설명 평가, SAR 초안·제출, CLEARED/NO_ACTION 종결(근거 필수). 60일 상한 관리. +- 소환 대응 — SAR 공개 요청 시 본 조·§5318(g)(2)(A)(i) 인용해 거부, FinCEN 통지(1023.320(e)(1)(i)). + +### 11.3 Frontend — no-tipping-off의 기술 강제 + +프런트엔드는 flag/SAR를 절대 노출하지 않도록 설계·검증된다. 배지·경고·지연 문구·상태 표시 어디에도 SAR/flag를 암시할 수 없다. 내부 대시보드(Operator 전용)만 flag 상태·시계·큐를 표시하며, 접근 통제가 적용된다. 배포 파이프라인에 노출 경계 검사(F03-C1)를 넣어, 고객대면 표면이 flag/SAR를 인코딩하면 배포를 막는다. + +### 11.4 아키텍처 함의 + +F-03의 존재는 Decipher가 "온체인 컴플라이언스"만으로 완결되지 않음을 보여준다 — 사기·의심의 감시·신고는 본질적으로 오프체인·인적 계층을 요구하고, 그 계층은 온체인 공개성과 정면으로 충돌하는 기밀 의무(1023.320(e))를 진다. F-03의 설계 결론 — 탐지는 온체인 이벤트를 읽되, 판단·기록·신고는 오프체인 기밀 계층에서, 사람이, 법정 시한 안에 한다. + +--- + +## §12. Open Issues — 변호사·개발팀 follow-up 대상 + +| # | 질문(무엇을 결정해야 하나) | 왜 필요한가 | Priority | 해소 경로(권고) | +| --- | --- | --- | --- | --- | +| OD-F03-1 | BD/ATS 지위 확정 — Decipher가 등록 BD인가, 그에 따라 §5312(a)(2)(G)·Rule 17a-8·1023.320 SAR 의무가 실제로 활성화되는가 | F-03 보고 계층 전체의 활성화 조건. 미등록이면 탐지·보존은 유지하되 보고 의무는 잠재 — 그 경계가 미확정이면 의무 이행/미이행 판단이 흔들린다 | ⚠ 즉시 | 외부 전문 변호사(BD/ATS reliance 의뢰서와 동기) + SEC Crypto Task Force 관여 | +| OD-F03-2 | 온체인 공개성 vs SAR 기밀(1023.320(e))의 정합 — 온체인 원장의 투명성과 "SAR 존재 비노출" 의무를 어떻게 양립시키나(어느 데이터까지 온체인 허용) | F-03 결과물의 온체인 비노출이 아키텍처 급소. 순진한 flag 이벤트가 곧 위반이므로, 온체인/오프체인 경계의 법적 확정 필요 | ⚠ 즉시 | 변호사 확인(무엇이 "SAR 존재를 드러내는 정보"인가) + 개발팀 오프체인 기밀 저장 설계 | +| OD-F03-3 | "의심" 임계·감도의 운영 기준 — 4유형 각각의 탐지 규칙을 어느 감도로 둘 것인가(오탐 vs 누락), 미국 집행 사례에서 객관적 지표 추출 | 감도가 낮으면 §17(a)(2)·(3)·BSA 노출, 높으면 심사 부담·부당 시정 위험. R-6 리서치의 본체 | 높음 | 변호사·컴플라이언스 협업(집행 사례 기준) + F-02와 공통 | +| OD-F03-4 | 처리 시한 SLA 확정 — 법정 30/60일 안에서 내부 1차 검토·에스컬레이션 시한을 며칠로 둘 것인가("작동하는 감시"의 업계 관행) | 시한 미준수는 BSA 위반(1023.320(g)). 내부 SLA가 없으면 시계 관리가 형해화 | 높음 | Operator 절차서(§5318(h) 프로그램) + 업계 관행 조사 | +| OD-F03-5 | 5년 보존과 17a-4(f) audit-trail의 정합 — SAR·근거·심사기록의 보존 형식(WORM/audit-trail)과 max(5y, 17a-4) 산정, 기밀 트랙의 접근·제출 절차 | 1023.320(d)·17a-8·17a-4(f)가 겹치는 보존 형식·기간을 확정해야 감독 검사 시 재구성 가능. B-01 OD와 연동 | 중간 | 변호사 위임(보존 형식) + B-01 보존 체계 편입 설계 | +| OD-F03-6 | F-02와의 경계·통합 SAR — 조작(F-02)과 사기(F-03) 신호가 겹치는 거래에서 사유 분담과 1건 통합 SAR(1023.320(a)(3)) 운영 규칙 | 중복 flag·중복 신고를 막고 "all relevant facts" 1건 원칙을 지키기 위함 | 중간 | 설계 결정(R4 내부) + F-02 문서와 경계 확정 | +| OD-F03-7 | 시정(forcedTransfer/freeze) 촉발 기준·순서 — F-03 flag가 시정을 촉발할 때의 권한·기준과 no-tipping-off 전파 방식 | 시정은 F-03 소관 밖이나 F-03이 촉발할 수 있어, 그 인터페이스와 누설 방지가 필요 | 낮음 | Operator 운영 기준(Decipher 자체) + 별도 시정 부품 정의 | + +--- + +## §13. 파일명 규칙 (Naming Convention) + +Decipher Element / Recipe 산출물 명명 규칙: + +- Element: F-XX_부품이름.md (예: F-03_suspicious-activity-monitoring.md) +- Recipe: R-XX_Recipe이름.md (예: R4_market-conduct.md) + +Element 부품 ID 체계(앞글자 = 카테고리): + +| 앞글자 | 카테고리 | +| --- | --- | +| A | 신원·자격 (매수인 측) | +| B | 자산·기술 메타 | +| C | 거래 경로·시점 | +| D | 집계·누적 | +| E | 발행자 측 | +| F | 행위·운영 ← 본 부품(F-03)이 여기 | + +본 부품: F-03 = "행위·운영 카테고리의 3번 부품" — 사후 시장행위 감시 계층의 사기·SAR 담당. 같은 계층의 F-01(운영자 자기거래)·F-02(시장조작 감시)·F-04(판매중 매수금지)와 나란히 선다. + +파일명 규칙 (Naming Convention) + +- Element: F-03_suspicious-activity-monitoring.md · 위치 산출물/elements/ +- 빌드 산출: 동명 .docx(pandoc + CJK 패치). 도표 2종 임베드 — F-03_fig30.png(§3.0 법조문 관계 흐름) · F-03_fig50.png(§5.0 판정 로직 흐름). + +--- + +## 부록 A — 관련 조문·URL 빠른참조 + +| 조문 | 인용 | 1차 출처 | +| --- | --- | --- | +| Securities Act §17(a) | 15 U.S.C. §77q(a) | uscode.house.gov | +| Exchange Act §10(b) | 15 U.S.C. §78j(b) | uscode.house.gov | +| Rule 10b-5 | 17 C.F.R. §240.10b-5 | ecfr.gov | +| BSA §5318(g) | 31 U.S.C. §5318(g) | uscode.house.gov | +| BSA §5312(a)(2)(G) | 31 U.S.C. §5312(a)(2)(G) | uscode.house.gov | +| BSA §5318(h) | 31 U.S.C. §5318(h) | uscode.house.gov | +| BD SAR 규칙 | 31 C.F.R. §1023.320 | ecfr.gov | +| Rule 17a-8 | 17 C.F.R. §240.17a-8 | ecfr.gov | +| Aaron v. SEC | 446 U.S. 680 (1980) | govinfo.gov | +| Ernst & Ernst v. Hochfelder | 425 U.S. 185 (1976) | govinfo.gov | + +## 부록 B — BUIDL 적용 노트 + +BUIDL(Rule 506(c) + ICA §3(c)(7), Securitize TA, Sumsub KYC) 문맥에서 F-03은 R4의 post-trade commit에 붙는다. BUIDL 거래는 KYC 게이트를 통과한 자격자 간 거래이므로 다수는 4유형 어디에도 걸리지 않아 NO_FLAG다. 그러나 (1) 위장 다지갑(A-04)·제재 근접(A-01)·affiliate 링크(A-06)가 붙는 거래, (2) $5,000 이상의 비정형·무경제목적 흐름, (3) structuring 의심 패턴은 DETECTED로 올라간다. Securitize(TA)의 여러 체인 합산 보유 기록은 패턴 집계의 보조 입력이 될 수 있으나(§4.2 graph.recentByParty), 그 신뢰·형식은 TA 협약 확정(프로젝트 Q-TA)과 연동된다. BUIDL이 fund-form(R3)으로 취급되는 것과 F-03은 직교한다 — F-03은 어느 Recipe로 성립한 거래든 사후 관찰한다. + +## 부록 C — 용어·부등호·인용 정정 노트 + +- 게이트 아님 — F-03은 거래를 차단하지 않는다. "거절 코드"가 아니라 "flag 상태 전이"를 산출한다. forcedTransfer·freeze는 F-03의 도구가 아니라 별도 시정 조치다. +- 부등호 두 방향 — 금액 문턱은 이상(≥ $5,000, "at least"), 제출 시한은 이내(≤ 30/60일, "no later than"). 정확히 $5,000·정확히 30일째는 모두 규칙 안쪽. C-08의 ">" 규율과 방향이 다름에 유의. +- 시한 기준점 — "initial detection"은 체결 블록 타임스탬프가 아니라 F-03이 사실을 인지해 DETECTED로 여는 시점(패턴 지연 시 체결보다 늦을 수 있음). +- SAR 기밀 근거 — BD 레벨 현행 준거는 31 C.F.R. §1023.320(e)(SAR 또는 그 존재를 드러낼 정보 공개 금지). §5318(g)(2)(A)(i)는 그 상위 수권. §5318(g)(2)는 2020년 AML Act(Pub. L. 116-283)로 "SAR 존재를 드러낼 정보 누설"까지 확장되었고, 1023.320(e)가 이를 BD 레벨에서 구체화한다. +- 안전항 — §5318(g)(3) 및 1023.320(f)는 선의 신고·통지불이행에 대한 민사 면책. "신고 유인 > 방치"의 비대칭이 F-03 보수적 감도의 근거. +- claim.basis 해당 없음 — F-03은 증명서형(Pattern B)이 아니므로 QP_* 등 claim.basis 값을 산출하지 않는다(§3.13). ERC-3643 매핑은 이벤트·Compliance Module·상태 enum으로 한다. +- SAR 온체인 흔적 금지 — 1023.320(e)상 공개원장에 flag/SAR 흔적을 남기면 안 된다. F-03의 결과물은 오프체인 기밀 저장이 원칙. +- 활성화 조건 — SAR 보고 의무는 BD 등록(§5312(a)(2)(G)·Rule 17a-8)을 전제로 활성화(OD-F03-1). 미등록 구간에서는 탐지·보존만. + +## 부록 D — 결론 + +F-03은 "이 거래가 사기·자금세탁의 냄새를 풍기는가"를 사후에 관찰하고 표시하는 부품이다. 법리 골격은 두 계보의 수렴이다 — 증권 사기 축(§17(a)·§10(b)·Rule 10b-5)이 "무엇이 사기인가"를 정의하고, BSA SAR 축(§5318(g)·1023.320)이 "탐지했으면 어떻게 신고하는가"를 정의한다. 사기·의심은 사실·때로 고의의 문제이고(Aaron·Hochfelder), SAR는 차단이 아니라 보고 의무이며, 판단 기준은 "의심"이라는 낮은 문턱이다 — 그래서 F-03은 사전 게이트(A)도 신뢰 claim(B)도 아닌 감시형(C)으로, 사후에 넓게 표시하고 사람이 판단·신고한다. 구현의 급소는 세 가지다 — (1) 게이트가 아니라 flag(거래는 이미 체결됨), (2) 결과물의 온체인 비노출과 당사자 무노출(1023.320(e)·§5318(g)(2)의 no-tipping-off), (3) 법정 시한(30/60일)과 5년 보존(max 17a-4)의 관리. 파라미터는 문턱 ≥$5,000·4유형·시한 30(+30)일이고, 활성화는 BD 등록을 조건으로 하며, SAR 판단·신고는 §5318(h) 프로그램 아래 사람이 한다. BD 지위·온체인-기밀 정합·감도 기준·시한 SLA·보존 형식은 변호사·개발팀 확정으로 남긴다. F-03이 제대로 서면, Decipher는 "사기를 기계로 판정"하려는 무리 없이, "사기·의심의 신호를 빠짐없이 사람의 판단과 법정 신고로 잇는 감사가능한 관찰 계층"을 갖는다. \ No newline at end of file diff --git a/docs/compliance/elements/F-04.md b/docs/compliance/elements/F-04.md new file mode 100644 index 0000000..81fc4cf --- /dev/null +++ b/docs/compliance/elements/F-04.md @@ -0,0 +1,696 @@ +# F-04 · 판매 중 매수 금지 (Regulation M 상시 검사) + +**부품 ID**: F-04 · **카테고리**: F (행위·운영) · **한 줄 정의**: 발행(distribution)이 진행되는 restricted period 동안, 발행자·매도증권보유자·그 affiliated purchaser·distribution participant가 대상 증권(covered security)을 permissioned DEX에서 매수(bid·purchase·매수유인)하는 것을 사전에 결정론적으로 차단하는 게이트. + +**검증 패턴**: Pattern A — 기계 판정형 / 게이트형 (strict, off-chain 판단 불요) · **Recipe 소속**: R1 발행 (●, exclusive) · **Timing**: pre-trade · **Statefulness**: STATELESS · **근거 규범**: Securities Exchange Act §9(a)·§10(b) + Regulation M (17 CFR §242.100~.102·.104) · **형식 기준**: A-13 v1. + +--- + +## §1. 규제 맥락 — 이 부품이 왜 필요한가 + +### 1.1 조작의 문제와 Reg M의 사전 예방 설계 + +미국 증권규제는 시세조종(manipulation)을 두 층위로 다룬다. 상위층은 제정법의 사후 금지다 — Exchange Act §9(a)(2)는 "일련의 거래로 어떤 증권에 외관상 활발한 거래를 만들거나 그 가격을 올리거나 내려, 타인의 매매를 유인할 목적"의 행위를 위법으로 한다. 그런데 §9(a)(2)는 "목적(for the purpose of ... inducing)"이라는 주관적 요건을 품는다. 조작의 고의를 사후에 입증하기는 어렵고, 특히 증권을 처음 시장에 뿌리는 발행(distribution) 국면에서는 발행자·인수인이 오퍼링 가격을 떠받치려는 유인이 구조적으로 존재한다 — 발행 중에 자기 증권을 시장에서 사들이면 가격이 올라 오퍼링 대금이 커지고, 후속 매수인을 끌어들일 수 있다. + +Regulation M은 이 사후 금지를 **사전 예방(prophylactic)** 규칙으로 구체화한 것이다. Reg M 채택 취지문(Rel. No. 34-38067)이 직접 밝히듯, Reg M은 "오퍼링의 결과에 이해관계를 가진 자의 조작적 행위를 사전에 배제(preclude manipulative conduct by persons with an interest in the outcome of an offering)"하기 위한 규칙이다. 핵심 전환은 이렇다 — §9(a)(2)가 요구하는 조작 목적의 입증을 걷어내고, 대신 "누가(발행자·인수인 등) / 언제(restricted period) / 무엇을(covered security 매수)" 하면 그 자체로 위법이라는 밝은 선(bright line)을 긋는다. 목적 심사가 사라졌기 때문에 이 규칙은 기계가 판정할 수 있다. F-04가 Pattern A(기계 판정형·게이트형)인 근본 이유가 여기 있다. + +### 1.2 두 개의 금지 조문 — 발행자 갈래와 참가자 갈래 + +Reg M의 매수 금지는 인적 지위에 따라 두 조문으로 갈린다. **§242.102(Rule 102)** 는 발행자(issuer)·매도증권보유자(selling security holder)와 그 affiliated purchaser를 겨눈다. **§242.101(Rule 101)** 은 distribution participant(인수인·브로커·딜러 등)와 그 affiliated purchaser를 겨눈다. 두 조문의 금지 문언은 사실상 동일하다 — restricted period 동안 covered security를 "bid for, purchase, or attempt to induce any person to bid for or purchase" 하지 말 것. 그리고 Rule 101은 "만약 distribution participant나 affiliated purchaser가 그 증권의 발행자·매도증권보유자이면 §242.102의 적용을 받는다"고 명시해, 겹치는 지위를 발행자 갈래로 흡수한다. + +BUIDL 참조 구현에서 F-04의 1차 사정권은 §242.102(발행자 갈래)다 — 우리가 가장 먼저 막아야 할 것은 발행자(BlackRock/발행 vehicle)와 그 계열이 발행 중에 자기 토큰을 DEX에서 사들이는 시나리오이기 때문이다. 다만 F-04는 매수인의 지위를 판별해 두 갈래 모두로 라우팅한다(§5.2 G⑤). + +### 1.3 상시 발행(continuous offering)이라는 비틀림 — restricted period가 꺼지지 않는다 + +일반적인 오퍼링에서 restricted period는 유한하다 — 가격 결정 하루 전(또는 5영업일 전)에 열려서 그 자가 "발행에의 참여를 완료(completion of participation in the distribution)"하면 닫힌다. 그런데 참조 자산 BUIDL은 **매일 상시 발행(continuous offering)** 구조다 — 판매 기간이 끝나지 않는다. 수익 분배도 매월 신규 토큰 지급(신규 발행)으로 이뤄진다. 그렇다면 restricted period는 사실상 상시 열려 있고, F-04의 매수 금지 게이트는 특정 며칠이 아니라 자산의 존속 기간 내내 작동한다. 프로젝트가 BUIDL을 첫 시연 자산으로 고른 이유 중 하나가 이것이다 — "Reg M 상시 검사"가 활성화되는 자산이라 시스템 구성요소의 활성률이 가장 높다. + +이 상시성은 F-04를 다른 R1 부품(E-01 Form D, E-03 bad actor)과 구별한다. Form D·bad actor는 발행 프레임 성립의 1회성 확인에 가깝지만, F-04는 거래마다 걸리는 상시 게이트다. + +### 1.4 permissioned DEX라는 무대와 "환매 창구 분리"라는 방어선 + +전통 오퍼링에서 Reg M 위반의 무대는 거래소나 딜러 시장이다. 우리 무대는 KYC로 게이트된 permissioned DEX다 — 발행 중인 토큰이 이 DEX에서 2차로 거래되면서 동시에 1차로 발행된다. 발행자·계열이 이 DEX에서 자기 토큰을 매수하면 가격을 인위적으로 떠받치는 결과가 되고, 이것이 정확히 Rule 102가 막는 행위다. F-04는 이 매수를 체결 전에 차단한다. + +동시에 BUIDL은 영업일 USD 환매 + USDC 즉시 환매(Circle 연동) 창구를 별도로 둔다. 이 환매를 DEX 매매와 뒤섞으면 발행자의 토큰 취득이 Rule 102 위반으로 읽힐 위험이 생긴다. 그래서 환매는 DEX 매수 경로가 아니라 **별도 환매 창구(운영자 통제, 거래소·ECN 밖)** 로 라우팅된다 — 이것이 "환매 창구 분리 = Reg M 방어선"의 뜻이다. Rule 102(b)의 NAV 환매 예외들(closed-end·commodity pool·LP)이 하나같이 "그 증권이 거래소·inter-dealer quotation system·ECN에서 거래되지 않을 것"을 조건으로 다는 것과 정확히 맞물린다(§3.10). F-04의 게이트는 이 환매 경로를 건드리지 않으며, 건드리지 않도록 경로를 분리하는 것이 설계의 핵심이다. + +### 1.5 F-04가 하는 일과 하지 않는 일 + +F-04는 "이 매수 주문이 restricted period 중 제한대상자의 매수인가"만 기계로 판정해 차단한다. 조작의 고의가 실제로 있었는지(그것은 §9(a)(2)의 사후 판단이자 F-02 감시의 영역), 어떤 증권이 restricted securities인지(B-02·B-03), 매수인이 Rule 144 의미의 affiliate인지(A-06 — Reg M의 affiliated purchaser와는 정의가 다르다, §9.1), 몇 명째 보유자인지(D-01)는 각기 다른 부품의 일이다. F-04는 Reg M이 그은 밝은 선 하나 — 발행 중 제한대상자의 매수 금지 — 를 체결 전 관문으로 옮긴 부품이다. + +--- + +## §2. 메타 — 부품 한 장 요약 + +### 2.1 정체성 + +| 항목 | 값 | +| --- | --- | +| 부품 ID | F-04 | +| 카테고리 | F — 행위·운영 (매수인/발행자 행위 층) | +| 부품 이름 | 판매 중 매수 금지 (no-purchase-during-distribution) | +| 검사 대상 | restricted period 중 제한대상자(발행자·매도증권보유자·affiliated purchaser·distribution participant)의 covered security 매수 | +| 검증 패턴 | Pattern A — 기계 판정형 / 게이트형 (bright-line, off-chain 판단 불요) | +| Decidability | DETERMINISTIC | +| ObligationTiming | AT_TRADE_GATE (pre-trade) | +| Statefulness | STATELESS (레지스트리·상수는 거래 외 경로로만 변경) | +| Recipe 소속 | R1 발행 (● 필수, R1-exclusive) | +| Manifest 위치 | ManifestCore.facts (offeringStatus·regMExceptionProfile) + 자산별 restrictedPersonRegistry + 거버넌스 상수 | + +### 2.2 왜 게이트형(Pattern A)인가 — 증명서형이 아닌 이유 + +F-04는 A-03·A-13 같은 증명서형(Pattern B)이 아니다. 증명서형은 "적격투자자다·QP다" 같은 자격 판단을 검증기관이 오프체인에서 하고 코드는 서명된 claim만 확인한다. F-04에는 그런 오프체인 자격 판단이 없다 — Rule 102는 매수인의 지위(발행자·계열 등)와 시점(restricted period)이라는 객관 사실만으로 위법을 확정하고, 조작 의도를 묻지 않는다(§1.1). 따라서 F-04는 A-01(제재)과 같은 계열의 strict-liability 게이트다. 다만 A-01이 명단 소속(SDN list)으로 판정한다면, F-04는 시간 창(restricted period) × 역할 소속(제한대상 집합)의 곱으로 판정한다. 조작 의도의 사후 판단은 F-02(시장 감시, Pattern C)가 flag로 담당하며 F-04와 상보한다(§9.1). + +### 2.3 PASS/FAIL 코드 요약 + +| 코드 | 의미 | 성격 | +| --- | --- | --- | +| RESTRICTED_PERIOD_PURCHASE_BLOCKED | restricted period 중 제한대상자의 매수 — 차단 | FAIL (§242.102(a)/§242.101(a)) | +| REG_M_OFFERING_STATUS_MISSING | 자산 카드에 offeringStatus 선언 부재 — 판정 불능 | FAIL (fail-closed) | +| REG_M_RESTRICTED_SET_UNVERIFIED | 제한대상 레지스트리 미해소 red flag 위 판정 시도 | REVIEW | +| (PASS) REG_M_NOT_IN_DISTRIBUTION | 오퍼링 종료·비배포 — Reg M 비적용 | PASS | +| (PASS) REG_M_NON_RESTRICTED_BUYER | 매수인이 제한대상 아님 | PASS | +| (PASS) REG_M_DIRECTION_SELL | 매도·비대상 방향 (F-04 사정권 밖) | PASS | +| (PASS+기록) REG_M_EXCEPTION_APPLIED | 예외 경로 성립(근거 코드·해시 적재) | PASS | + +### 2.4 활성화 트리거와 배치 + +F-04는 R1(발행) Recipe에만 부착된다(부착 매트릭스: R1 ●, R2·R3·R4 —). Router의 cumulative AND 체인에서 F-04는 자산이 "발행 프레임 유지 중(R1 활성)"일 때 매 거래에 걸린다. 판정 순서상 F-04는 매수인 신원(A-04)·자격(A-03/A-11) 확인 이후, 매수 방향·시점 판정 단계에 위치한다(§5.2). 결과는 Router로 반환되어 하나라도 FAIL이면 revert된다. + +### 2.5 의존 관계 요약 + +- **상류(입력 공급)**: A-04(ONCHAINID — 역할 판별 단위) · B-01(offeringStatus·restrictedPersonRegistry의 무결성·변경 통제) · 운영자(제한대상 명단 유지, OD-B1). +- **동렬(상보)**: F-02(사후 wash-trade flag) · F-01(자기거래 제한) · B-04(엔진/venue 라우팅 — 환매 창구 분리 접점). +- **경계 주의**: A-06(Rule 144 affiliate) ↔ Reg M affiliated purchaser는 정의가 다르다(§9.1). E-01(Form D)와 함께 R1-only. + +--- +## §3. 법적 근거 — 조문별 정밀 분해 + +이 절은 F-04가 집행하는 규범을 논리 흐름 순서로 배열한다. 아래 표의 "종류" 칸이 그대로 Layer에 대응한다 — Statute = Layer 1, SEC Rule = Layer 2, SEC Release·SEC Staff·Case = Layer 3. Layer 1/2/3 묶음 헤더는 쓰지 않고, 각 조문을 논리 흐름 순서로 독립 번호(§3.1, §3.2, …)로 둔다. 순서는 중요도순이 아니라 "무대(anti-manip 기반) → 방아쇠(distribution) → 대상(covered security) → 시점(restricted period) → 인적 범위(누가) → 금지(무엇을) → 예외 → 상수 근거 → 제정법 앵커 → 취지"의 논리 흐름순이다. + +아래 그림이 이 절의 법조문 관계 흐름이다 — 제정법(§9(a)·§10(b))의 사후 조작 금지가 Reg M(Rule 100~102)의 사전 게이트로 구체화되고, 그 게이트가 F-04로 집행되는 경로다. + +![F-04 법조문 관계 흐름](F-04_fig30.png) + +### 3.0.1 F-04가 판정하는 것의 성격 + +F-04의 판정 대상은 "이 매수 주문이 Rule 102(a)(또는 Rule 101(a))가 금지하는 행위인가"라는 밝은 선 한 개다. 그 선은 세 좌표의 곱이다 — (i) 시점이 restricted period 안인가, (ii) 방향이 covered security의 매수/bid인가, (iii) 주체가 제한대상(발행자·매도증권보유자·affiliated purchaser·distribution participant)인가. 셋이 모두 참이고 예외가 없으면 위법이며, 이때 F-04는 체결 전 차단(revert)한다. 조작의 목적·효과는 판정하지 않는다 — 그것은 제정법 §9(a)(2)의 사후 요건이고, 사후 flag는 F-02의 일이다. Reg M은 그 목적 요건을 걷어낸 대가로 기계 판정 가능성을 얻었고, F-04는 그 기계 판정을 온체인 관문으로 구현한다. + +### 3.0.2 Authority 표 + +**표 1 — 근거 규범(Authority)** + +| 종류 | Authority | 내용 | F-04 관련성 | Direct/Supporting | Official URL | +| --- | --- | --- | --- | --- | --- | +| Statute | Exchange Act §9(a)(2), 15 U.S.C. §78i(a)(2) | 일련의 거래로 시세를 올리거나 내려 타인의 매매를 유인하는 조작(목적 요건). Dodd-Frank 개정으로 "미등록 증권"도 포섭 | 사후 금지의 원천 — Reg M이 이를 사전 규칙으로 구체화 | Direct | govinfo.gov | +| Statute | Exchange Act §9(a)(1)·(a)(6), 15 U.S.C. §78i(a)(1)·(a)(6) | (1) 위장매매·짝맞춤주문(외관상 활발한 거래), (6) pegging·fixing·stabilizing | 조작 유형의 스펙트럼 — F-02(자전거래)와 stabilizing 경계의 근거 | Supporting | govinfo.gov | +| Statute | Exchange Act §10(b), 15 U.S.C. §78j(b) | 증권 매매와 관련한 조작적·기망적 장치 금지(anti-fraud 기반) | Reg M 병존 anti-fraud 앵커 | Supporting | uscode.house.gov | +| Statute | Securities Act §17(a), 15 U.S.C. §77q(a) | 증권 청약·판매에서의 사기 금지 | Reg M Preliminary Note가 병존 명시 | Background | (Reg M Prelim Note 내 인용) | +| SEC Rule | Reg M Rule 100, 17 CFR §242.100 | Preliminary Note(anti-fraud 병존) + 정의(distribution·restricted period·covered security·distribution participant·affiliated purchaser·selling security holder) | 판정의 모든 좌표 정의 공급 | Direct | ecfr.gov | +| SEC Rule | Reg M Rule 102, 17 CFR §242.102 | ★ 발행자·매도증권보유자·affiliated purchaser의 restricted period 중 매수 금지 + 예외·면제 | F-04 집행 조문(발행자 갈래) | Direct | ecfr.gov | +| SEC Rule | Reg M Rule 101, 17 CFR §242.101 | distribution participant·affiliated purchaser의 동일 금지 + 두 갈래 라우팅 + actively-traded 예외 | F-04 집행 조문(참가자 갈래) | Direct | ecfr.gov | +| SEC Rule | Reg M Rule 104, 17 CFR §242.104 | 안정조작(stabilizing)의 엄격 조건부 허용 | 허용의 경계 — 고정 NAV라 미사용(§3.15) | Conditional | ecfr.gov | +| SEC Release | Anti-manipulation Rules Concerning Securities Offerings, Rel. No. 34-38067, 62 FR 520 (Jan. 3, 1997) | Reg M 채택 취지: 오퍼링 이해관계자의 조작 행위 사전 배제 | 목적·해석의 원천 | Supporting | sec.gov · federalregister.gov | + +**표 2 — 순서·중요성** + +| 순서(§3.X) | 조문 | 중요성 | F-04가 그걸로 하는 일 | +| --- | --- | --- | --- | +| §3.1 | §242.100(a) Preliminary Note | 프레임 | anti-fraud/anti-manip가 Reg M과 무관하게 항상 병존함을 확인 — F-04 통과가 §9·§10(b) 면책이 아님 | +| §3.2 | §242.100(b) "distribution" | 방아쇠 | 이 오퍼링이 Reg M이 적용되는 "distribution"인지 결정(magnitude + special selling efforts) | +| §3.3 | §242.100(b) "covered security"·"reference security" | 대상 | 어느 토큰/클래스가 금지의 대상인지 확정 | +| §3.4 | §242.100(b) "restricted period" | 시점 | 게이트가 언제 열려 있는지 — 상시 발행이면 사실상 상시 | +| §3.5 | §242.100(b) "distribution participant" | 인적(참가자) | 참가자 갈래(§242.101) 대상자 판별 | +| §3.6 | §242.100(b) "issuer"·"selling security holder" | 인적(발행자) | 발행자 갈래(§242.102) 대상자 판별 | +| §3.7 | §242.100(b) "affiliated purchaser" | 인적(확장) | 제한대상 집합의 외연 확장 — 대리·지배·공동지배·재량운용 | +| §3.8 | §242.102(a) | ★ 금지(발행자) | F-04의 차단 판정식(발행자 갈래) | +| §3.9 | §242.101(a) | 금지(참가자)·라우팅 | 차단 판정식(참가자 갈래) + 두 갈래 라우팅 | +| §3.10 | §242.102(b) | 예외(활동) | PASS 경로 — 환매 창구 분리의 조문 근거 | +| §3.11 | §242.102(d) | 예외(증권) | BUIDL이 open-end/UIT·actively-traded 예외에 해당 안 됨을 확정 | +| §3.12 | §242.101(c) | 예외(증권·병렬) | 참가자 갈래의 actively-traded 예외 — 고정 NAV 사모펀드에는 미적용, 게이트 상시화 | +| §3.13 | §9(a)(1)·(2)·(6) | 제정법 앵커 | Reg M이 구체화한 상위 금지 — 목적 요건 제거의 근거 | +| §3.14 | §10(b)·§9(g)·§17(a) | anti-fraud 앵커·경계 | 병존 anti-fraud + exempted security 경계 | +| §3.15 | §242.102(e)·§242.104 | 허용의 경계 | 면제권한 + 안정조작 — 고정 NAV/무-시세받치기 논거의 자리 | +| §3.16 | Rel. No. 34-38067 | 취지 | 규칙 해석의 목적론적 기준 | +| §3.17 | (말미) Sub-요건 분해 매트릭스 + ERC-3643 총정리 | 종합 | 모든 PASS/FAIL 경로 1:1 + 필드 매핑 | + +--- + +### 3.1 §242.100(a) Preliminary Note — anti-fraud/anti-manip 상시 병존 [ecfr.gov] + +- **조항**: Regulation M Rule 100(a) Preliminary Note, 17 C.F.R. §242.100(a) — ecfr.gov (2026-07-15 현행) + +- **핵심 원문**: Any transaction or series of transactions, whether or not effected pursuant to the provisions of Regulation M (§§ 242.100-242.105 of this chapter), remain subject to the antifraud and antimanipulation provisions of the securities laws, including, without limitation, Section 17(a) of the Securities Act of 1933 [15 U.S.C. 77q(a)] and Sections 9, 10(b), and 15(c) of the Securities Exchange Act of 1934 [15 U.S.C. 78i, 78j(b), and 78o(c)]. + +- **한국어**: 어떠한 거래 또는 일련의 거래도, Regulation M(§§242.100-242.105)의 규정에 따라 이루어졌는지 여부와 무관하게, 증권법의 사기금지·조작금지 조항 — 한정 없이 예시하면 1933년 증권법 §17(a)[15 U.S.C. §77q(a)] 및 1934년 증권거래법 §9·§10(b)·§15(c)[15 U.S.C. §78i·§78j(b)·§78o(c)] — 의 적용을 계속 받는다. + +- **쉬운 설명**: F-04 설계의 첫 좌표다. Reg M의 밝은 선을 통과한다고 해서 §9·§10(b)의 사후 조작·사기 책임이 면제되지 않는다. 두 층은 병존한다 — Reg M(사전 게이트, F-04)을 통과한 거래라도 실제 조작 목적이 있었다면 §9(a)(2)로 별도 추궁될 수 있고, 그 사후 탐지는 F-02가 flag로 담당한다. 반대로 Reg M 예외에 해당해 F-04가 PASS를 찍은 매수라도, 그것이 사기·조작의 일부라면 여전히 위법이다. 그래서 F-04의 PASS는 "Reg M 금지에 걸리지 않음"이라는 좁은 의미이지 "적법 보증"이 아니다 — 문서 전체에서 이 한계를 흐리지 말아야 한다. + +- **PASS/FAIL 반영**: 간접 ✕ — 이 note 자체는 판정식이 아니다. F-04 PASS의 의미 범위를 좁히는 프레임(§9.1 F-02와의 상보, §12 OD의 근거)이 된다. + +- **ERC-3643 변환**: 직접 필드 없음. F-04 게이트가 canTransfer에서 매수를 통과시켜도 F-02의 post-trade 감시 모듈이 별도로 작동하도록 두 모듈을 분리 배치하는 설계의 근거. + +### 3.2 §242.100(b) "distribution" 정의 — Reg M의 방아쇠 [ecfr.gov] + +- **조항**: Regulation M Rule 100(b), "distribution" 정의, 17 C.F.R. §242.100(b) — ecfr.gov (2026-07-15 현행) + +- **핵심 원문**: Distribution means an offering of securities, whether or not subject to registration under the Securities Act, that is distinguished from ordinary trading transactions by the magnitude of the offering and the presence of special selling efforts and selling methods. + +- **한국어**: "distribution"이란, 증권법상 등록 대상 여부와 무관하게, 오퍼링의 규모(magnitude) 및 특별한 판매 노력·판매 방법(special selling efforts and selling methods)의 존재에 의하여 통상의 거래(ordinary trading transactions)와 구별되는 증권의 오퍼링을 말한다. + +- **쉬운 설명**: F-04가 애초에 걸리는지 여부를 정하는 방아쇠다. 두 가지가 F-04 설계에 결정적이다. 첫째, "등록 대상 여부와 무관하게(whether or not subject to registration)" — Reg D 506(c) 사모발행처럼 등록 면제된 오퍼링도 distribution일 수 있다. 미등록이라는 이유로 Reg M을 피할 수 없다. 둘째, distribution의 두 표지는 규모 + 특별한 판매 노력·방법이다. 506(c)는 일반청약(general solicitation)이 허용·수반되는 발행이므로 "특별한 판매 노력·방법"이라는 표지를 채우기 쉽다 — 광범위한 청약 자체가 통상 거래와 구별되는 판매 방법이다. 따라서 BUIDL 같은 506(c) 상시 토큰 발행은 distribution에 해당할 개연성이 높고, F-04는 이를 기본 전제로 작동한다. 다만 "이 특정 오퍼링이 규모·판매방법 요건을 실제로 충족하는가"의 최종 판단은 사실관계 심사이며, 상시 발행에서 각 tranche가 별개 distribution인지 전체가 하나의 연속 distribution인지의 경계는 변호사 확인 대상이다(§12 OD-F04-1·OD-F04-6). + +- **PASS/FAIL 반영**: 조건부 — 자산 카드의 offeringStatus 선언이 이 판단의 코드화된 결과다. offeringStatus = ONGOING_*이면 F-04가 활성, = COMPLETED이면 비활성(REG_M_NOT_IN_DISTRIBUTION PASS). 이 선언의 진위(정말 distribution이 진행 중인가)는 상장 심사·운영자 판단 소관이며 F-04는 선언을 신뢰해 집행한다. + +- **ERC-3643 변환**: Manifest.facts.offeringStatus ∈ {ONGOING_CONTINUOUS, ONGOING_TRANCHE, COMPLETED} (근거: distribution 정의 + restricted period 정의). 값의 무결·변경 통제는 B-01(거버넌스 경로·정정 버전). + +### 3.3 §242.100(b) "covered security"·"reference security" — 금지의 대상 [ecfr.gov] + +- **조항**: Regulation M Rule 100(b), "covered security" 및 "reference security" 정의, 17 C.F.R. §242.100(b) — ecfr.gov (2026-07-15 현행) + +- **핵심 원문**: Covered security means any security that is the subject of a distribution, or any reference security. … Reference security means a security into which a security that is the subject of a distribution ("subject security") may be converted, exchanged, or exercised or which, under the terms of the subject security, may in whole or in significant part determine the value of the subject security. + +- **한국어**: "covered security"란 distribution의 대상이 되는 증권(subject security), 또는 reference security를 말한다. … "reference security"란 distribution의 대상 증권("subject security")이 전환·교환·행사될 수 있는 대상 증권, 또는 subject security의 조건상 subject security의 가치를 전부 또는 상당 부분 결정할 수 있는 증권을 말한다. + +- **쉬운 설명**: 금지의 대상 범위다. F-04에서 covered security는 발행 중인 그 토큰(class) 자체다 — subject security. reference security 축은 그 토큰이 다른 증권으로 전환·교환되거나, 다른 증권이 그 토큰 가치를 결정하는 구조일 때 그 다른 증권까지 금지 대상에 넣는 장치다. BUIDL의 토큰화 국채 지분은 단순 지분형이라 전형적 reference security 확장은 좁지만, 설계상 자산 카드는 이 토큰이 다른 온체인 자산의 가치를 결정하거나 그로 전환되는 구조를 갖는지를 선언해 두어야 한다(대개 없음). F-04의 대상 식별은 legalClassId(D-01·B-03과 공유하는 class 식별자)에 결속된다 — 같은 발행체의 다른 class는 별개의 distribution 상태를 가질 수 있으므로, 금지 판정은 정확한 class를 가리켜야 한다. + +- **PASS/FAIL 반영**: 조건부 — F-04는 거래 대상 토큰의 legalClassId가 restricted period 활성 covered security 집합에 속하는지로 대상 여부를 판정한다. reference security 확장은 자산 카드 선언(referenceSecurities)이 비어 있으면 subject security 단일로 좁혀진다. + +- **ERC-3643 변환**: Manifest.facts.legalClassId(대상 class) + Manifest.facts.referenceSecurities(선언, 대개 ∅); F-04 판정은 txContext.tokenId → legalClassId 매핑 후 covered security 집합 소속 검사. + +### 3.4 §242.100(b) "restricted period" — 게이트가 열리는 시간 창 [ecfr.gov] + +- **조항**: Regulation M Rule 100(b), "restricted period" 정의, 17 C.F.R. §242.100(b) — ecfr.gov (2026-07-15 현행) + +- **핵심 원문**: Restricted period means: (1) For any security with an ADTV value of $100,000 or more of an issuer whose common equity securities have a public float value of $25 million or more, the period beginning on the later of one business day prior to the determination of the offering price or such time that a person becomes a distribution participant, and ending upon such person's completion of participation in the distribution; and (2) For all other securities, the period beginning on the later of five business days prior to the determination of the offering price or such time that a person becomes a distribution participant, and ending upon such person's completion of participation in the distribution. (3) In the case of a distribution involving a merger, acquisition, or exchange offer, the period beginning on the day proxy solicitation or offering materials are first disseminated to security holders, and ending upon the completion of the distribution. + +- **한국어**: "restricted period"란 다음을 말한다: (1) ADTV 가치가 $100,000 이상이고 그 발행인의 보통주 지분증권의 public float 가치가 $2,500만 이상인 증권의 경우, 오퍼링 가격 결정 1영업일 전과 그 자가 distribution participant가 되는 시점 중 나중에 시작하여, 그 자의 distribution 참여 완료 시 종료하는 기간. (2) 그 밖의 모든 증권의 경우, 오퍼링 가격 결정 5영업일 전과 그 자가 distribution participant가 되는 시점 중 나중에 시작하여, 그 자의 distribution 참여 완료 시 종료하는 기간. (3) 합병·인수·교환청약을 수반하는 distribution의 경우, proxy 권유 또는 오퍼링 자료가 증권보유자에게 최초로 배포되는 날에 시작하여 distribution 완료 시 종료하는 기간. + +- **쉬운 설명**: F-04 게이트의 시간 좌표다. 두 층으로 읽어야 한다. 첫째, 어느 층에 속하는가 — (1)은 유동성·시가총액이 큰 증권(1영업일 창), (2)는 그 밖의 모든 증권(5영업일 창)이다. BUIDL 토큰은 (1)의 요건(보통주 public float $2,500만 이상 등)을 충족하지 못하는 사모펀드 지분이므로 (2)에 떨어진다 — 5영업일 창이 기본값이다. 둘째, 그런데 이 "창"은 "오퍼링 가격 결정"과 "참여 완료"를 양끝으로 하는데, 상시 발행(continuous offering)에서는 가격 결정이 매일 반복되고 "참여 완료"가 오지 않는다. 그 결과 restricted period가 사실상 열린 채로 유지된다 — F-04가 자산 존속 기간 내내 작동하는 근거가 정확히 이 정의의 양끝이 닫히지 않는다는 데 있다(§1.3). 이 상시성의 법적 정밀화 — "각 tranche가 자기 5영업일 창을 갖는가, 아니면 전체가 하나의 열린 창인가" — 는 변호사 확인 대상이다(§12 OD-F04-6). 시스템은 보수적으로 offeringStatus = ONGOING_CONTINUOUS이면 restricted period 상시 활성으로 취급한다. + +- **PASS/FAIL 반영**: 직접 ○(시점 축) — G①(restricted period 활성 여부)가 이 정의의 코드화다. offeringStatus = ONGOING_*이면 활성(true), = COMPLETED이면 비활성(false → REG_M_NOT_IN_DISTRIBUTION PASS). ADTV/public float에 의한 층 구분은 예외 판정(§3.11·§3.12)의 입력이지 활성 판정 자체는 아니다. + +- **ERC-3643 변환**: G① = (Manifest.facts.offeringStatus ≠ COMPLETED); 상시 발행 자산은 offeringStatus = ONGOING_CONTINUOUS로 봉인되어 게이트 상시 true. tranche형이면 restrictedWindowEnd 타임스탬프를 두어 now 비교(단 BUIDL은 상시형). + +### 3.5 §242.100(b) "distribution participant" — 참가자 갈래 대상자 [ecfr.gov] + +- **조항**: Regulation M Rule 100(b), "distribution participant" 및 "underwriter" 정의, 17 C.F.R. §242.100(b) — ecfr.gov (2026-07-15 현행) + +- **핵심 원문**: Distribution participant means an underwriter, prospective underwriter, broker, dealer, or other person who has agreed to participate or is participating in a distribution. … Underwriter means a person who has agreed with an issuer or selling security holder: (1) To purchase securities for distribution; or (2) To distribute securities for or on behalf of such issuer or selling security holder; or (3) To manage or supervise a distribution of securities for or on behalf of such issuer or selling security holder. + +- **한국어**: "distribution participant"란 underwriter, prospective underwriter, broker, dealer, 또는 distribution에 참여하기로 합의하였거나 참여하고 있는 그 밖의 자를 말한다. … "underwriter"란 발행인 또는 매도증권보유자와 다음을 합의한 자를 말한다: (1) distribution을 위하여 증권을 매수하기로 한 자; 또는 (2) 그 발행인·매도증권보유자를 위하여 또는 그를 대신하여 증권을 배포하기로 한 자; 또는 (3) 그 발행인·매도증권보유자를 위하여 또는 그를 대신하여 증권의 distribution을 관리·감독하기로 한 자. + +- **쉬운 설명**: §242.101(참가자 갈래)의 대상자를 정의한다. F-04에서 이 축은 인수인·브로커·딜러·배포 참여자를 제한대상 집합에 넣는 근거다. 참조 구현에서 배포 참여 구조(예: Securitize의 역할, 프런트 배포 파트너)가 여기 해당할 수 있는지가 사실관계 문제다 — "distribution에 참여하기로 합의"의 범위가 넓다. 시스템은 이들을 restrictedPersonRegistry에 role = DISTRIBUTION_PARTICIPANT로 등재하고, 매수 시 F-04가 §242.101 갈래로 라우팅한다(§3.9). 누가 participant인지의 확정은 계약 구조 검토가 필요해 변호사 확인 대상이다(§12 OD-F04-3). + +- **PASS/FAIL 반영**: 직접 ○(인적 축, 참가자) — G③의 제한대상 집합 원소 중 DISTRIBUTION_PARTICIPANT 판별의 근거. 소속 시 G⑤에서 §242.101 갈래로 라우팅. + +- **ERC-3643 변환**: restrictedPersonRegistry[tokenId][ONCHAINID] = DISTRIBUTION_PARTICIPANT; 등재·해제는 운영자 서명 트랜잭션(거래 외 경로), 무결성은 B-01. + +### 3.6 §242.100(b) "issuer"·"selling security holder" — 발행자 갈래 대상자 [ecfr.gov] + +- **조항**: Regulation M Rule 100(b), "selling security holder" 정의 + Rule 102(a)의 "issuer" 지칭, 17 C.F.R. §242.100(b)·§242.102(a) — ecfr.gov (2026-07-15 현행) + +- **핵심 원문**: Selling security holder means any person on whose behalf a distribution is made, other than an issuer. [§242.102(a):] In connection with a distribution of securities effected by or on behalf of an issuer or selling security holder, it shall be unlawful for such person … + +- **한국어**: "selling security holder"란, 발행인(issuer)을 제외하고, 그를 위하여(on whose behalf) distribution이 이루어지는 모든 자를 말한다. [§242.102(a):] 발행인 또는 매도증권보유자에 의하여 또는 그를 위하여 이루어지는 증권의 distribution과 관련하여, 그러한 자가 … 하는 것은 위법이다. + +- **쉬운 설명**: §242.102(발행자 갈래)의 두 핵심 주체를 정의한다. issuer는 증권을 발행하는 자(BUIDL 발행 vehicle)이고, selling security holder는 발행자가 아니면서 자기를 위해 distribution이 이뤄지는 자 — 예컨대 대량 보유분을 발행 프레임으로 되파는 기존 보유자다. F-04에서 이 축은 가장 우선적으로 막아야 할 대상 — 발행자와 매도증권보유자 자신의 매수 — 를 확정한다. restrictedPersonRegistry에 발행 vehicle 주소를 role = ISSUER로, 매도증권보유자를 SELLING_SECURITY_HOLDER로 등재한다. + +- **PASS/FAIL 반영**: 직접 ○(인적 축, 발행자) — G③의 원소 ISSUER·SELLING_SECURITY_HOLDER 판별 근거. 소속 시 G⑤에서 §242.102 갈래로 라우팅(1차 사정권). + +- **ERC-3643 변환**: restrictedPersonRegistry[tokenId][ONCHAINID] ∈ {ISSUER, SELLING_SECURITY_HOLDER}; ISSUER 주소는 발행 프레임(Manifest.facts.issuerIdentity)과 교차검증. + +### 3.7 §242.100(b) "affiliated purchaser" — 제한대상의 외연 [ecfr.gov] + +- **조항**: Regulation M Rule 100(b), "affiliated purchaser" 정의, 17 C.F.R. §242.100(b) — ecfr.gov (2026-07-15 현행) + +- **핵심 원문**: Affiliated purchaser means: (1) A person acting, directly or indirectly, in concert with a distribution participant, issuer, or selling security holder in connection with the acquisition or distribution of any covered security; or (2) An affiliate, which may be a separately identifiable department or division of a distribution participant, issuer, or selling security holder, that, directly or indirectly, controls the purchases of any covered security by a distribution participant, issuer, or selling security holder, whose purchases are controlled by any such person, or whose purchases are under common control with any such person; or (3) An affiliate … that regularly purchases securities for its own account or for the account of others, or that recommends or exercises investment discretion with respect to the purchase or sale of securities; Provided, however, That this paragraph (3) shall not apply to such affiliate if the following conditions are satisfied: (i) The distribution participant, issuer, or selling security holder: (A) Maintains and enforces written policies and procedures reasonably designed to prevent the flow of information to or from the affiliate that might result in a violation of §§ 242.101, 242.102, and 242.104; and (B) Obtains an annual, independent assessment of the operation of such policies and procedures; and (ii) The affiliate has no officers … or employees … in common with the distribution participant, issuer, or selling security holder that direct, effect, or recommend transactions in securities; and (iii) The affiliate does not, during the applicable restricted period, act as a market maker …, or engage, as a broker or a dealer, in solicited transactions or proprietary trading, in covered securities. + +- **한국어**: "affiliated purchaser"란 다음을 말한다: (1) covered security의 취득 또는 distribution과 관련하여, distribution participant·발행인·매도증권보유자와 직접 또는 간접으로 공동으로(in concert) 행위하는 자; 또는 (2) distribution participant·발행인·매도증권보유자의 별도로 식별 가능한 부서·부문일 수 있는 affiliate로서, 직접 또는 간접으로 그러한 자의 covered security 매수를 지배하거나, 그러한 자에 의해 매수가 지배되거나, 그러한 자와 공동지배(common control) 하에 매수가 이루어지는 affiliate; 또는 (3) 자기 계산 또는 타인 계산으로 정기적으로 증권을 매수하거나, 증권 매매에 관하여 추천하거나 투자재량을 행사하는 affiliate — 단, 다음 조건이 충족되면 이 (3)은 그 affiliate에 적용되지 아니한다: (i) distribution participant·발행인·매도증권보유자가 (A) §§242.101·242.102·242.104 위반을 초래할 수 있는 그 affiliate와의 정보 흐름을 차단하도록 합리적으로 설계된 서면 정책·절차를 유지·집행하고, (B) 그 정책·절차 운영에 관한 연간 독립 평가를 받으며, (ii) 그 affiliate가 증권거래를 지시·실행·추천하는 임원·직원을 그 자와 공유하지 아니하고, (iii) 그 affiliate가 해당 restricted period 동안 market maker로 행위하거나 broker·dealer로서 권유 거래·자기매매를 covered security에 대하여 하지 아니할 것. + +- **쉬운 설명**: 제한대상 집합의 외연을 넓히는 조문이자, F-04에서 가장 판정이 어려운 축이다. 세 갈래다. (1) 공동행위 — 발행자 등과 "in concert"로 covered security를 취득·배포하는 자. (2) 매수 지배·피지배·공동지배 관계의 affiliate. (3) 정기적으로 증권을 매수하거나 재량운용하는 affiliate — 단, 정보차단벽(information barrier)·연간 독립평가·임직원 비공유·restricted period 중 MM·권유거래 부작위라는 안전항 4요건을 모두 충족하면 (3)에서 빠진다. 여기서 두 가지가 중요하다. 첫째, 이 "affiliated purchaser"는 Rule 144·§405의 "affiliate"와 정의가 다르다 — Rule 144 affiliate는 발행인을 지배하는 자(control) 중심이지만, Reg M affiliated purchaser는 매수의 공동행위·지배 및 재량운용 중심이다. 그래서 A-06(Rule 144 affiliate 판정)의 산출을 그대로 F-04에 쓸 수 없다(§9.1). 둘째, (3)의 안전항은 information barrier가 갖춰진 계열 트레이딩 부문을 제한대상에서 빼주는 장치인데, 이 판단은 순수 기계 판정이 아니라 정책·절차의 실재 확인이 필요하다 — 그래서 F-04는 (3) 안전항 충족 여부를 자산·계열 레벨 사실(regMInfoBarrierCertified)로 상장·운영 시점에 확정해 두고, 런타임은 그 확정값을 읽는다. 누가 affiliated purchaser인지의 확정 자체는 변호사 확인 대상이다(§12 OD-F04-3). + +- **PASS/FAIL 반영**: 직접 ○(인적 축, 확장) — G③의 원소 AFFILIATED_PURCHASER 판별 근거. (3) 안전항 충족 계열은 제한대상에서 제외(regMInfoBarrierCertified = true인 계열 ONCHAINID는 미등재). + +- **ERC-3643 변환**: restrictedPersonRegistry[tokenId][ONCHAINID] = AFFILIATED_PURCHASER; (3) 안전항 = 계열 레벨 사실 regMInfoBarrierCertified(연간 갱신, 만료 시 A-11 규율과 유사한 신선도 필요)로 등재/비등재 결정; "in concert" 판단은 off-chain 운영자 판단 후 등재. + +### 3.8 §242.102(a) — 발행자 갈래 매수 금지 (★ 핵심 집행 조문) [ecfr.gov] + +- **조항**: Regulation M Rule 102(a) "Unlawful Activity", 17 C.F.R. §242.102(a) — ecfr.gov (2026-07-13 현행) + +- **핵심 원문**: (a) Unlawful Activity. In connection with a distribution of securities effected by or on behalf of an issuer or selling security holder, it shall be unlawful for such person, or any affiliated purchaser of such person, directly or indirectly, to bid for, purchase, or attempt to induce any person to bid for or purchase, a covered security during the applicable restricted period; Except That if an affiliated purchaser is a distribution participant, such affiliated purchaser may comply with § 242.101, rather than this section. + +- **한국어**: (a) 위법 행위. 발행인 또는 매도증권보유자에 의하여 또는 그를 위하여 이루어지는 증권의 distribution과 관련하여, 그러한 자 또는 그 자의 affiliated purchaser가, 직접 또는 간접으로, 해당 restricted period 동안 covered security를 매수 호가(bid for)하거나, 매수(purchase)하거나, 타인으로 하여금 매수 호가·매수하도록 유인(attempt to induce)하는 것은 위법이다. 다만 affiliated purchaser가 distribution participant인 경우, 그 affiliated purchaser는 본 조가 아니라 §242.101을 준수할 수 있다. + +- **쉬운 설명**: F-04의 심장이다. 이 한 문장이 세 좌표의 곱으로 위법을 확정한다. (i) 시점 = "during the applicable restricted period"(§3.4에서 코드화한 G①), (ii) 대상 = "a covered security"(§3.3의 G 대상 검사), (iii) 주체 = "issuer or selling security holder, or any affiliated purchaser of such person"(§3.6·§3.7의 G③). 그리고 금지되는 행위 유형은 셋 — bid for(매수 호가), purchase(매수), attempt to induce(매수 유인). permissioned DEX에서 이 셋은 각각 매수 주문 제출(bid), 체결(purchase), 그리고 다른 지갑을 통한 우회 매수 유도(attempt to induce, indirectly 포함)에 대응한다. "directly or indirectly"가 있어 발행자가 제3자 지갑을 내세워 사들이는 우회도 잡힌다 — 그래서 F-04는 매수인 ONCHAINID뿐 아니라 그 지갑이 제한대상의 지배·공동행위 하에 있는지(affiliated purchaser (1)·(2))까지 본다. 마지막 "Except That" 단서는 겹치는 지위의 라우팅 규칙이다 — affiliated purchaser가 동시에 distribution participant이면 §242.101을 따를 수 있다. 이 조문에는 고의·목적 요건이 없다. "매수 목적이 조작이었는지"를 묻지 않는다 — restricted period × covered security × 제한대상 주체이면 그 자체로 위법이다. 이 무-고의성이 F-04를 strict-liability 게이트로 만든다. + +- **PASS/FAIL 반영**: 직접 ○(★ 주 판정식) — G①(restricted period) ∧ G②(매수/bid 방향) ∧ G③(주체가 발행자 갈래 제한대상) ∧ ¬G④(예외 없음)이면 FAIL(RESTRICTED_PERIOD_PURCHASE_BLOCKED). "attempt to induce"·"indirectly"의 온체인 대응은 §5.4에서 상술. + +- **ERC-3643 변환**: Compliance 모듈 RegMDistributionModule.moduleCheck(from, to, amount, token)가 canTransfer 경로에서 호출되어 [offeringStatus ≠ COMPLETED] ∧ [to ∈ restrictedPersonRegistry(발행자 갈래)] ∧ [예외 미충족]이면 false 반환 → 거래 revert. "indirectly"는 to의 controllerCluster(A-04·A-06 공급) 소속 검사로 확장; FAIL 코드 RESTRICTED_PERIOD_PURCHASE_BLOCKED. + +### 3.9 §242.101(a) — 참가자 갈래 매수 금지 + 두 갈래 라우팅 [ecfr.gov] + +- **조항**: Regulation M Rule 101(a) "Unlawful Activity", 17 C.F.R. §242.101(a) — ecfr.gov (2026-07-01 현행) + +- **핵심 원문**: (a) Unlawful Activity. In connection with a distribution of securities, it shall be unlawful for a distribution participant or an affiliated purchaser of such person, directly or indirectly, to bid for, purchase, or attempt to induce any person to bid for or purchase, a covered security during the applicable restricted period; Provided, however, That if a distribution participant or affiliated purchaser is the issuer or selling security holder of the securities subject to the distribution, such person shall be subject to the provisions of § 242.102, rather than this section. + +- **한국어**: (a) 위법 행위. 증권의 distribution과 관련하여, distribution participant 또는 그 자의 affiliated purchaser가, 직접 또는 간접으로, 해당 restricted period 동안 covered security를 매수 호가·매수하거나 타인으로 하여금 매수 호가·매수하도록 유인하는 것은 위법이다. 다만 distribution participant 또는 affiliated purchaser가 그 distribution 대상 증권의 발행인 또는 매도증권보유자인 경우, 그러한 자는 본 조가 아니라 §242.102의 적용을 받는다. + +- **쉬운 설명**: §242.102와 쌍을 이루는 참가자 갈래 금지다. 금지 문언은 §242.102(a)와 사실상 동일하다 — restricted period 중 covered security의 bid·purchase·매수유인 금지. 차이는 주체가 distribution participant(인수인·브로커·딜러·배포참여자)와 그 affiliated purchaser라는 것이다. 그리고 마지막 "Provided, however" 단서가 §242.102(a)의 "Except That" 단서와 거울처럼 맞물려 두 갈래의 라우팅을 완성한다 — participant/affiliated purchaser가 동시에 발행자·매도증권보유자이면 §242.102로, 반대로 §242.102의 affiliated purchaser가 동시에 participant이면 §242.101로 갈 수 있다. F-04는 이 라우팅을 G⑤로 구현한다 — 매수인이 발행자/매도증권보유자이면 §242.102 근거로, 순수 participant이면 §242.101 근거로 판정한다. 결과(차단)는 동일하지만, 어느 조문 근거로 차단했는지를 이벤트에 남겨 감독 검사 시 재구성 가능하게 한다. + +- **PASS/FAIL 반영**: 직접 ○(주 판정식, 참가자 갈래) — G③의 주체가 DISTRIBUTION_PARTICIPANT(및 그 affiliated purchaser)이면 이 조문 근거로 동일 차단. G⑤가 §242.102/§242.101 근거를 라우팅. + +- **ERC-3643 변환**: 동일 RegMDistributionModule 내 분기 — buyerRole ∈ {ISSUER, SELLING_SECURITY_HOLDER}이면 basis = RULE_102, buyerRole = DISTRIBUTION_PARTICIPANT이면 basis = RULE_101; F04Check 이벤트에 basis 기록. 참가자 갈래 전용 예외(de minimis 2% 등, §3.12)는 basis = RULE_101일 때만 평가. + +### 3.10 §242.102(b) — 예외 활동: 환매 창구 분리의 조문 근거 [ecfr.gov] + +- **조항**: Regulation M Rule 102(b) "Excepted Activity", 17 C.F.R. §242.102(b) — ecfr.gov (2026-07-13 현행) + +- **핵심 원문**: (b) Excepted Activity. The following activities shall not be prohibited by paragraph (a) of this section: (1) Odd-lot transactions. … (2) Transactions by closed-end investment companies. (i) Transactions complying with § 270.23c-3 of this chapter; or (ii) Periodic tender offers of securities, at net asset value, conducted pursuant to § 240.13e-4 of this chapter by a closed-end investment company that engages in a continuous offering of its securities pursuant to § 230.415 of this chapter; Provided, however, That such securities are not traded on a securities exchange or through an inter-dealer quotation system or electronic communications network; or (3) Redemptions by commodity pools or limited partnerships. Redemptions by commodity pools or limited partnerships, at a price based on net asset value, which are effected in accordance with the terms and conditions of the instruments governing the securities; Provided, however, That such securities are not traded on a securities exchange, or through an inter-dealer quotation system or electronic communications network; or (4) Exercises of securities. … (5) Offers to sell or the solicitation of offers to buy. Offers to sell or the solicitation of offers to buy the securities being distributed; or (6) Unsolicited purchases. Unsolicited purchases that are not effected from or through a broker or dealer, on a securities exchange, or through an inter-dealer quotation system or electronic communications network; or (7) Transactions in Rule 144A securities. … + +- **한국어**: (b) 예외 활동. 다음 활동은 본 조 (a)에 의하여 금지되지 아니한다: (1) 단주 거래. … (2) 폐쇄형 투자회사의 거래. (i) §270.23c-3을 준수하는 거래; 또는 (ii) §230.415에 따라 자기 증권을 continuous offering 하는 폐쇄형 투자회사가 §240.13e-4에 따라 순자산가치(NAV)로 실시하는 정기 tender offer — 단, 그 증권이 증권거래소·inter-dealer quotation system·ECN에서 거래되지 아니할 것; 또는 (3) commodity pool·limited partnership의 환매. commodity pool·limited partnership이 증권을 규율하는 문서의 조건에 따라 NAV 기준 가격으로 실시하는 환매 — 단, 그 증권이 증권거래소·inter-dealer quotation system·ECN에서 거래되지 아니할 것; 또는 (4) 증권의 행사. … (5) 매도 청약 또는 매수 청약의 권유. 배포 중인 증권의 매도 청약 또는 매수 청약의 권유; 또는 (6) 비권유 매수. broker·dealer로부터·통하여, 증권거래소에서, 또는 inter-dealer quotation system·ECN을 통하여 이루어지지 아니하는 비권유 매수; 또는 (7) Rule 144A 증권 거래. … + +- **쉬운 설명**: PASS 경로들의 집합이자, "환매 창구 분리 = Reg M 방어선"의 조문 근거다. F-04에 닿는 지점 넷. 첫째, (5) 매도 청약 — 배포 중인 증권을 파는 것(청약·권유)은 금지되지 않는다. 당연하다 — Reg M은 매수를 막지 매도를 막지 않는다. F-04가 매수 방향만 게이트하는(G②) 근거다. 둘째, (2)(ii)와 (3) — 폐쇄형 투자회사의 NAV tender offer, commodity pool·LP의 NAV 환매는 예외인데, 둘 다 "그 증권이 거래소·inter-dealer quotation system·ECN에서 거래되지 아니할 것"이라는 단서를 단다. 이것이 결정적이다. BUIDL의 USD/USDC 환매를 이 예외에 얹으려면, 그 환매가 DEX(거래소·ECN에 준하는 venue)를 통해 이뤄지면 안 된다. 그래서 환매는 DEX 매수 경로가 아니라 별도 창구(운영자 통제, off-venue)로 라우팅되어야 하고 — 이것이 정확히 §1.4의 방어선이다. 셋째, (6) 비권유 매수 — broker·dealer·거래소·ECN을 통하지 않는 비권유 매수는 예외다. 그런데 permissioned DEX에서의 매수는 그 venue(거래소·ECN에 준함)를 통한 매수이므로 (6) 예외를 타기 어렵다. 즉 온-DEX 매수는 대개 (6)으로 구제되지 않는다 — F-04가 온-DEX 제한대상 매수를 원칙적으로 차단하는 근거다. 넷째, SEC 스탭이 종전에 취한 입장 — 보유자 선택에 의한 환매(redemption at the option of the holder)라도 발행자가 (6) "unsolicited transactions" 예외에 의존해 실행할 수는 없다는 것 — 은 환매를 (6)이 아니라 (2)(ii)/(3)의 off-venue NAV 환매 구조로 설계해야 함을 강하게 시사한다(§12 OD-F04-5). 이 예외들의 온체인 적용 가능성(특히 DEX = 거래소/ECN인지)은 BD/ATS 성격규명과 얽혀 변호사 확인 대상이다(§12 OD-F04-2). + +- **PASS/FAIL 반영**: 직접 ○(예외 경로) — G④(예외 성립)의 후보 집합이 여기서 온다. 다만 온-DEX 매수 맥락에서 (2)(ii)·(3)·(6)은 "거래소·ECN 밖" 단서 때문에 대개 불성립 → 환매는 F-04 경로 밖의 별도 창구로 분리. (5)는 매도 방향이라 G②에서 이미 걸러짐. + +- **ERC-3643 변환**: 환매 = 별도 redemptionChannel(agent-role burn/mint 경로)로 라우팅 — DEX canTransfer(매수) 경로를 타지 않으므로 RegMDistributionModule이 관여하지 않음(구조적 분리); Manifest.facts.redemptionChannelRef가 그 경로를 명시. G④의 온-DEX 예외 후보는 대개 ∅(regMExceptionProfile = NONE_ON_VENUE). + +### 3.11 §242.102(d) — 예외 증권: BUIDL이 왜 예외에 해당 안 되는가 [ecfr.gov] + +- **조항**: Regulation M Rule 102(d) "Excepted Securities", 17 C.F.R. §242.102(d) — ecfr.gov (2026-07-13 현행) + +- **핵심 원문**: (d) Excepted Securities. The provisions of this section shall not apply to any of the following securities: (1) Actively-traded reference securities. Reference securities with an ADTV value of at least $1 million that are issued by an issuer whose common equity securities have a public float value of at least $150 million; Provided, however, That such securities are not issued by the issuer, or any affiliate of the issuer, of the security in distribution. (2) Certain nonconvertible and asset-backed securities. … (3) Exempted securities. "Exempted securities" as defined in section 3(a)(12) of the Exchange Act (15 U.S.C. 78c(a)(12)); or (4) Face-amount certificates or securities issued by an open-end management investment company or unit investment trust. Face-amount certificates issued by a face-amount certificate company, or redeemable securities issued by an open-end management investment company or a unit investment trust. Any terms used in this paragraph (d)(4) that are defined in the Investment Company Act of 1940 (15 U.S.C. 80a-1 et seq.) shall have the meanings specified in such Act. + +- **한국어**: (d) 예외 증권. 본 조의 규정은 다음 증권에는 적용되지 아니한다: (1) actively-traded reference securities. ADTV 가치 $100만 이상이고 그 발행인의 보통주 지분증권의 public float 가치가 $1억 5천만 이상인 reference securities — 단, 그 증권이 distribution 대상 증권의 발행인 또는 그 발행인의 affiliate에 의하여 발행되지 아니할 것. (2) 일정한 비전환·자산유동화 증권. … (3) exempted securities. Exchange Act §3(a)(12)[15 U.S.C. §78c(a)(12)]에 정의된 "exempted securities"; 또는 (4) 액면증서 또는 개방형 관리투자회사·단위투자신탁이 발행한 증권. face-amount certificate company가 발행한 액면증서, 또는 open-end management investment company·unit investment trust가 발행한 상환가능 증권(redeemable securities). 본 (d)(4)에서 사용되고 1940년 투자회사법[15 U.S.C. §80a-1 이하]에 정의된 용어는 그 법이 정한 의미를 가진다. + +- **쉬운 설명**: F-04가 "그럼에도 걸린다"를 확정하는 조문이다 — BUIDL이 이 예외 증권 목록의 어디에도 들어가지 않음을 보여야 게이트 상시화가 정당화된다. 하나씩 배제한다. (1) actively-traded reference security — 발행인의 보통주 public float $1억 5천만 이상 + ADTV $100만 이상. BUIDL 발행 vehicle은 사모펀드로 공개 보통주 public float가 없다 → 미해당. 게다가 단서가 "distribution 대상 증권의 발행인·계열이 발행한 것이 아닐 것"이라, 자기 증권은 애초에 이 예외에서 빠진다. (2) 비전환·자산유동화 증권 예외 — 투자등급 채권 등에 한하며 Form SF-3 shelf 등록 요건이 붙는다 → 사모 펀드 지분에 미해당. (3) exempted securities(§3(a)(12)) — 국채·지방채 등 법정 면제증권. BUIDL은 국채를 담지만 그 자체는 사모펀드 지분이지 §3(a)(12) exempted security가 아니다 → 미해당. (4) 가장 중요 — open-end management investment company·UIT가 발행한 상환가능 증권은 예외다. 만약 BUIDL이 등록 개방형 뮤추얼펀드였다면 이 (d)(4)로 Reg M 전체를 피했을 것이다. 그러나 BUIDL은 ICA §3(c)(7) 사모펀드다 — 등록 투자회사가 아니므로 (d)(4)의 "open-end management investment company"에 해당하지 않는다. 이 미해당이 F-04의 존재 이유를 정확히 만든다: 등록 뮤추얼펀드라면 자동 면제되지만, 사모펀드는 자동 면제가 없어 발행 중 매수를 실제로 막아야 한다. (d)(4)가 열려 있지 않기 때문에 F-04가 필요하다. + +- **PASS/FAIL 반영**: 직접 ○(적용 배제의 부정) — 이 조문은 "BUIDL이 예외 증권에 해당하면 F-04 비활성"을 규정하는데, 분석 결과 BUIDL은 (1)~(4) 어디에도 미해당 → F-04 활성 유지. 자산 카드의 regMExceptionProfile = NONE(예외 증권 아님) 선언이 이 결론의 코드화. + +- **ERC-3643 변환**: Manifest.facts.regMExceptionProfile ∈ {NONE, ACTIVELY_TRADED, OPEN_END_UIT, EXEMPTED_3A12, ...}; BUIDL = NONE → F-04 활성. 이 선언은 발행 vehicle의 법적 성격(§3(c)(7) 비등록)에서 도출되는 사실이라 발행자 재량 없음(B-03 지위 정합과 같은 성격). + +### 3.12 §242.101(c) — 참가자 갈래 예외 증권: 고정 NAV 사모펀드에 미적용 [ecfr.gov] + +- **조항**: Regulation M Rule 101(c) "Excepted Securities" 및 (b)(7) "De minimis transactions", 17 C.F.R. §242.101(c)·(b)(7) — ecfr.gov (2026-07-01 현행) + +- **핵심 원문**: (c) Excepted Securities. The provisions of this section shall not apply to any of the following securities: (1) Actively-traded securities. Securities that have an ADTV value of at least $1 million and are issued by an issuer whose common equity securities have a public float value of at least $150 million; Provided, however, That such securities are not issued by the distribution participant or an affiliate of the distribution participant; … (4) Face-amount certificates or securities issued by an open-end management investment company or unit investment trust. … [(b)(7):] De minimis transactions. Purchases during the restricted period, other than by a passive market maker, that total less than 2% of the ADTV of the security being purchased, or unaccepted bids; Provided, however, That the person making such bid or purchase has maintained and enforces written policies and procedures reasonably designed to achieve compliance with the other provisions of this section; … + +- **한국어**: (c) 예외 증권. 본 조의 규정은 다음 증권에 적용되지 아니한다: (1) actively-traded securities. ADTV 가치 $100만 이상이고 그 발행인의 보통주 지분증권의 public float 가치가 $1억 5천만 이상인 증권 — 단, 그 증권이 distribution participant 또는 그 participant의 affiliate에 의하여 발행되지 아니할 것; … (4) 개방형 관리투자회사·단위투자신탁이 발행한 증권 등. … [(b)(7):] de minimis 거래. restricted period 동안 passive market maker가 아닌 자에 의한, 매수 대상 증권 ADTV의 2% 미만에 해당하는 매수, 또는 승낙되지 아니한 bid — 단, 그 bid·매수를 하는 자가 본 조의 다른 규정 준수를 위하여 합리적으로 설계된 서면 정책·절차를 유지·집행할 것; … + +- **쉬운 설명**: §242.101(참가자 갈래)의 예외 증권·활동이다. §242.102(d)와 병렬로, F-04의 참가자 갈래도 상시 활성인 이유를 확정한다. (1) actively-traded securities — public float $1억 5천만 이상. BUIDL 미해당(§3.11과 동일 논리). (4) open-end/UIT — BUIDL은 사모펀드라 미해당. 추가로 (b)(7) de minimis — restricted period 중 매수 대상 ADTV의 2% 미만 매수는 참가자 갈래에서 예외다(서면 정책·절차 유지 조건). 이 2% de minimis는 participant 갈래에만 있고 issuer 갈래(§242.102)에는 없다는 점이 중요하다 — 발행자·매도증권보유자 자신의 매수는 아무리 소액이어도 이 예외로 구제되지 않는다. F-04는 이 비대칭을 반영해 de minimis 예외를 basis = RULE_101(참가자 갈래)일 때만, 그리고 ADTV 대비 2% 미만 + 정책·절차 요건 충족 시에만 G④에서 인정한다. 발행자 갈래(basis = RULE_102)에는 de minimis 경로가 없다. + +- **PASS/FAIL 반영**: 직접 ○(참가자 갈래 예외) — (c)(1)·(4) 미해당으로 참가자 갈래 F-04 활성 유지. (b)(7) de minimis는 basis = RULE_101 ∧ 누적매수 < 2% ADTV ∧ regMPoliciesCertified일 때만 G④ PASS(REG_M_EXCEPTION_APPLIED). 발행자 갈래에는 미적용. + +- **ERC-3643 변환**: G④ 참가자 de minimis 분기 = (basis = RULE_101) ∧ (cumulativeRestrictedPurchase[buyer][token] + amount < 0.02 × ADTV[token]) ∧ (regMPoliciesCertified[buyer]); ADTV는 자산 레벨 상수(거버넌스), 누적매수는 이 예외 판정 한정 카운터(STATEFUL 아님 — 예외 경로 밖에서는 미사용). 발행자 갈래는 이 분기 자체 비활성. + +### 3.13 Exchange Act §9(a)(1)·(2)·(6) — 제정법 조작 금지: Reg M이 구체화한 상위 규범 [govinfo.gov] + +- **조항**: Securities Exchange Act §9(a)(1)·(2)·(6), 15 U.S.C. §78i(a)(1)·(2)·(6) — govinfo.gov (Dodd-Frank 개정 반영 post-2010 본문) + +- **핵심 원문**: (a) … It shall be unlawful for any person, directly or indirectly, … (1) For the purpose of creating a false or misleading appearance of active trading in any security other than a government security, or a false or misleading appearance with respect to the market for any such security, (A) to effect any transaction in such security which involves no change in the beneficial ownership thereof, or (B) to enter an order or orders for the purchase of such security with the knowledge that an order or orders of substantially the same size, at substantially the same time, and at substantially the same price, for the sale of any such security, has been or will be entered by or for the same or different parties, or (C) to enter any order or orders for the sale of any such security with the knowledge that an order or orders of substantially the same size, at substantially the same time, and at substantially the same price, for the purchase of such security, has been or will be entered by or for the same or different parties. (2) To effect, alone or with 1 or more other persons, a series of transactions in any security registered on a national securities exchange, any security not so registered, or in connection with any security-based swap or security-based swap agreement with respect to such security creating actual or apparent active trading in such security, or raising or depressing the price of such security, for the purpose of inducing the purchase or sale of such security by others. … (6) To effect either alone or with one or more other persons any series of transactions for the purchase and/or sale of any security other than a government security for the purpose of pegging, fixing, or stabilizing the price of such security in contravention of such rules and regulations as the Commission may prescribe as necessary or appropriate in the public interest or for the protection of investors. + +- **한국어**: (a) … 누구든지, 직접 또는 간접으로, … 하는 것은 위법이다 — (1) 국채 이외의 어떤 증권에 관하여 외관상 활발한 거래의 허위·오도 외관, 또는 그 증권의 시장에 관한 허위·오도 외관을 만들 목적으로, (A) 실질적 소유의 변동을 수반하지 아니하는 그 증권의 거래를 실행하거나(위장매매), (B) 동일·상이 당사자가 실질적으로 같은 규모·시점·가격으로 그 증권을 매도하는 주문을 이미 냈거나 낼 것을 알면서 매수 주문을 내거나, (C) 그 반대로 매수 주문이 있음을 알면서 매도 주문을 내는 것(짝맞춤주문). (2) 단독 또는 1인 이상과 함께, 국법상 거래소에 등록된 증권, 그렇게 등록되지 아니한 증권, 또는 그 증권 관련 security-based swap과 관련하여, 그 증권에 실제 또는 외관상 활발한 거래를 만들거나 그 가격을 올리거나 내려, 타인의 그 증권 매매를 유인할 목적으로 일련의 거래를 실행하는 것. … (6) 단독 또는 1인 이상과 함께, 국채 이외의 어떤 증권을 pegging·fixing·stabilizing할 목적으로, Commission이 공익 또는 투자자 보호를 위하여 필요·적절하다고 정하는 규칙·규정에 위반하여 일련의 매수·매도 거래를 실행하는 것. + +- **쉬운 설명**: Reg M(그리고 F-04)이 사전 규칙으로 구체화한 상위 제정법이다. 세 항이 F-04에 각기 닿는다. (a)(2)가 핵심 — "일련의 거래로 가격을 올리거나 내려 타인의 매매를 유인할 목적"의 조작이다. 발행 중에 발행자·계열이 자기 증권을 사들이는 것은 바로 이 (a)(2) 유형의 조작 위험이고, Reg M Rule 102는 그 목적 입증 없이도 이를 사전 차단한다. 여기서 Dodd-Frank 개정이 결정적이다 — 개정 전 (a)(2)는 "국법상 거래소에 등록된 증권"에 한정됐으나, 2010년 개정으로 "그렇게 등록되지 아니한 증권(any security not so registered)"까지 명시 포섭됐다. 즉 BUIDL 같은 미등록 사모 토큰 증권도 §9(a)(2) 조작 금지의 사정권에 있다 — F-04가 미등록 증권에 대해서도 정당하게 작동하는 제정법적 근거다. (a)(1)은 위장매매·짝맞춤주문(실질 소유 변동 없는 거래) — 이는 F-02(자전거래/wash-trade 감시)가 사후 flag로 겨누는 유형과 직결된다(§9.1). (a)(6)은 pegging·fixing·stabilizing를 SEC 규칙 위반 시 금지하는데, 그 "SEC 규칙"이 바로 Reg M Rule 104(안정조작 조건)이다(§3.15) — 안정조작은 원칙 금지이되 Rule 104 조건을 지키면 허용되는 예외 구조임을 보여준다. + +- **PASS/FAIL 반영**: 간접 ✕(제정법 앵커) — F-04는 §9(a)를 직접 판정하지 않는다. Reg M의 사전 게이트가 근거하는 상위 규범이자, "목적 요건 제거 → 기계 판정 가능"이라는 F-04 설계 정당성의 원천(§1.1·§3.0.1). (a)(2)의 미등록 증권 포섭이 F-04의 적용 대상 범위를 뒷받침. + +- **ERC-3643 변환**: 직접 필드 없음. Reg M 모듈(F-04)과 감시 모듈(F-02)의 분리 배치가 (a)(2) 사전 차단 / (a)(1) 사후 탐지의 역할 분담을 코드에 옮긴 것. + +### 3.14 Exchange Act §10(b)·§9(g) + Securities Act §17(a) — anti-fraud 병존과 exempted security 경계 [uscode.house.gov·govinfo.gov] + +- **조항**: Exchange Act §10(b), 15 U.S.C. §78j(b) — uscode.house.gov (2026-04-29 효력); Exchange Act §9(g), 15 U.S.C. §78i(g) — govinfo.gov; Securities Act §17(a), 15 U.S.C. §77q(a)(Reg M Prelim Note 인용) + +- **핵심 원문**: [§10(b):] It shall be unlawful for any person, directly or indirectly, by the use of any means or instrumentality of interstate commerce or of the mails, or of any facility of any national securities exchange— … (b) To use or employ, in connection with the purchase or sale of any security registered on a national securities exchange or any security not so registered, or any securities-based swap agreement … any manipulative or deceptive device or contrivance in contravention of such rules and regulations as the Commission may prescribe as necessary or appropriate in the public interest or for the protection of investors. [§9(g):] The provisions of subsection (a) of this section shall not apply to an exempted security. + +- **한국어**: [§10(b):] 누구든지, 직접 또는 간접으로, 주간통상·우편의 수단이나 국법상 거래소의 시설을 사용하여 — … (b) 국법상 거래소에 등록된 증권이든 그렇게 등록되지 아니한 증권이든 그 매매와 관련하여, Commission이 공익·투자자 보호를 위하여 필요·적절하다고 정하는 규칙·규정에 위반하여 조작적·기망적 장치나 술책을 사용·이용하는 것은 위법이다. [§9(g):] 본 조 (a)의 규정은 exempted security에는 적용되지 아니한다. + +- **쉬운 설명**: 두 가지를 확정한다. 첫째(§10(b)), Reg M 통과가 anti-fraud 면책이 아님을 다시 못 박는다 — §10(b)는 "등록·미등록 증권 불문" 매매와 관련한 모든 조작적·기망적 장치를 금지하는 포괄 조항(Rule 10b-5의 근거)이다. F-04의 밝은 선을 지켰어도 매수가 기망·조작 스킴의 일부였다면 §10(b)로 별도 책임이 성립한다 — §3.1 Preliminary Note의 병존을 제정법 층에서 확인한다. 둘째(§9(g)), §9(a)는 exempted security(국채·지방채 등 §3(a)(12))에는 적용되지 않는다. 이는 §3.11 (d)(3)·§3.12의 exempted security 예외와 맞물린다 — BUIDL 토큰은 국채를 담지만 그 자체는 사모펀드 지분이지 exempted security가 아니므로 §9(g) 면제를 받지 못한다(F-04 적용 유지). §17(a)(증권법)는 청약·판매 단계의 사기를 겨누며 Reg M Preliminary Note가 병존을 명시한다 — 발행 단계 전반의 anti-fraud 그물이다. + +- **PASS/FAIL 반영**: 간접 ✕(경계·앵커) — §10(b)는 F-04 PASS 의미의 한계(면책 아님)를, §9(g)는 exempted security 미해당(F-04 적용 유지)을 확정한다. 판정식이 아니라 적용 범위·의미 경계. + +- **ERC-3643 변환**: 직접 필드 없음. regMExceptionProfile = NONE 판정에 §9(g)/§3(a)(12) 미해당 논거가 포함됨을 카드 주석으로 기록. + +### 3.15 §242.102(e)·§242.104 — 면제권한과 안정조작: 고정 NAV·무-시세받치기 논거의 자리 [ecfr.gov] + +- **조항**: Regulation M Rule 102(e) "Exemptive Authority", 17 C.F.R. §242.102(e) + Rule 104 "Stabilizing", 17 C.F.R. §242.104 + Rule 100(b) "Stabilize" 정의 — ecfr.gov (2026-07-13 현행) + +- **핵심 원문**: [§242.102(e):] Exemptive Authority. Upon written application or upon its own motion, the Commission may grant an exemption from the provisions of this section, either unconditionally or on specified terms and conditions, to any transaction or class of transactions, or to any security or class of securities. [§242.100(b) "Stabilize":] Stabilize or stabilizing means the placing of any bid, or the effecting of any purchase, for the purpose of pegging, fixing, or maintaining the price of a security. + +- **한국어**: [§242.102(e):] 면제 권한. 서면 신청에 의하거나 직권으로, Commission은 본 조의 규정으로부터의 면제를, 무조건 또는 특정 조건 하에, 모든 거래 또는 거래의 종류, 또는 모든 증권 또는 증권의 종류에 대하여 부여할 수 있다. [§242.100(b) "Stabilize":] "stabilize" 또는 "stabilizing"이란 증권의 가격을 pegging·fixing·유지할 목적으로 bid를 내거나 매수를 실행하는 것을 말한다. + +- **쉬운 설명**: F-04의 두 경계 — 허용의 상한과 면제의 문 — 을 담는다. 첫째, 안정조작(stabilizing)은 §9(a)(6)·Rule 104가 정한 엄격 조건(오퍼링 가격 이하, 독립 bid 우선, 공시, at-the-market 오퍼링 금지 등) 하에서만 허용되는 예외적 매수다. 그런데 BUIDL은 NAV $1 고정을 목표로 하는 구조라 안정조작을 할 유인 자체가 구조적으로 없다 — 가격을 떠받칠 이유가 없다. 이것이 프로젝트의 "무-시세받치기 논거"의 핵심이다: 고정 NAV 상품에서는 발행자가 시장 가격을 조작할 경제적 동기가 낮으므로, Reg M이 겨냥하는 조작 위험이 구조적으로 작다. 둘째(§242.102(e)), 그럼에도 F-04가 발행자·계열의 온-DEX 매수를 원칙 차단하는 이상, 정당한 운영상 매수(예: 특정 환매·재조정)를 열려면 SEC의 면제(exemptive relief)나 no-action 입장이 필요할 수 있다. 여기서 정직해야 한다 — "고정 NAV라 조작 위험이 낮다"는 논거는 강력한 분석적 근거이지, 그 자체로 Rule 102의 밝은 선을 무효화하지 않는다. Rule 102에는 고정 NAV 사모펀드를 위한 자동 예외가 없다(§3.11에서 (d)(4)가 등록 개방형에 한정됨을 확인). 따라서 이 무-시세받치기 논거를 실제 면제·no-action으로 승격시킬지, 아니면 환매 창구 분리(§3.10)만으로 충분한지는 변호사 위임 사항이다(§12 OD-F04-4). 시스템의 보수 기본값은 면제가 확인되기 전까지 발행자 갈래 온-DEX 매수를 전량 차단한다. + +- **PASS/FAIL 반영**: 조건부 — Rule 104 안정조작은 BUIDL 미사용(고정 NAV)이라 G④ 예외로 활성화하지 않음(보수). §242.102(e) 면제는 확인 전까지 게이트 완화 근거로 쓰지 않음 — "면제가 있으므로 통과" 같은 역방향 완화는 존재하지 않는다. + +- **ERC-3643 변환**: stabilizing 경로 미구현(Manifest.facts.stabilizingEnabled = false, 고정 NAV); 면제 획득 시에만 regMExemptionRef(SEC 면제 근거 해시)를 두어 특정 거래 클래스의 G④ 예외로 편입 — 현행 ∅. 완화 방향 변경은 거버넌스 경로 + 법적 근거 등록 필수(§11). + +### 3.16 Rel. No. 34-38067 — Reg M 채택 취지 [sec.gov·federalregister.gov] + +- **조항**: Anti-manipulation Rules Concerning Securities Offerings, Securities Exchange Act Release No. 34-38067 (Dec. 20, 1996), 62 FR 520 (Jan. 3, 1997), File No. S7-11-96, RIN 3235-AF54 — sec.gov · federalregister.gov + +- **핵심 원문**: The Commission is adopting new Regulation M governing the activities of underwriters, issuers, selling security holders, and others in connection with offerings of securities. Regulation M is intended to preclude manipulative conduct by persons with an interest in the outcome of an offering. + +- **한국어**: Commission은 증권 오퍼링과 관련한 인수인·발행인·매도증권보유자 및 그 밖의 자의 행위를 규율하는 새 Regulation M을 채택한다. Regulation M은 오퍼링의 결과에 이해관계를 가진 자의 조작적 행위를 사전에 배제(preclude)함을 목적으로 한다. + +- **쉬운 설명**: F-04의 목적론적 해석 기준이다. Reg M의 목적은 "오퍼링 결과에 이해관계를 가진 자(발행자·인수인·매도보유자 등)의 조작적 행위를 사전에 배제"하는 것이다 — 이 한 문장이 F-04의 제한대상 집합(누구를 막는가)과 사전 차단 방식(왜 사후가 아니라 사전 게이트인가)을 동시에 정당화한다. 이해관계자를 restricted period 동안 매수에서 배제한다는 규칙의 취지가, permissioned DEX에서 발행자·계열의 매수를 체결 전 차단하는 F-04의 설계와 정확히 일치한다. 이 release는 또한 Reg M이 종전 Rule 10b-6 등을 대체하며 actively-traded 증권의 인수인 제한을 없애는 등 규제 부담을 완화하는 방향임을 밝히는데 — 그 완화가 BUIDL에는 닿지 않는다(public float 요건 미충족, §3.11)는 점이 F-04 상시화를 다시 확인한다. + +- **PASS/FAIL 반영**: 간접 ✕(취지) — 판정식이 아니라, 제한대상 집합 획정·사전 차단 방식의 목적론적 근거. 예외 경계(§3.10~§3.12) 해석 시 "조작 위험이 구조적으로 없는가"를 묻는 기준(§3.15 무-시세받치기 논거의 취지적 뒷받침). + +- **ERC-3643 변환**: 직접 필드 없음. F04Check 이벤트에 근거 release를 주석으로 남겨 감독 검사 시 판정의 규범적 출처 재구성. + +--- + +### 3.17 Sub-요건 분해 매트릭스 + ERC-3643 총정리 (§3 말미) + +위 §3.1~§3.16의 원리를 F-04가 실제로 판정하는 원자적 검증 단위로 분해한다. 각 행은 §5.2의 판정 분기와 1:1 대응한다(채널: V = 상장 시점 카드 검사, G = per-tx 게이트, GOV = 거버넌스 평면 전제). deemed-PASS·역방향 완화 경로는 존재하지 않는다. + +**표 A — Sub-요건 분해 매트릭스** + +| Sub-ID | 원자 검증 단위 | 근거 조문 | 채널 | PASS 조건 | FAIL/REVIEW 코드 | +| --- | --- | --- | --- | --- | --- | +| F04-V1 | 선언 존재 — offeringStatus 비어있지 않음 | §242.100(b) distribution·restricted period(§3.2·§3.4) | V | Manifest.facts.offeringStatus ∈ {ONGOING_CONTINUOUS, ONGOING_TRANCHE, COMPLETED} | REG_M_OFFERING_STATUS_MISSING | +| F04-V2 | 예외증권 선언 정합 — regMExceptionProfile | §242.102(d)·§242.101(c)(§3.11·§3.12) | V | regMExceptionProfile 선언됨; BUIDL = NONE(사모펀드 → 미해당) | REVIEW_REGM_EXCEPTION_CONFLICT (개방형/exempted 오선언 시) | +| F04-V3 | 제한대상 레지스트리 무결 — 발행자/SSH/participant/affiliated purchaser 등재 | §242.100(b)(§3.5~§3.7) | V | restrictedPersonRegistry[token] 구성이 B-01 무결성 검증 통과 | REG_M_RESTRICTED_SET_UNVERIFIED | +| F04-G1 | 시점 — restricted period 활성 | §242.100(b) restricted period(§3.4) | G① | offeringStatus ≠ COMPLETED (상시형은 상시 true) | PASS(비활성 시): REG_M_NOT_IN_DISTRIBUTION | +| F04-G2 | 방향 — 매수/bid | §242.102(a)·(b)(5)(§3.8·§3.10) | G② | txContext가 매수(bid·purchase); 매도이면 사정권 밖 | PASS(매도 시): REG_M_DIRECTION_SELL | +| F04-G3 | 대상 — covered security 소속 | §242.100(b) covered security(§3.3) | G② | txContext.tokenId → legalClassId ∈ 활성 covered security 집합 | (미소속 시 F-04 비대상) | +| F04-G4 | 주체 — 제한대상 집합 원소 | §242.102(a)·§242.101(a)(§3.5~§3.9) | G③ | to ∈ restrictedPersonRegistry[token] (직접) 또는 controllerCluster 경유(indirectly) | PASS(비대상 시): REG_M_NON_RESTRICTED_BUYER | +| F04-G5 | 예외 — 성립 여부 | §242.102(b)·§242.101(b)(7)·(c)(§3.10~§3.12) | G④ | 온-DEX 예외 후보 대개 ∅; 참가자 갈래 de minimis(<2% ADTV)만 조건부 | PASS(성립 시): REG_M_EXCEPTION_APPLIED | +| F04-G6 | 라우팅 — 조문 근거 확정 | §242.102(a) Except That·§242.101(a) Provided(§3.8·§3.9) | G⑤ | buyerRole ∈ {ISSUER,SSH} → basis=RULE_102; = PARTICIPANT → basis=RULE_101 | (라우팅만, 결과 동일) | +| F04-GOUT | 종국 판정 | §242.102(a)/§242.101(a)(§3.8·§3.9) | G | G①∧G②∧G3∧G4∧¬G5 이면 차단 | RESTRICTED_PERIOD_PURCHASE_BLOCKED | +| F04-GOV | 상수 규율 — offeringStatus·restrictedPersonRegistry·ADTV·면제의 완화 방향 변경은 거버넌스 경로만 | §242.102(e)(§3.15) | GOV | 게이트 아닌 전제 — 완화(집합 축소·게이트 해제)는 다중서명·time-lock + 법적 근거 등록 필수 | (우회 시도는 B-01 버전 검사로 표면화) | + +**판독 규칙 두 가지.** ① 모든 예외·라우팅은 좁히는 방향으로만 작동한다 — G⑤ 라우팅은 근거 조문만 바꿀 뿐 차단 결과를 뒤집지 못하고, G④ 예외는 조문이 명시한 좁은 통로(참가자 de minimis, off-venue 환매)만 열 뿐 "면제가 있을 것 같으니 통과" 같은 역방향 완화는 없다. ② 환매는 이 게이트를 통과하는 것이 아니라 게이트 경로 밖(별도 창구)으로 라우팅된다 — F-04가 환매를 "PASS"시키는 것이 아니라 구조적으로 관여하지 않는다(§3.10·§5.4). + +**표 B — ERC-3643/T-REX 필드 총정리** + +F-04는 claim(증명서)에 근거하지 않는 게이트형이므로 claim.basis가 없다. 대신 아래 세 층 — 자산 카드 상수, 자산별 제한대상 레지스트리, 거버넌스 평면 상수 — 이 판정의 입력이다. 자격 갈래를 명명하는 claim.basis의 자리를 여기서는 buyerRole enum이 대신한다. + +| 층 | 필드 | 값·형식 | 근거 조문 | 소비·비고 | +| --- | --- | --- | --- | --- | +| 자산 카드 (ManifestCore) | facts.offeringStatus | enum {ONGOING_CONTINUOUS, ONGOING_TRANCHE, COMPLETED} | 100(b) distribution·restricted period(§3.2·§3.4) | G①; BUIDL = ONGOING_CONTINUOUS(상시); 무결·변경은 B-01 | +| 자산 카드 | facts.regMExceptionProfile | enum {NONE, ACTIVELY_TRADED, OPEN_END_UIT, EXEMPTED_3A12, NONCONV_ABS} | 102(d)·101(c)(§3.11·§3.12) | V2·G5; BUIDL = NONE(사모펀드) | +| 자산 카드 | facts.legalClassId | uint (class 식별자) | 100(b) covered security(§3.3) | G3(대상 소속); D-01·B-03과 공유 | +| 자산 카드 | facts.referenceSecurities | tokenId[] (대개 ∅) | 100(b) reference security(§3.3) | G3(대상 확장); 대개 비어있음 | +| 자산 카드 | facts.redemptionChannelRef | address (별도 창구) | 102(b)(2)(ii)·(3)(§3.10) | 환매 경로 분리 — DEX canTransfer 미경유(§5.4) | +| 자산 카드 | facts.stabilizingEnabled | bool = false | 104·9(a)(6)(§3.15) | 고정 NAV라 미사용 | +| 자산별 레지스트리 | restrictedPersonRegistry[token][ONCHAINID] | enum buyerRole {ISSUER, SELLING_SECURITY_HOLDER, AFFILIATED_PURCHASER, DISTRIBUTION_PARTICIPANT} | 100(b)(§3.5~§3.7) | G④·G⑤; 등재·해제는 운영자 서명(거래 외), 무결성 B-01 | +| 자산별 레지스트리 | regMInfoBarrierCertified[token][ONCHAINID] | bool (계열 안전항 (3) 충족) | 100(b) affiliated purchaser (3)(§3.7) | true인 계열은 AFFILIATED_PURCHASER 미등재; 연간 갱신(신선도) | +| 거버넌스 상수 | ADTV[token] | value (예외 판정용) | 102(d)(1)·101(b)(7)·(c)(1)(§3.11·§3.12) | G④ de minimis 2% 분모; 변경은 거버넌스 | +| 거버넌스 상수 | regMExemptionRef | 해시 (SEC 면제 근거, 현행 ∅) | 102(e)(§3.15) | G④ 확장(면제 획득 시만); 현행 미사용 | +| 거래 컨텍스트 | txContext.direction·tokenId·to | 매수/매도·토큰·수신 ONCHAINID | 102(a)(§3.8) | G②·G③·G④ 입력; Router 공급 | +| 거래 컨텍스트 | to.controllerCluster | ONCHAINID[] (indirectly 확장) | 102(a) "directly or indirectly"(§3.8) | G④ 우회 매수 검사; A-04·A-06 공급 | +| Compliance 모듈 | RegMDistributionModule | IModule (canTransfer 훅) | 102(a)/101(a)(§3.8·§3.9) | moduleCheck에서 차단 판정; forcedTransfer·recovery 미사용 | +| 이벤트 | F04Check | {tokenId, offeringStatus, buyerRole, basis, exceptionApplied, result, 상수 버전 해시} | 보존·재구성 규율 | 감독 검사 시 "그 거래가 어느 조문·어느 상수로 판정됐나" 바이트 단위 재구성(§11) | + +## §4. 입력 사실 — 판정에 필요한 데이터 + +### 4.1 F-04가 판정하려면 어떤 증거가 필요한가 + +F-04의 입력은 세 층에서 온다. 첫째, 자산 카드 상수 — 이 자산이 발행 중인지(offeringStatus), 예외 증권인지(regMExceptionProfile), 대상 class는 무엇인지(legalClassId), 환매는 어느 경로로 가는지(redemptionChannelRef). 전부 상장 시점에 봉인되고 정정 버전으로만 바뀐다(B-01 규율). 둘째, 자산별 제한대상 레지스트리 — 이 자산의 발행자·매도증권보유자·distribution participant·affiliated purchaser가 누구인지(ONCHAINID → buyerRole). 운영자가 발행자 신고 + 승인으로 유지한다(OD-B1). 셋째, 거래 컨텍스트 — 이 거래가 매수인지 매도인지(direction), 어느 토큰인지(tokenId), 수신자가 누구인지(to), 그리고 우회 매수 검사를 위한 수신자의 지배 클러스터(controllerCluster, A-04·A-06 공급). + +핵심은 F-04가 "조작 의도"를 입력받지 않는다는 점이다 — Rule 102는 의도를 묻지 않으므로(§1.1·§3.8), 입력에 주관적 요소가 없다. 모두 객관 사실 — 시점·방향·주체 — 이라 결정론 판정이 가능하다. + +### 4.2 시점 축 입력 — restricted period 활성 여부 + +restricted period가 열려 있는지는 자산 카드의 offeringStatus로 판정한다(§3.4 G①). BUIDL은 상시 발행이라 offeringStatus = ONGOING_CONTINUOUS로 봉인되어 상시 true다. tranche형 자산이면 restrictedWindowEnd 타임스탬프를 두어 now와 비교한다. offeringStatus 선언이 없으면 판정 불능(fail-closed) — REG_M_OFFERING_STATUS_MISSING. "이 자산이 정말 distribution 중인가"의 실질 판단은 상장 심사·운영자 소관이며 F-04는 선언을 신뢰해 집행한다. + +### 4.3 인적 축 입력 — 제한대상 레지스트리 + +가장 판정이 무거운 축이다. F-04는 매수인 ONCHAINID가 restrictedPersonRegistry[token]에 등재돼 있는지, 어떤 role인지를 본다. 등재는 네 종류 — ISSUER(발행 vehicle), SELLING_SECURITY_HOLDER, DISTRIBUTION_PARTICIPANT, AFFILIATED_PURCHASER. affiliated purchaser의 (3) 안전항(정보차단벽 등, §3.7)을 충족한 계열은 미등재된다(regMInfoBarrierCertified = true). 그리고 "directly or indirectly"(§3.8) 대응으로, 매수인 본인이 미등재라도 그 지갑이 제한대상의 지배 클러스터(controllerCluster)에 속하면 우회 매수로 보아 제한대상으로 취급한다. 누가 이 레지스트리에 들어가는지(특히 affiliated purchaser·participant의 경계)의 확정은 계약·지배구조 검토가 필요해 변호사 확인 대상이다(§12 OD-F04-3). + +### 4.4 갈래별 필수 확인 항목 (전체 표) + +아래는 예시가 아니라 F-04 판정에 실제로 확인해야 하는 항목 전체다. 공통 행은 모든 매수 거래에 걸리고, 갈래별 항목은 매수인 role에 따라 추가된다. + +**공통 확인 항목 (모든 매수 거래)** + +| # | 확인 항목 | 출처 | 근거 | +| --- | --- | --- | --- | +| 공통-1 | offeringStatus 선언 존재·값 | Manifest.facts | §3.2·§3.4 (F04-V1·G1) | +| 공통-2 | 거래 방향(매수/매도) | txContext.direction (Router) | §3.8·§3.10(b)(5) (F04-G2) | +| 공통-3 | 대상 토큰 → legalClassId → covered security 소속 | txContext.tokenId + Manifest.facts | §3.3 (F04-G3) | +| 공통-4 | 매수인 ONCHAINID 확정 | A-04 | §3.5~§3.7 전제 | +| 공통-5 | regMExceptionProfile 선언·정합 | Manifest.facts | §3.11·§3.12 (F04-V2) | +| 공통-6 | 제한대상 레지스트리 무결성(미해소 red flag 부재) | B-01 | §3.7 (F04-V3) | + +**갈래별 필수 항목** + +| 갈래 (buyerRole) | ① 등재 확인 | ② 확장 확인 | ③ 예외 평가 | +| --- | --- | --- | --- | +| ISSUER (발행자) | restrictedPersonRegistry[token][BUYER] = ISSUER; 발행 vehicle 주소(Manifest.facts.issuerIdentity)와 일치 | controllerCluster로 우회 매수 여부 | 발행자 갈래는 de minimis 예외 없음 — off-venue 환매만 별도 경로(§3.10) | +| SELLING_SECURITY_HOLDER | = SELLING_SECURITY_HOLDER | controllerCluster 우회 | 발행자 갈래 — de minimis 없음 | +| DISTRIBUTION_PARTICIPANT | = DISTRIBUTION_PARTICIPANT; 배포 참여 계약 근거(off-chain) | controllerCluster 우회 | 참가자 갈래 — de minimis(<2% ADTV) + regMPoliciesCertified 시 G④ PASS(§3.12) | +| AFFILIATED_PURCHASER | = AFFILIATED_PURCHASER; (3) 안전항 미충족 확인(regMInfoBarrierCertified = false) | "in concert"·지배 관계 근거(off-chain) | 발행자/참가자 어느 쪽 affiliated purchaser인지에 따라 라우팅(§3.8 Except That) | + +### 4.5 입력의 신선도 + +offeringStatus·regMExceptionProfile·legalClassId는 자산 상수라 정정 버전으로만 변한다(B-01). 제한대상 레지스트리는 발행자 신고·지위 변동에 따라 운영자가 갱신한다 — 발행 종료(offeringStatus → COMPLETED), 신규 participant 편입, affiliated purchaser 지위 발생·소멸. regMInfoBarrierCertified는 (3) 안전항의 연간 독립평가에 결속되므로 A-11과 유사한 신선도 규율이 필요하다 — 평가 만료 계열은 안전항을 잃어 다시 제한대상으로 등재해야 한다(OD-F04-3와 연동). + +--- + +## §5. 판정 로직 — 런타임 결정 흐름 + +### 5.1 개요 + +F-04는 매 매수 거래마다 세 좌표의 곱을 평가해 차단 여부를 결정하는 사전·결정론 게이트다. 판정 순서는 "싸고 탈락 잘 되는 검사 먼저" 원칙을 따른다 — 시점(활성 여부, 자산 상수 1회 읽기) → 방향(매수 여부) → 주체(레지스트리 조회) → 예외 → 라우팅. 아래 그림이 런타임 흐름이다. + +![F-04 런타임 판정 흐름](F-04_fig50.png) + +### 5.2 판정 분기 (표 A와 1:1) + +| 단계 | 검사 | 통과 시 | 실패/분기 시 | +| --- | --- | --- | --- | +| G① | offeringStatus ≠ COMPLETED (restricted period 활성)? | 다음 | 아니오 → PASS: REG_M_NOT_IN_DISTRIBUTION | +| — | (선행) offeringStatus 선언 존재? | 위 판정 진행 | 부재 → FAIL: REG_M_OFFERING_STATUS_MISSING | +| G② | 거래가 매수/bid 방향? | 다음 | 매도 → PASS: REG_M_DIRECTION_SELL | +| G③(대상) | tokenId → legalClassId ∈ 활성 covered security? | 다음 | 미소속 → F-04 비대상(다른 부품 판정) | +| G④(주체) | to ∈ restrictedPersonRegistry (직접 또는 controllerCluster 경유)? | 다음 | 아니오 → PASS: REG_M_NON_RESTRICTED_BUYER | +| — | (선행) 레지스트리 무결(red flag 부재)? | 위 판정 진행 | 미해소 → REVIEW: REG_M_RESTRICTED_SET_UNVERIFIED | +| G⑤(예외) | 예외 성립? (참가자 de minimis <2% ADTV + 정책 인증 / off-venue 후보) | PASS: REG_M_EXCEPTION_APPLIED(+기록) | 불성립 → 다음 | +| G⑥(라우팅) | buyerRole ∈ {ISSUER,SSH}? | basis = RULE_102 | 아니오 → basis = RULE_101 | +| 종국 | G①∧G②∧G③(대상)∧G④∧¬G⑤ | — | FAIL: RESTRICTED_PERIOD_PURCHASE_BLOCKED (basis 기록) | + +### 5.3 방향 규칙 — 왜 매수만 차단하는가 + +Reg M Rule 102(a)/101(a)는 "bid for, purchase, or attempt to induce ... to bid for or purchase"만 금지한다(§3.8). 매도는 금지 대상이 아니며, §242.102(b)(5)가 "배포 중인 증권의 매도 청약·매수 청약 권유"를 명시적으로 예외로 둔다(§3.10). 그래서 F-04는 매수 방향만 게이트한다(G②). 제한대상자가 자기 토큰을 파는 것은 F-04의 사정권 밖이다(다만 다른 규율 — 예: A-06 계열 매도 물량제한 C-08 — 이 별도로 걸릴 수 있다). 이 방향 비대칭은 Reg M의 목적(발행 중 가격을 떠받치는 매수 조작 방지)에서 직접 나온다 — 매도는 가격을 떠받치지 않는다. + +### 5.4 "indirectly"·"attempt to induce"의 온체인 대응과 환매 경로 분리 + +두 가지 정밀 지점이 있다. 첫째, "directly or indirectly"(§3.8) — 발행자가 제3자 지갑을 내세워 사들이는 우회다. F-04는 매수인 ONCHAINID 본인 등재뿐 아니라, 그 지갑이 제한대상의 지배 클러스터(controllerCluster, A-04의 실소유 클러스터·A-06의 지배 관계 공급)에 속하는지까지 검사해 우회를 잡는다. "attempt to induce"(타인의 매수를 유인)는 순수 온체인 사전 판정이 어려운 행위 요소라 — 유인은 체결 이전의 커뮤니케이션이므로 — F-04의 사전 게이트로는 직접 매수·bid만 확정 차단하고, 유인 정황은 F-02(감시)의 사후 flag로 보완한다(§9.1). 둘째, 환매 경로 분리 — BUIDL의 USD/USDC 환매는 DEX canTransfer(매수) 경로가 아니라 별도 redemptionChannel(운영자 통제 agent-role burn/mint, 거래소·ECN 밖)로 라우팅된다. F-04의 RegMDistributionModule은 canTransfer 훅에만 걸리므로 환매 경로에는 구조적으로 관여하지 않는다 — 환매를 "PASS"시키는 것이 아니라 게이트 밖으로 흐르게 하는 것이다. 이 분리가 §3.10 (2)(ii)·(3)의 "거래소·ECN 밖" 단서를 만족시키는 물리적 장치다. + +### 5.5 fail-closed와 역방향 완화 금지 + +두 원칙이 §5 전체를 관통한다. 첫째 fail-closed — offeringStatus 선언이 없거나 레지스트리 무결성이 깨지면 통과가 아니라 정지(REG_M_OFFERING_STATUS_MISSING / REG_M_RESTRICTED_SET_UNVERIFIED)다. "선언이 없으니 발행 중이 아니겠지"라는 낙관은 성립하지 않는다. 둘째 역방향 완화 금지 — "면제가 있을 것 같으니", "고정 NAV라 조작 위험이 없으니" 같은 논거로 G④ 예외를 임의 확장하지 않는다. 예외는 조문이 명시한 좁은 통로(참가자 de minimis, off-venue 환매, 확인된 SEC 면제)만이며, 그 확장은 거버넌스 경로 + 법적 근거 등록을 요한다(F04-GOV). + +--- + +## §6. 거절·예외 처리 + +### 6.1 거절 코드와 처리 + +| 코드 | 트리거 | 처리 | +| --- | --- | --- | +| RESTRICTED_PERIOD_PURCHASE_BLOCKED | restricted period 중 제한대상자의 covered security 매수(예외 없음) | 체결 전 revert; F04Check 이벤트에 basis(RULE_102/101)·좌표값 기록 | +| REG_M_OFFERING_STATUS_MISSING | 자산 카드 offeringStatus 선언 부재 | fail-closed 정지; 상장 심사 정정 큐로 | +| REG_M_RESTRICTED_SET_UNVERIFIED | 제한대상 레지스트리 미해소 red flag 위 판정 시도 | REVIEW 큐 적재; 해소까지 하류 판정 의존 금지 | +| REVIEW_REGM_EXCEPTION_CONFLICT | regMExceptionProfile 오선언(사모펀드인데 OPEN_END_UIT 등) | REVIEW; 강화 방향 아닌 위생 항목 | + +### 6.2 PASS 경로(예외·비대상)의 의미와 기록 + +F-04의 PASS는 네 가지 경로로 나온다 — (i) 발행 미진행(REG_M_NOT_IN_DISTRIBUTION), (ii) 매도 방향(REG_M_DIRECTION_SELL), (iii) 제한대상 아님(REG_M_NON_RESTRICTED_BUYER), (iv) 예외 성립(REG_M_EXCEPTION_APPLIED). 이 중 (iv)만 명시적 근거 기록을 남긴다 — 어느 예외 조문(참가자 de minimis, off-venue 환매, SEC 면제)에 근거했는지, 근거 값(누적매수/ADTV, 면제 해시)이 무엇인지를 F04Check 이벤트에 적재해 감독 검사 시 재구성 가능하게 한다. (i)~(iii)은 판정 좌표만 기록한다. 그리고 §3.1의 한계를 다시 새긴다 — 어떤 PASS도 §9·§10(b) anti-fraud 면책이 아니다. + +### 6.3 환매·정당 매수의 처리(게이트 밖 경로) + +발행자·계열의 정당한 운영상 토큰 취득(환매, 특정 재조정)은 F-04를 "예외로 통과"하는 것이 아니라 게이트 밖 경로로 처리된다. 환매는 별도 redemptionChannel(§5.4). 만약 온-DEX에서 발행자·계열의 매수가 필요한 진짜 사용례가 생기면, 그것은 SEC 면제(§242.102(e)) 확인 후 regMExemptionRef를 근거로 G④ 예외에 편입해야 하며, 확인 전에는 전량 차단이 보수 기본값이다(§3.15·OD-F04-4). + +### 6.4 매수인 노출 문구 관리 + +제한대상자의 매수가 차단될 때 프런트에 노출되는 문구는 단일하게 유지한다 — "발행 진행 중 본 계정의 매수는 제한됩니다(Regulation M)". 어느 조문(102/101)·어느 좌표로 걸렸는지의 세부를 프런트에 노출하는 것은 우회 지도를 제공하는 셈이므로 금지 항목으로 명문화한다(B-03 §6.4와 같은 규율). 세부는 F04Check 이벤트·운영 대시보드에만 남는다. + +--- +## §7. 테스트 케이스 + +각 케이스는 §5.2 분기와 대응한다. 회귀 케이스(★)는 과거 오류·경계 혼동을 고정한다. + +| # | 시나리오 | 입력 | 기대 결과 | +| --- | --- | --- | --- | +| T1 | 발행자 온-DEX 매수 | offeringStatus=ONGOING; 매수; to=ISSUER | FAIL: RESTRICTED_PERIOD_PURCHASE_BLOCKED (basis=RULE_102) | +| T2 | affiliated purchaser 매수 | ONGOING; 매수; to=AFFILIATED_PURCHASER(안전항 미충족) | FAIL (basis: 발행자/참가자 라우팅에 따름) | +| T3 | 일반 자격 매수인 매수 | ONGOING; 매수; to=미등재, 클러스터도 무관 | PASS: REG_M_NON_RESTRICTED_BUYER | +| T4 ★ | 제한대상자 매도 | ONGOING; 매도; from=ISSUER | PASS: REG_M_DIRECTION_SELL (방향 비대칭 고정) | +| T5 ★ | 발행 종료 후 발행자 매수 | offeringStatus=COMPLETED; 매수; to=ISSUER | PASS: REG_M_NOT_IN_DISTRIBUTION (시점 창 닫힘) | +| T6 ★ | 환매(별도 창구) | redemptionChannel 경유 burn; 발행자 | F-04 미관여(canTransfer 매수 경로 밖) — 게이트 통과 아님, 구조적 우회 | +| T7 ★ | 발행자 우회 매수(제3자 지갑) | ONGOING; 매수; to=미등재이나 controllerCluster ∋ ISSUER | FAIL: RESTRICTED_PERIOD_PURCHASE_BLOCKED (indirectly 잡힘) | +| T8 ★ | 참가자 de minimis 매수 | ONGOING; 매수; to=PARTICIPANT; 누적 <2% ADTV; regMPoliciesCertified | PASS: REG_M_EXCEPTION_APPLIED (basis=RULE_101, 기록) | +| T9 ★ | 발행자 소액 매수(de minimis 시도) | ONGOING; 매수; to=ISSUER; 누적 <2% ADTV | FAIL — 발행자 갈래는 de minimis 예외 없음(§3.12 비대칭 고정) | +| T10 | offeringStatus 선언 부재 | 선언 없음; 매수; to=ISSUER | FAIL: REG_M_OFFERING_STATUS_MISSING (fail-closed) | +| T11 ★ | 개방형 오선언 | regMExceptionProfile=OPEN_END_UIT(실은 §3(c)(7) 사모) | REVIEW_REGM_EXCEPTION_CONFLICT (§3.11 미해당 고정) | +| T12 ★ | 안전항 충족 계열 매수 | ONGOING; 매수; to=계열이나 regMInfoBarrierCertified=true → 미등재 | PASS: REG_M_NON_RESTRICTED_BUYER ((3) 안전항 (§3.7) 고정) | +| T13 | 미해소 red flag 위 판정 | 레지스트리 병합 미완 | REVIEW: REG_M_RESTRICTED_SET_UNVERIFIED | +| T14 ★ | reference security 없는 자산의 유사 토큰 매수 | referenceSecurities=∅; 다른 class 토큰 매수; to=ISSUER | F-04 비대상(대상 covered security 아님) — 오탐 방지 고정 | + +회귀 고정 포인트 요약: 방향 비대칭(T4), 시점 창 폐쇄(T5), 환매 구조 분리(T6), 우회 매수(T7), de minimis 갈래 비대칭(T8·T9), 예외증권 오선언(T11), 안전항 제외(T12), 대상 오탐(T14). + +--- + +## §8. 패턴 섹션 — 게이트형(Pattern A)의 구조 + +### 8.1 왜 증명서형이 아니라 게이트형인가 + +A-13 v1이 증명서형(Pattern B — signed claim에 대한 reasonable belief)인 반면, F-04는 게이트형(Pattern A — strict-liability 사전 차단)이다. 이 차이는 규범의 성격에서 온다. QP·적격투자자 자격은 "이 사람이 기준을 충족하는가"라는 판단을 요하고, 그 판단은 검증기관이 오프체인에서 수행해 서명 claim으로 남긴다 — 코드는 claim의 존재·발급자·유효기간만 본다. Reg M Rule 102(a)에는 그런 판단이 없다 — 시점·방향·주체라는 객관 사실이 위법을 확정하고, 조작 의도의 판단(=오프체인 재량)이 제거돼 있다(§1.1·§3.0.1). 따라서 F-04는 A-01(제재 명단) 계열의 strict 게이트다. 판정에 오프체인 자격 판단이 없으므로 claim(증명서)에 근거하지 않고, 그래서 claim.basis도 없다 — 그 자리를 buyerRole enum(제한대상 레지스트리의 역할)이 대신한다(§3.17 표 B). + +### 8.2 A-01(제재)과의 유사·차이 + +F-04와 A-01은 둘 다 사전·결정론·fail-closed·strict 게이트다. 차이는 판정의 축이다. A-01은 명단 소속(SDN list match)이라는 단일 축이지만, F-04는 시점(restricted period) × 방향(매수) × 주체(제한대상)라는 세 축의 곱이다. 또 A-01은 모든 거래에 걸리는 글로벌 게이트(globalGates)이지만, F-04는 R1(발행) Recipe에만 부착되고 자산의 발행 상태에 종속된다 — offeringStatus = COMPLETED이면 F-04는 조용히 꺼진다. 이 점에서 F-04는 A-01보다 조건적이다. + +### 8.3 게이트형의 코드 골격 + +``` +# F-04 게이트형 판정(의사코드) +def reg_m_gate(tx, card, registry): + if card.offeringStatus is None: return FAIL("REG_M_OFFERING_STATUS_MISSING") # fail-closed + if card.offeringStatus == COMPLETED: return PASS("REG_M_NOT_IN_DISTRIBUTION") # G① + if tx.direction != BUY: return PASS("REG_M_DIRECTION_SELL") # G② + if legalClass(tx.tokenId, card) not in card.coveredSet: return NOT_APPLICABLE # G③(대상) + if registry.has_unresolved_flag(): return REVIEW("REG_M_RESTRICTED_SET_UNVERIFIED") + role = restricted_role(tx.to, registry) or restricted_role_via_cluster(tx.to, registry) # 직접+indirectly + if role is None: return PASS("REG_M_NON_RESTRICTED_BUYER") # G④ + if exception_applies(role, tx, card): return PASS("REG_M_EXCEPTION_APPLIED") # G⑤(좁은 통로만) + basis = RULE_102 if role in {ISSUER, SSH} else RULE_101 # G⑥ 라우팅 + return FAIL("RESTRICTED_PERIOD_PURCHASE_BLOCKED", basis=basis) # 종국 +``` + +의도·목적 판단이 코드에 없다는 점이 핵심이다 — 그것이 게이트형을 가능케 하고, 동시에 사후 조작 판단(F-02)을 별도 부품으로 분리해야 하는 이유가 된다. + +### 8.4 왜 STATELESS인가 + +F-04의 레지스트리·상수는 분명 변하는 데이터인데 STATELESS다. 기준은 "데이터가 변하는가"가 아니라 거래가 그 데이터를 변경하는가다. F-04의 레지스트리(제한대상)·카드 상수(offeringStatus 등)는 등록·정정·발행종료라는 거래 외 경로로만 변하고, 매수 게이트는 읽기만 한다 — 쓰기 없음, 순서 의존 없음. de minimis 예외의 누적매수 카운터가 유일하게 상태처럼 보이지만, 이는 예외 경로 판정 한정 보조값이고 게이트 본체의 통과/차단은 상태를 쓰지 않는다. 시스템 전체로 보면 레지스트리는 물론 상태이며 그 변경 규율이 §11(Operator)의 주제다. + +--- + +## §9. Coordination — 다른 부품과의 관계 + +### 9.1 ★ 핵심 경계: Reg M "affiliated purchaser" ≠ Rule 144 "affiliate" (A-06) + +F-04에서 가장 오류 위험이 큰 지점이다. 두 개념은 이름이 비슷하지만 정의가 다르다. + +- Rule 144·§405의 affiliate(A-06 판정 대상)은 발행인을 직접·간접으로 지배·피지배·공동지배하는 자(control) 중심이다 — 임원·이사·지배주주 등. 목적은 발행인 지배력에 기반한 정보·처분 우위 규율이다. +- Reg M의 affiliated purchaser(§3.7)는 (1) covered security 취득·배포에서 발행자 등과 공동행위(in concert)하는 자, (2) 매수를 지배·피지배·공동지배하는 affiliate, (3) 정기적으로 증권을 매수하거나 재량운용하는 affiliate(안전항 예외 있음)다. 목적은 발행 중 매수 조작의 인적 범위 획정이다. + +두 집합은 겹칠 수 있으나 동일하지 않다 — 예컨대 발행인을 지배하지 않지만 발행자와 공동으로 매수하는 자는 Reg M affiliated purchaser이되 Rule 144 affiliate가 아닐 수 있고, 반대로 발행인 임원이라도 매수를 지배·재량운용하지 않고 안전항을 충족하면 Reg M affiliated purchaser에서 빠질 수 있다. 따라서 F-04는 A-06의 산출(Rule 144 affiliate 여부)을 그대로 제한대상 레지스트리에 복사해서는 안 된다 — 별도의 Reg M affiliated purchaser 판정(운영자 판단 + 안전항 확인)으로 레지스트리를 구성해야 한다. 이 경계 혼동이 F-04의 대표적 오류이며, 회귀 T12(안전항 제외)와 §12 OD-F04-3이 이를 고정·위임한다. + +### 9.2 관계 표 + +| 부품 | 관계 | 구체적 연결 | +| --- | --- | --- | +| A-04 (신원) | 판정 단위 공급 | 매수인 ONCHAINID; controllerCluster(실소유 클러스터)로 "indirectly" 우회 검사(§5.4) | +| A-06 (affiliate) | 경계 주의 — 정의 상이 | Rule 144 affiliate ≠ Reg M affiliated purchaser(§9.1); A-06 산출을 직접 복사 금지 | +| A-11 (신선도) | 유사 규율 차용 | regMInfoBarrierCertified(안전항 (3) 연간평가)의 만료·재확인을 A-11 주기 설계와 공유 | +| B-01 (Manifest) | 무결성·변경 통제 | offeringStatus·regMExceptionProfile·restrictedPersonRegistry·ADTV 상수의 무결·정정 사슬 | +| B-03 (제한 표시) | 병렬 게이트 | 둘 다 fail-closed 자산 메타 게이트 — B-03은 restricted 표시, F-04는 발행 중 매수 | +| B-04 (엔진/venue) | 환매 경로 분리 접점 | redemptionChannel이 DEX 엔진 경로 밖임을 B-04 라우팅과 정합(§5.4·§3.10) | +| C-08 (물량제한) | 매도 측 상보 | F-04는 제한대상 매수 차단(방향 비대칭), C-08은 계열 매도 물량 — 방향이 반대 | +| D-01 (보유자 수) | 상수 공유 | legalClassId(class 식별자) 공유; 직접 판정 연동은 없음 | +| E-01 (Form D) | R1 동거 | 둘 다 R1-only; Form D 신고 상태는 발행 진행(offeringStatus)의 정황 | +| F-01 (자기거래) | 인접 행위규율 | 발행자·계열의 자기거래 제한 — F-04(발행 중 매수)와 인적 범위 일부 공유 | +| F-02 (시장 감시) | ★ 상보 (사전/사후) | F-04 = Reg M 사전 차단(§9(a)(2) 매수 조작 예방); F-02 = 사후 flag(§9(a)(1) 위장매매·"attempt to induce" 정황) | + +### 9.3 책임 경계 (한 줄씩) + +F-04는 "이 매수가 발행 중 제한대상자의 covered security 매수인가"까지만 한다. 그 사람이 실제로 조작 의도가 있었는지는 §9(a)(2)·F-02, 발행인을 지배하는 Rule 144 affiliate인지는 A-06, 증권이 restricted인지는 B-02·B-03, 얼마나 파는지는 C-08, 몇 명째인지는 D-01, 신원 자체의 무결성은 A-04, 발행 프레임 성립은 E-01·E-03이 본다. F-04는 Reg M이 그은 밝은 선 하나를 체결 전 관문으로 옮긴 부품이다. + +--- +## §10. Element / Recipe / Manifest / Operator 매핑 + +### 10.1 Element + +본 문서의 §3~§8이 F-04 Element 명세다. 검증 단위는 {시점(restricted period 활성), 방향(매수), 대상(covered security), 주체(제한대상 집합 소속), 예외(좁은 통로), 라우팅(조문 근거)} 6원자다(§3.17 표 A). 검증 패턴은 게이트형(Pattern A) — strict-liability 사전 차단, off-chain 자격 판단 없음. + +### 10.2 Recipe + +F-04는 R1(Reg D 506(c) Issuance) Recipe에만 부착된다(●, R1-exclusive). 부착 매트릭스: R1 ●, R2·R3·R4 —. Router의 cumulative AND 체인에서 F-04는 발행 프레임 유지 확인의 일부로 매수 거래에 걸린다. 판정 체인상 위치는 신원(A-04)·자격(A-03·A-11) 확인 이후의 행위·시점 판정 단계다. R1의 다른 조각(A-01·A-02·A-03·A-04·A-11·E-01·E-03·B-01·B-02·B-03, 그리고 entity 매수인 시 A-08·A-09)과 함께 전부 통과해야 발행 거래가 성립한다. + +### 10.3 Manifest + +토큰별 Manifest가 F-04 관련으로 고정하는 값(§3.17 표 B): facts.offeringStatus, facts.regMExceptionProfile, facts.legalClassId, facts.referenceSecurities, facts.redemptionChannelRef, facts.stabilizingEnabled. 자산별 restrictedPersonRegistry[token](ONCHAINID → buyerRole)와 regMInfoBarrierCertified. 거버넌스 평면 상수 ADTV[token]·regMExemptionRef. 이 값들의 무결성·변경 통제는 B-01 소관이며, 완화 방향 변경(게이트 해제·집합 축소·면제 편입)은 다중서명 + time-lock + 법적 근거 등록을 요한다(F04-GOV). + +### 10.4 Operator + +§11의 운영 절차가 F-04의 Operator 층이다 — 제한대상 명단 유지, 발행종료 판정, 환매 창구 운영, 안전항 재확인, 대사·감사. 모든 상태 변경은 서명·사유·타임스탬프 기록을 남긴다. + +**차단 사고 시 책임 분배(설계 관점).** ① 레지스트리를 지켰는데 발행자 우회 매수가 뚫린 경우(정교한 지갑 우회) — controllerCluster 검사(A-04·A-06 공급)의 커버리지가 방어의 중심이고, 시스템은 탐지 시점의 F-02 flag·정정 기록으로 손해 확산을 차단한 기록을 남긴다. ② 레지스트리 미갱신으로 뚫린 경우(발행종료 반영 지연, 신규 participant 누락) — 운영자의 갱신 SLA·신고 반영 절차 준수 기록이 쟁점이 된다. + +--- + +## §11. Operator Layer — 운영 절차 + +### 11.1 제한대상 명단 유지 (OD-B1) + +restrictedPersonRegistry는 발행자 신고 + 운영자 승인으로 유지된다. 발행 vehicle(ISSUER), 매도증권보유자, 배포 참여자(DISTRIBUTION_PARTICIPANT), affiliated purchaser를 등재·해제한다. affiliated purchaser 판정은 Rule 144 affiliate와 별개의 Reg M 기준(공동행위·매수지배·재량운용, 안전항)으로 수행하며(§9.1), 안전항 (3) 충족 계열은 미등재하되 그 근거(정보차단벽 정책·연간 독립평가)를 보관한다. 명단 변경은 서명·사유·타임스탬프를 남기고, 완화 방향(제한대상 해제)은 강화 방향보다 엄격한 승인을 받는다. + +### 11.2 발행 상태·종료 판정 + +offeringStatus의 ONGOING → COMPLETED 전환은 발행 종료라는 법적 사건의 반영이다 — 상시 발행 자산(BUIDL)은 원칙적으로 COMPLETED에 이르지 않으므로 F-04가 상시 작동한다(§1.3). tranche형 자산이면 각 창의 종료(restrictedWindowEnd) 판정이 필요하며, 이 전환의 기준·증빙은 변호사 확인 대상이다(§12 OD-F04-6). 전환 오판(발행 중인데 COMPLETED 처리)은 발행자 매수를 여는 중대 오류이므로 보수적으로 처리한다. + +### 11.3 환매 창구 운영 (Reg M 방어선) + +USD/USDC 환매는 DEX가 아니라 별도 redemptionChannel(운영자 통제 agent-role burn/mint)로 처리한다(§5.4). 이 창구가 거래소·ECN 밖(§3.10 (2)(ii)·(3) 단서)임을 구조적으로 보장하는 것이 핵심이다 — 환매가 DEX 매수 경로로 유입되면 Rule 102 위반 위험이 생긴다. 환매 처리 기록(누가·언제·얼마)을 별도로 보존한다. + +### 11.4 안전항 신선도 재확인 + +regMInfoBarrierCertified(안전항 (3), §3.7)는 연간 독립평가에 결속된다. 평가 만료 계열은 안전항을 잃어 다시 AFFILIATED_PURCHASER로 등재해야 한다 — A-11 신선도 규율과 같은 주기 관리(OD-F04-3 연동). + +### 11.5 대시보드·보존·export + +자산별 offeringStatus 스냅샷·제한대상 명단 변경 이력·REVIEW 큐 잔량·예외(REG_M_EXCEPTION_APPLIED) 적용 이력·환매 창구 처리량을 대시보드로 노출한다. F04Check 이벤트(좌표값·basis·상수 버전 해시)·명단 변경 이력·환매 기록을 B-01의 보존 체계(≥ 3년, 버전 사슬 = 존속기간)에 실어 export — 감독 검사 시 "그 거래 시점에 이 매수가 왜 차단/통과됐나"를 바이트 단위로 재구성 가능해야 한다. + +--- + +## §12. Open Issues — 변호사 follow-up 대상 + +| # | 질문(무엇을 결정해야 하나) | 왜 필요한가 | Priority | 해소 경로(권고) | +| --- | --- | --- | --- | --- | +| OD-F04-1 | **상시 토큰 발행이 Rule 100 "distribution"에 해당하는가** — 규모 + 특별한 판매 노력·방법 요건 충족 여부, 506(c) 일반청약이 "special selling efforts"인지 | F-04 활성의 전제(§3.2) — distribution이 아니면 Reg M 자체가 비적용 | ⚠ 즉시 | 변호사 위임 — 사실관계 심사(규모·판매방법) + 학습노트 유통규제 10 반영 | +| OD-F04-2 | **permissioned DEX가 "securities exchange·inter-dealer quotation system·ECN"에 해당하는가** | §3.10 (2)(ii)·(3)·(6) 예외의 "거래소·ECN 밖" 단서 적용 여부를 가름 — 환매·비권유 예외 가용성 결정 | ⚠ 즉시 | BD/ATS 성격규명(법률의견서 Q1)과 동기 + SEC Crypto Task Force 연동 | +| OD-F04-3 | **제한대상 레지스트리 구성 기준** — 누가 affiliated purchaser·distribution participant인가, "in concert"·안전항 (3) 판정 주체·방법 | G④의 소속 검사 기준(§3.5~§3.7·§9.1) — Rule 144 affiliate와 별개 판정이 필요 | 높음 | 변호사 위임(계약·지배구조 검토) + 운영자 명단 절차서 | +| OD-F04-4 | **고정 NAV·무-시세받치기 논거의 지위** — SEC 면제(§242.102(e))·no-action이 필요한가, 환매 창구 분리만으로 충분한가 | §3.15의 발행자 갈래 온-DEX 매수 필요 시 근거 — 논거 자체는 밝은 선을 무효화하지 못함 | 높음 | 변호사 위임 + 필요 시 SEC 면제 신청; 확인 전 보수 전량 차단 유지 | +| OD-F04-5 | **환매의 예외 구조 확정** — 보유자 선택 환매가 (6) "unsolicited" 예외를 못 쓴다는 SEC 스탭 입장을 전제로, (2)(ii)/(3) off-venue NAV 환매 구조가 정합한가 | §3.10 — 환매를 어느 예외 조문에 얹을지 결정, 창구 분리 설계의 법적 근거 확정 | 높음 | 변호사 위임 + Securitize·Circle 협의(환매 인프라) | +| OD-F04-6 | **상시 발행에서 restricted period의 종료·경계** — 각 tranche가 자기 5영업일 창을 갖는가, 전체가 하나의 열린 창인가, "completion of participation"이 오는가 | §3.4·§11.2 — offeringStatus 전환 기준·게이트 상시성의 법적 정밀화 | 중간 | 변호사 위임 + Operator 전환 절차서(보수 기본값: 상시 활성) | +| OD-F04-7 | **regMExceptionProfile enum 확정** — NONE 외에 어느 예외증권 유형을 시스템 유효 집합에 둘 것인가 | V2·G⑤ 소속 검사 기준(§3.11·§3.12) — BUIDL은 NONE이나 타 자산 확장 대비 | 중간 | 설계 결정 + 변호사 확인(각 유형 요건) | +| OD-B1 (기존) | **매수 금지 명단은 누가 갱신하나** — 발행자 신고 + 운영자 승인 권고 | 레지스트리 거버넌스(§11.1) — 등재·해제 권한·절차 | 사용자 결정 | Operator 운영 기준(Decipher 자체) + 발행자 신고 인터페이스 | + +--- + +## §13. 파일명 규칙 (Naming Convention) + +Decipher Element / Recipe 산출물 명명 규칙: + +- **Element:** F-XX_부품이름.md (예: F-04_no-purchase-during-distribution.md) +- **Recipe:** R-XX_Recipe이름.md (예: R1_issuance.md) + +Element 부품 ID 체계(앞글자 = 카테고리): + +| 앞글자 | 카테고리 | +| --- | --- | +| A | 신원·자격 (매수인 측) | +| B | 자산·기술 메타 | +| C | 거래 경로·시점 | +| D | 집계·누적 | +| E | 발행자 측 | +| F | 행위·운영 ← 본 부품(F-04)이 여기 | + +본 부품: **F-04 = "행위·운영 카테고리의 4번 부품"** — 발행 국면 매수 조작의 사전 차단. 같은 카테고리의 F-01(자기거래)·F-02(시장 감시)·F-03(사기 감시)와 나란히 서되, F-01~F-03이 R4(시장행위 감시)인 반면 F-04는 R1(발행)에 부착되는 유일한 F 계열 부품이다. + +파일명 규칙 (Naming Convention): + +- Element: F-04_no-purchase-during-distribution.md · 위치 산출물/elements/ +- 빌드 산출: 동명 .docx(pandoc + CJK 패치). 도표 2종 임베드 — F-04_fig30.png(§3.0 법조문 관계 흐름) · F-04_fig50.png(§5.0 판정 로직 흐름). + +--- + +**변경 이력** + +- [2026-07-21 v1.0] F-04 최초 작성 — A-13 v1 형식. 부품 정의를 "발행 중 매수 금지"에서 "restricted period × 매수 방향 × 제한대상 주체의 곱으로 판정하는 Reg M 사전 게이트 + 환매 창구 구조 분리"로 정밀화. 핵심 확정: (1) Rule 102(a)의 무-고의성 → 게이트형(Pattern A) 정당화(§1.1·§8), (2) "distribution" 정의가 미등록 오퍼링 포섭 + §9(a)(2) Dodd-Frank 개정으로 미등록 증권 포섭 → 506(c) 사모 토큰에 F-04 적용(§3.2·§3.13), (3) 상시 발행 → restricted period 상시 활성 → 게이트 상시화(§1.3·§3.4), (4) (d)(4) open-end/UIT 예외가 §3(c)(7) 사모펀드에 미적용 → 자동 면제 없음 → F-04 필요(§3.11), (5) 환매 창구 분리 = (2)(ii)·(3)의 "거래소·ECN 밖" 단서 충족 장치(§3.10·§5.4), (6) Reg M affiliated purchaser ≠ Rule 144 affiliate 경계 확립 → A-06 산출 직접 복사 금지(§9.1), (7) de minimis 예외의 발행자/참가자 갈래 비대칭(§3.12). 전 조문 1차 출처 verbatim 검증(ecfr.gov 2026-07-13·07-15 현행 §242.100~.102·.101 / uscode.house.gov 2026-04-29 효력 §78j / govinfo.gov post-Dodd-Frank §78i / sec.gov·federalregister.gov Rel. 34-38067). 거절·PASS 코드 확정, 테스트 T1~T14(회귀: T4 방향 비대칭·T5 시점 폐쇄·T6 환매 분리·T7 우회·T8/T9 de minimis 비대칭·T11 예외증권 오선언·T12 안전항·T14 대상 오탐). OD-F04-1~7 + OD-B1 등록. 그림 2매(fig30 법조문 흐름·fig50 런타임) Graphviz 렌더. + +문서 끝. \ No newline at end of file diff --git a/services/cli/src/reason.ts b/services/cli/src/reason.ts index acd2cbc..aff87e8 100644 --- a/services/cli/src/reason.ts +++ b/services/cli/src/reason.ts @@ -1,12 +1,17 @@ import {AbiCoder, encodeBytes32String, keccak256} from "ethers"; -// Element id (bytes32 string) -> human label. All 17 elements DeployStack -// registers; see script/DeployStack.s.sol:_deployAndRegisterElements. The -// first 11 are the original illustrative elements — six of which (A-01, -// A-03, A-04, A-13, B-01, B-02) were upgraded in place to the -// walkthrough-doc failure-code taxonomy (wave-2b, see ELEMENT_CODE_NAMES -// below); the last 6 (A-08, A-09, A-11, B-03, B-04, D-01) are the wave-2 -// illustrative elements (CMP-003) — registered but not yet wired into any +// Element id (bytes32 string) -> human label — 23 labeled elements. The first +// 11 (A-01, A-02, A-03, A-04, A-05, B-01, B-02, C-01, E-01, A-13, F-02) are the +// original illustrative elements — six of which (A-01, A-03, A-04, A-13, B-01, +// B-02) were upgraded in place to the walkthrough-doc failure-code taxonomy +// (wave-2b, see ELEMENT_CODE_NAMES below); the next 6 (A-08, A-09, A-11, B-03, +// B-04, D-01) are the wave-2 illustrative elements (CMP-003); the last 6 (A-06, +// A-12, E-03, F-01, F-03, F-04) are the wave-3 illustrative elements (CMP-004). +// These are NOT all DeployStack-registered: script/DeployStack.s.sol's +// _deployAndRegisterElements registers only 12 — the 11 originals labeled here +// PLUS BUIDL-MIN-v1 (which is itself NOT labeled here). The wave-2 (CMP-003) +// and wave-3 (CMP-004) sets are registered opt-in via tools/deploy-wave2 and +// tools/deploy-wave3 respectively — not by DeployStack, and not wired into any // recipe's `requiredElements`. export const ELEMENT_LABELS: Record = { "A-01-v1": "Sanctions", @@ -25,7 +30,13 @@ export const ELEMENT_LABELS: Record = { "A-11-v1": "Claim Freshness", "B-03-v1": "Transfer Restriction Metadata", "B-04-v1": "Engine Selection", - "D-01-v1": "Holder Count" + "D-01-v1": "Holder Count", + "A-06-v1": "Affiliate", + "A-12-v1": "Red Flag Knowledge Bar", + "E-03-v1": "Bad Actor Disqualification", + "F-01-v1": "Operator Self-Dealing", + "F-03-v1": "Fraud Surveillance", + "F-04-v1": "Reg M Issuer Buying" }; // Recipe id -> human label. Recipes registered by DeployStack. @@ -170,6 +181,68 @@ export const ELEMENT_CODE_NAMES: Record> = { 2: "HOLDER_CAP_12G_NONAI", 3: "HOLDER_CAP_3C1_100", 4: "HOLDER_CAP_506B_35" + }, + // A-06-v1 Affiliate (wave-3, CMP-004). + "A-06-v1": { + 1: "FAIL_AFFILIATE_STATUS_UNKNOWN", + 2: "FAIL_UNTRUSTED_AFFILIATE_CLAIM_ISSUER", + 3: "FAIL_AFFILIATE_CLAIM_EXPIRED", + 4: "REVIEW_AFFILIATE_UNCERTAIN" + }, + // A-12-v1 RedFlagKnowledgeBar (wave-3). MONITORING element: `check()` never + // rejects (always returns passed=true, bytes32(0)) — every code below is a + // MARK, surfaced out-of-band via the SurveillanceFlag events / screen() + // operator+audit surfaces, never leaked in a party-facing reason code. Codes + // 1-7 are the seven RedFlag categories (bit i == RedFlag(i) == code i+1); 8 + // is the REVIEW_REDFLAG_UNCERTAIN disposition marker. Same treatment as F-02 + // SurveillanceFlag / F-03 below. + "A-12-v1": { + 1: "FLAG_RESALE_INTENT", + 2: "FLAG_CONTROL_UNDISCLOSED", + 3: "FLAG_AI_INCONSISTENT", + 4: "FLAG_WASH_CLUSTER", + 5: "FLAG_STRUCTURING", + 6: "FLAG_PRICE_ANOMALY", + 7: "FLAG_SUSPICIOUS_PATTERN", + 8: "REVIEW_REDFLAG_UNCERTAIN" + }, + // E-03-v1 BadActorDisqualification (wave-3). + "E-03-v1": { + 1: "FAIL_BADACTOR_ROSTER_MISSING", + 2: "REVIEW_BADACTOR_ROSTER_INCOMPLETE", + 3: "FAIL_BADACTOR_CLEARANCE_MISSING", + 4: "REVIEW_BADACTOR_506E_PENDING", + 5: "FAIL_BADACTOR_ISSUER_UNTRUSTED", + 6: "FAIL_BADACTOR_SCOPE_MISMATCH", + 7: "FAIL_BADACTOR_CLEARANCE_STALE", + 8: "FAIL_BADACTOR_REVOKED", + 9: "FAIL_BADACTOR_506E_DISCLOSURE_MISSING" + }, + // F-01-v1 OperatorSelfDealing (wave-3). + "F-01-v1": { + 1: "IDENTITY_UNRESOLVED", + 2: "OP_REGISTRY_UNAVAILABLE", + 3: "OP_SELF_DEALING_BLOCKED" + }, + // F-03-v1 FraudSurveillance (wave-3, STATEFUL). MONITORING element: `check()` + // never rejects (it is `pure`, structurally unable to read flag state — the + // no-tipping-off guarantee). `n` numbers the 31 CFR §1023.320(a)(2) suspicion + // category that OPENED the flag; these codes surface only via the onlyOperator + // audit views (reasonCodeOf) and subject-opaque FlagLifecycle events, never as + // a party-facing rejection (same monitoring treatment as A-12 / F-02). + "F-03-v1": { + 1: "ILLICIT_FUNDS", + 2: "STRUCTURING_EVASION", + 3: "NO_LAWFUL_PURPOSE", + 4: "CRIME_FACILITATION" + }, + // F-04-v1 RegMIssuerBuying (wave-3). + "F-04-v1": { + 1: "REVIEW_REGM_EXCEPTION_CONFLICT", + 2: "REG_M_OFFERING_STATUS_MISSING", + 3: "REG_M_RESTRICTED_SET_UNVERIFIED", + 4: "RESTRICTED_PERIOD_PURCHASE_BLOCKED_ISSUER", + 5: "RESTRICTED_PERIOD_PURCHASE_BLOCKED_PARTICIPANT" } }; @@ -192,7 +265,7 @@ interface TableEntry { // Precompute every known reason code from THREE sources: // -// 1. Engine-propagated verdicts: (recipeId in {1,2,7}) x (17 elementIds) x +// 1. Engine-propagated verdicts: (recipeId in {1,2,7}) x (23 elementIds) x // (every code in that element's ELEMENT_CODE_NAMES table, or just code 1 // for elements without one). `ComplianceEngine._runChecks` currently // re-encodes every per-element failure as `encode(contributingRecipe, @@ -203,7 +276,7 @@ interface TableEntry { // covering known combos ahead of use, per the audit-matching rationale in // ReasonCodes.sol) so decoding stays correct if/when richer propagation // lands. -// 2. Direct element-level codes: (recipeId 0) x (17 elementIds) x (every +// 2. Direct element-level codes: (recipeId 0) x (23 elementIds) x (every // code in ELEMENT_CODE_NAMES, or code 1 for elements without one). Every // element's own `check()` self-encodes with `ReasonCodes.encode(0, // ELEMENT_ID, n)` (see e.g. Sanctions.sol, HolderCount.sol) — this is diff --git a/services/cli/test/smoke.ts b/services/cli/test/smoke.ts index 608be52..059a16c 100644 --- a/services/cli/test/smoke.ts +++ b/services/cli/test/smoke.ts @@ -47,6 +47,10 @@ const A01_RECIPE7 = "0x4ec564787cbeb03d100cec07278646352648e18a22c4b6e3a8549fa92 // "f(uint16,bytes32,uint32)" 0 $(cast format-bytes32-string "") )`. const A01_DIRECT_CODE4 = "0x8bb6a77feb777933299995cf60c2f3d5a4804be0f6077feab1f7390c76179f9c"; const D01_DIRECT_CODE3 = "0x944f96138687357570c74d60495e55251602230e456018945bdf8e15bc1241ba"; +// Wave-3 (CMP-004): same direct element-level (recipeId 0) ground-truth style. +// F-03 FraudSurveillance is a monitoring element whose codes surface only in the +// operator/audit views (reasonCodeOf) — code 2 == STRUCTURING_EVASION. +const F03_DIRECT_CODE2 = "0x5d92032bfc7789d5259fa504825a7aee201b62bfb2f705423901f179444eb22a"; async function main() { // --- asset profile selection ------------------------------------------- @@ -79,18 +83,21 @@ async function main() { assert(encodeReason(7, "A-01-v1", 1) === A01_RECIPE7, "encode matches cast (A-01 recipe 7)"); assert(encodeReason(0, "A-01-v1", 4) === A01_DIRECT_CODE4, "encode matches cast (A-01 direct code 4)"); assert(encodeReason(0, "D-01-v1", 3) === D01_DIRECT_CODE3, "encode matches cast (D-01 direct code 3)"); + assert(encodeReason(0, "F-03-v1", 2) === F03_DIRECT_CODE2, "encode matches cast (F-03 direct code 2)"); // table = (recipe-scoped: 3 recipes x codes-per-element-sum) + (direct // element-level: 1 x codes-per-element-sum, recipeId 0 — the reasonCode an // element's own `check()` actually self-encodes) + 6 policy statuses. - // codes-per-element-sum is each of the 17 elements' code count, where an + // codes-per-element-sum is each of the 23 elements' code count, where an // element without a richer ELEMENT_CODE_NAMES table contributes 1. // Wave-2b upgraded 6 elements to multi-code taxonomies (A-01:10, A-03:9, - // A-04:9, A-13:9, B-01:6, B-02:6) and the wave-2 illustrative elements - // (A-08:8, A-09:2, A-11:5, B-03:6, B-04:7, D-01:4) are also enumerated; - // the remaining 5 single-code mocks (A-02, A-05, C-01, E-01, F-02) - // contribute 1 each. - const CODES_PER_ELEMENT = 10 + 1 + 9 + 9 + 1 + 6 + 6 + 1 + 1 + 9 + 1 + 8 + 2 + 5 + 6 + 7 + 4; // = 86 + // A-04:9, A-13:9, B-01:6, B-02:6); the wave-2 illustrative elements + // (A-08:8, A-09:2, A-11:5, B-03:6, B-04:7, D-01:4) and the wave-3 + // illustrative elements (A-06:4, A-12:8, E-03:9, F-01:3, F-03:4, F-04:5) are + // also enumerated; the remaining 5 single-code mocks (A-02, A-05, C-01, + // E-01, F-02) contribute 1 each. + const CODES_PER_ELEMENT = + 10 + 1 + 9 + 9 + 1 + 6 + 6 + 1 + 1 + 9 + 1 + 8 + 2 + 5 + 6 + 7 + 4 + 4 + 8 + 9 + 3 + 4 + 5; // = 119 assert(tableSize() === 4 * CODES_PER_ELEMENT + 6, "reason table size"); const jur = decodeReason(A02_RECIPE1); @@ -110,6 +117,11 @@ async function main() { assert(sanctionsClaim.label.includes("FAIL_NO_SANCTIONS_CLAIM"), "decodes A-01 direct code 4"); const holderCap = decodeReason(D01_DIRECT_CODE3); assert(holderCap.label.includes("HOLDER_CAP_3C1_100"), "decodes D-01 direct code 3"); + // Wave-3: a monitoring element's audit-surface code still decodes to its + // doc-name even though F-03's `check()` never rejects — the code appears only + // in operator views / FlagLifecycle events, never as a party-facing reject. + const fraudFlag = decodeReason(F03_DIRECT_CODE2); + assert(fraudFlag.label.includes("STRUCTURING_EVASION"), "decodes F-03 direct code 2"); // Legacy code-1 meaning is preserved across the wave-2b upgrade (doc says // code 1 keeps the pre-upgrade "blocked wallet" semantics for A-01). assert(decodeReason(encodeReason(0, "A-01-v1", 1)).label.includes("FAIL_SDN_WALLET_MATCH"), "A-01 code 1 preserved"); diff --git a/src/compliance/elements/Affiliate.sol b/src/compliance/elements/Affiliate.sol new file mode 100644 index 0000000..7638f2b --- /dev/null +++ b/src/compliance/elements/Affiliate.sol @@ -0,0 +1,321 @@ +// SPDX-License-Identifier: GPL-3.0 +pragma solidity 0.8.17; + +import {BaseElement} from "./BaseElement.sol"; +import {Governed} from "../../auth/Governed.sol"; +import { + ElementMetadata, + ElementCategory, + TemporalNature, + Decidability, + ObligationTiming, + Statefulness +} from "../../types/ComplianceTypes.sol"; +import {ReasonCodes} from "../../libraries/ReasonCodes.sol"; + +/// @dev A-06-v1 Affiliate / Rule 144 control-person determination (mock). Decides +/// whether `subject` is an affiliate of `asset`'s issuer at trade time and +/// exposes the effective status for the resale cascade to consume. This +/// element only DETERMINES status — it never blocks an affiliate trade; the +/// Rule 144 5-constraint enforcement (holding period 144(d), current info +/// 144(c), volume 144(e), manner-of-sale 144(f), Form 144 144(h)) is the +/// recipe's job (doc §5.3). PASS_AFFILIATE and PASS_NON_AFFILIATE therefore +/// both pass this gate; the split is surfaced via `effectiveStatus()` and read +/// by the cascade (C-01 Rule 144 paths, Recipe R2 — doc §9.1), never wired here. +/// +/// MOCK BOUNDARY. Production A-06 consumes a Trusted-Issuer-signed, registry- +/// cross-checked claim (doc §4 collection flow, §8.2 Issuer Registry). Here an +/// operator-set claim stands in for that whole pipeline: the off-chain facts- +/// and-circumstances judgment (control / family / indirect chain / Rule 405 +/// "power to direct" — doc §5.4, §1.4) is trusted at face value, and A-06 runs +/// only deterministic arithmetic (freshness + Rule 144(b) look-back) on top, +/// exactly like A-11 ClaimFreshness. Liability for a wrong determination sits +/// with the issuer/attester (doc §10.3). Two pipeline steps are modelled so +/// their failure paths are reachable: the claim's freshness anchor, and +/// TrustedIssuerRegistry.contains() (doc §5.1 step 2) via `isTrustedClaimIssuer`. +/// Claim signature verification (doc §5.1 step 2) is NOT modelled. +/// +/// NO ON-CHAIN BRIGHT LINE (A-06.md checklist C3/C4, error pattern 2). No +/// ownership percentage or officer/director role is ever turned into a +/// PASS/FAIL rule here. `AffiliateBasis` records the ATTESTED evidentiary basis +/// of an off-chain conclusion — e.g. `BENEFICIAL_OWNER_10PLUS` means the +/// Trusted Issuer concluded affiliate ON a 10%+ ownership basis, NOT that this +/// contract classifies 10% holders as affiliates. Rule 405 control has no +/// quantitative threshold (A-06.md §1.2, §2). The ICA §2(a)(3)/(a)(9) bright +/// lines (≥5%, officer/director auto, >25% presumption) and the Exchange Act +/// §16 >10%/§12-registration insider regime belong to OTHER statutory axes and +/// are deliberately NOT imported (A-06.md checklist C4/C10/C11). +/// +/// Reason code numbers (doc §6.1 names), in `check()` evaluation order: +/// 1 = FAIL_AFFILIATE_STATUS_UNKNOWN no claim for this (subject,asset) +/// — never attested, OR a claim that +/// exists only for a different asset +/// (affiliate status is asset- +/// specific, doc §4.4). Fail-closed: +/// an ABSENT claim is NOT a silent +/// non-affiliate pass (the dangerous +/// false negative of doc §10.3). +/// 2 = FAIL_UNTRUSTED_AFFILIATE_CLAIM_ISSUER claim.claimIssuer ∉ trusted set +/// 3 = FAIL_AFFILIATE_CLAIM_EXPIRED verifiedAt past the 90-day reuse cap +/// 4 = REVIEW_AFFILIATE_UNCERTAIN UNCERTAIN_AFFILIATE (or any basis +/// this gate cannot resolve) — routed +/// to manual review, fail-closed +/// +/// PASS_AFFILIATE / PASS_NON_AFFILIATE carry reasonCode 0 with passed=true (see +/// above). `effectiveStatus()` exposes which of the two, with decay applied. +contract Affiliate is BaseElement, Governed { + bytes32 internal constant ELEMENT_ID = "A-06-v1"; + + /// @dev Evidentiary basis of an off-chain affiliate determination (doc §3.4, 9 + /// values) plus a leading UNSET sentinel so the zero-value default of an + /// unrecorded claim is fail-closed (never a valid basis). UNSET is the + /// on-chain "claim == null" of doc §5.1 step 1; NOT_AFFILIATE is the + /// distinct affirmative determination "checked, and not an affiliate". + enum AffiliateBasis { + UNSET, // 0 = no claim recorded (fail-closed default) + OFFICER_DIRECTOR, // executive officer / director (Wolfson + Rule 405) + GENERAL_PARTNER, // general partner (Rule 405) + BENEFICIAL_OWNER_10PLUS, // 10%+ beneficial owner (practice guideline) + FAMILY_OF_AFFILIATE, // family member of an affiliate (Wolfson inference) + INDIRECT_CONTROL, // control via intermediary — LLC/trust (Rule 144(a)(1)) + COMMON_CONTROL, // under common control with the issuer (Rule 405) + FORMER_AFFILIATE_DECAY, // recently an affiliate, inside the decay tail + NOT_AFFILIATE, // affirmatively determined non-affiliate + UNCERTAIN_AFFILIATE // undeterminable — manual review (doc §6.3) + } + + /// @dev Evidence source of the determination (doc §3.5, 7 values) plus an + /// UNSPECIFIED sentinel. Recorded for audit provenance; this deterministic + /// gate does NOT branch on it (doc §5.1 branches on basis only). SELF_- + /// ATTESTATION is the weakest source (doc §3.5, Layer 1 only, §10.1) — + /// rejecting a bare self-attested source is an off-chain issuance-time + /// control, not encoded in this trade-time gate. + enum DeterminationSource { + UNSPECIFIED, // 0 = no source recorded + ISSUER_REGISTRY, // issuer-provided affiliate registry (strongest, doc §8.2) + SCHEDULE_13D_13G_FILING, // SEC EDGAR Schedule 13D/13G + SECTION_16_FILING, // Section 16 insider filing + KYC_BENEFICIAL_OWNERSHIP, // Trusted-Issuer-collected beneficial ownership + CORPORATE_DOCUMENT, // board minutes / operating agreement + SELF_ATTESTATION, // buyer self-attestation (weakest) + EXTERNAL_SPOT_CHECK // random audit / third-party verification + } + + /// @dev Resolved effective status at the current block, single source of truth + /// for both `check()` (→ pass/fail + code) and `effectiveStatus()` (→ the + /// value downstream reads), so the gate verdict and the exposed status can + /// never diverge. + enum EffectiveStatus { + UNKNOWN, // no claim for this (subject, asset) + UNTRUSTED, // claim issuer not in the trusted set + EXPIRED, // claim past the freshness cap + NON_AFFILIATE, // PASS_NON_AFFILIATE (incl. decay complete) + AFFILIATE, // PASS_AFFILIATE (incl. decay in progress) + UNCERTAIN // REVIEW_AFFILIATE_UNCERTAIN + } + + struct AffiliateClaim { + AffiliateBasis basis; + DeterminationSource source; + address claimIssuer; // attesting Trusted Issuer (checked against the trusted set) + uint64 verifiedAt; // 0 = no claim recorded (freshness anchor + null sentinel) + uint64 decayStartedAt; // FORMER_AFFILIATE_DECAY: role-exit/divestiture instant; else 0 + } + + /// @dev Rule 144(b)(2) affiliate tail — "any time during the 90 days immediately + /// before the sale". STATUTORY, and a day-count (fixed 90 days). + uint64 public constant TAIL_144B2 = 90 days; + + /// @dev Rule 144(b)(1)(i)/(ii) non-affiliate qualification look-back — "has not + /// been an affiliate during the preceding three months". STATUTORY, but the + /// statute counts CALENDAR months (89–92 days, date-dependent), NOT a fixed + /// day-count, and it is a DISTINCT period from the (b)(2) 90-day tail + /// (A-06.md §1.3-1.4, §2, checklist C5). Collapsing the two into one 90-day + /// number is the doc-flagged #1 misimplementation (A-06.md §4 pattern 1). On + /// chain we cannot resolve calendar-month boundaries cheaply, so this is a + /// Decipher-POLICY conservative encoding: the 92-day upper bound of any + /// 3-consecutive-calendar-month span, so the flip to non-affiliate never + /// fires early regardless of which months the decay spanned. NOT the literal + /// statutory text. + uint64 public constant LOOKBACK_144B1 = 92 days; + + /// @dev Claim reuse window (freshness). Decipher-POLICY, NOT statute: affiliate + /// status turns over frequently — role change, share divestiture (doc §5.2, + /// §8.1) — so the reuse window is deliberately short (90 days) and drives the + /// periodic re-attestation duty (doc §8.1, §11.2). Must never be described as + /// a legal requirement. Numerically equal to TAIL_144B2 but a distinct + /// concept (claim freshness, not the statutory look-back); kept separate. + uint64 public constant FRESHNESS_CAP = 90 days; + + /// @notice subject => asset => attested claim. Keyed by asset because affiliate + /// status is asset-specific: the same person may be an affiliate of + /// issuer X and a non-affiliate of issuer Y (doc §4.4, §7.2). A claim for + /// a different asset is simply absent here (→ STATUS_UNKNOWN), which is + /// the doc §5.1 assetIdentifier-mismatch outcome. + mapping(address => mapping(address => AffiliateClaim)) public claimOf; + + /// @notice Trusted-issuer set — mock of TrustedIssuerRegistry.contains() (doc + /// §5.1 step 2, §8.2). A claim whose issuer is not (or is no longer) in + /// this set fails FAIL_UNTRUSTED_AFFILIATE_CLAIM_ISSUER at gate time. + mapping(address => bool) public isTrustedClaimIssuer; + + event ClaimSet( + address indexed subject, + address indexed asset, + AffiliateBasis basis, + DeterminationSource source, + address claimIssuer, + uint64 verifiedAt, + uint64 decayStartedAt + ); + event TrustedClaimIssuerSet(address indexed issuer, bool trusted); + + constructor() + BaseElement(ElementMetadata({ + elementId: ELEMENT_ID, + category: ElementCategory.INVESTOR_ATTRIBUTE, + version: "A-06-v1", + temporal: TemporalNature.PERIODIC, + decidability: Decidability.ATTESTATION_BASED, + timing: ObligationTiming.EX_ANTE_VERIFY, + statefulness: Statefulness.STATELESS + })) + {} + + /// @notice Records (or overwrites) the attested affiliate claim for `subject` on + /// `asset`. + /// @dev The whole claim is attested off-chain by the Trusted Issuer that ran the + /// Rule 405 "power to direct" analysis (doc §5.4); A-06 trusts basis/source/ + /// decayStartedAt at face value. `decayStartedAt` is meaningful only for + /// FORMER_AFFILIATE_DECAY and is the fixed role-exit/divestiture instant; + /// `verifiedAt` is refreshed on each periodic re-attestation (doc §8.1) and + /// is independent of it. + function setClaim( + address subject, + address asset, + AffiliateBasis basis, + DeterminationSource source, + address claimIssuer, + uint64 verifiedAt, + uint64 decayStartedAt + ) external onlyOperator { + claimOf[subject][asset] = AffiliateClaim({ + basis: basis, + source: source, + claimIssuer: claimIssuer, + verifiedAt: verifiedAt, + decayStartedAt: decayStartedAt + }); + emit ClaimSet(subject, asset, basis, source, claimIssuer, verifiedAt, decayStartedAt); + } + + /// @notice Add/remove an issuer from the trusted-claim-issuer set. + function setTrustedClaimIssuer(address issuer, bool trusted) external onlyOperator { + isTrustedClaimIssuer[issuer] = trusted; + emit TrustedClaimIssuerSet(issuer, trusted); + } + + /// @notice Current effective affiliate status of `subject` for `asset`, with the + /// Rule 144(b) decay look-back applied at the current block. + /// @dev Read-only surface for the resale cascade (doc §9.1: C-01 Rule 144 paths, + /// Recipe R2). This element determines status; it does NOT wire into or gate + /// those consumers — they read this view. + function effectiveStatus(address subject, address asset) external view returns (EffectiveStatus) { + return _resolve(subject, asset); + } + + /// @dev `counterparty`, `amount`, `context` are ignored: the subject is `user` + /// (doc §5.1 "prospective_buyer") and asset-specificity comes from `asset` + /// (the RWA token the engine is checking), so no context decode is needed. + /// Determination-succeeded (AFFILIATE or NON_AFFILIATE) passes this gate; + /// only undeterminable/uncertain states fail (doc §5.3). + function check(address user, address, address asset, uint256, bytes calldata) + external + view + override + returns (bool passed, bytes32 reasonCode) + { + EffectiveStatus s = _resolve(user, asset); + + if (s == EffectiveStatus.UNKNOWN) { + return (false, ReasonCodes.encode(0, ELEMENT_ID, 1)); // FAIL_AFFILIATE_STATUS_UNKNOWN + } + if (s == EffectiveStatus.UNTRUSTED) { + return (false, ReasonCodes.encode(0, ELEMENT_ID, 2)); // FAIL_UNTRUSTED_AFFILIATE_CLAIM_ISSUER + } + if (s == EffectiveStatus.EXPIRED) { + return (false, ReasonCodes.encode(0, ELEMENT_ID, 3)); // FAIL_AFFILIATE_CLAIM_EXPIRED + } + if (s == EffectiveStatus.UNCERTAIN) { + return (false, ReasonCodes.encode(0, ELEMENT_ID, 4)); // REVIEW_AFFILIATE_UNCERTAIN + } + // AFFILIATE / NON_AFFILIATE — status determined; the gate passes and the + // recipe reads effectiveStatus() to apply (or waive) the Rule 144 constraints. + return (true, bytes32(0)); + } + + /// @dev doc §5.1 order: (1) claim present for this (subject,asset), (2) issuer + /// trusted, (3) fresh, (4) AffiliateBasis branch. First failing step wins. + function _resolve(address subject, address asset) internal view returns (EffectiveStatus) { + AffiliateClaim memory c = claimOf[subject][asset]; + + // (1) doc §5.1 step 1 + step 4 (asset mismatch): an unrecorded claim (or one + // recorded only for a different asset) has verifiedAt==0 / basis==UNSET. + // Fail-closed to UNKNOWN — absence is never a non-affiliate pass. + if (c.verifiedAt == 0 || c.basis == AffiliateBasis.UNSET) { + return EffectiveStatus.UNKNOWN; + } + + // (2) doc §5.1 step 2: TrustedIssuerRegistry.contains() mock. + if (!isTrustedClaimIssuer[c.claimIssuer]) { + return EffectiveStatus.UNTRUSTED; + } + + // (3) doc §5.1 step 3: freshness. Strict `>` — exactly at the cap is still + // fresh (inclusive reuse window, matches A-11 ClaimFreshness §5.3). + if (block.timestamp > uint256(c.verifiedAt) + FRESHNESS_CAP) { + return EffectiveStatus.EXPIRED; + } + + // (4) doc §5.1 step 5: AffiliateBasis branch. + if (c.basis == AffiliateBasis.NOT_AFFILIATE) { + return EffectiveStatus.NON_AFFILIATE; + } + if (c.basis == AffiliateBasis.FORMER_AFFILIATE_DECAY) { + return _resolveDecay(c.decayStartedAt); + } + if ( + c.basis == AffiliateBasis.OFFICER_DIRECTOR || c.basis == AffiliateBasis.GENERAL_PARTNER + || c.basis == AffiliateBasis.BENEFICIAL_OWNER_10PLUS || c.basis == AffiliateBasis.FAMILY_OF_AFFILIATE + || c.basis == AffiliateBasis.INDIRECT_CONTROL || c.basis == AffiliateBasis.COMMON_CONTROL + ) { + return EffectiveStatus.AFFILIATE; + } + // UNCERTAIN_AFFILIATE, or any basis a future revision appends and this gate + // does not yet resolve → manual review, fail-closed (doc §5.1 else-branch). + return EffectiveStatus.UNCERTAIN; + } + + /// @dev FORMER_AFFILIATE_DECAY resolution. Decay is complete — the person may be + /// treated as a non-affiliate — only once BOTH Rule 144 look-backs have run: + /// the (b)(2) 90-day tail AND the (b)(1) "preceding three months" + /// qualification (encoded as 92 days, LOOKBACK_144B1). We require the later + /// of the two, i.e. max(TAIL_144B2, LOOKBACK_144B1) (A-06.md checklist C5/C6). + /// Inclusive boundary: at exactly `decayEnd` the person becomes NON_AFFILIATE + /// (doc §9.3 Case 2 — decay_remaining==0 flips to non-affiliate). + function _resolveDecay(uint64 decayStartedAt) internal view returns (EffectiveStatus) { + // Malformed claim: FORMER_AFFILIATE_DECAY with no decay start cannot prove any + // tail has run. Fail-closed → stay AFFILIATE (Rule 144 constraints persist); + // never flip to the laxer non-affiliate path on missing data (doc §10.3). + if (decayStartedAt == 0) { + return EffectiveStatus.AFFILIATE; + } + uint256 tailEnd = uint256(decayStartedAt) + TAIL_144B2; + uint256 lookbackEnd = uint256(decayStartedAt) + LOOKBACK_144B1; + uint256 decayEnd = tailEnd >= lookbackEnd ? tailEnd : lookbackEnd; + if (block.timestamp >= decayEnd) { + return EffectiveStatus.NON_AFFILIATE; + } + return EffectiveStatus.AFFILIATE; + } +} diff --git a/src/compliance/elements/BadActorDisqualification.sol b/src/compliance/elements/BadActorDisqualification.sol new file mode 100644 index 0000000..df4ba86 --- /dev/null +++ b/src/compliance/elements/BadActorDisqualification.sol @@ -0,0 +1,308 @@ +// SPDX-License-Identifier: GPL-3.0 +pragma solidity 0.8.17; + +import {BaseElement} from "./BaseElement.sol"; +import {Governed} from "../../auth/Governed.sol"; +import { + ElementMetadata, + ElementCategory, + TemporalNature, + Decidability, + ObligationTiming, + Statefulness +} from "../../types/ComplianceTypes.sol"; +import {ReasonCodes} from "../../libraries/ReasonCodes.sol"; + +/// @dev E-03-v1 Bad Actor Disqualification (mock). ISSUER/ASSET-side gate for +/// Rule 506(d) (17 C.F.R. §230.506(d)) — the offering-time judgment of +/// whether the offering's *covered-person set* (issuer, directors, +/// executive/participating officers, 20%-or-more voting owners, promoters, +/// pooled-fund investment managers, paid solicitors — NOT the buyer) is +/// free of a disqualifying event. Keyed by ASSET because the disqualifier +/// attaches to the OFFERING, not to any individual investor (contrast the +/// A-series buyer-eligibility gates). Statutory root: Securities Act §5 +/// registration default (15 U.S.C. §77e) → §4(a)(2) private-offering +/// exemption (§77d(a)(2)) → Rule 506 safe harbor → Dodd-Frank §926 mandate +/// → Rule 506(d)(1) covered-person × event, Rule 506(d)(2)/(3) exceptions, +/// Rule 506(e) pre-2013 written-disclosure duty. +/// +/// ARCHITECTURE (doc §5.5, §8.1, App. C). The substantive judgments — which +/// covered person hit which of the eight (i)~(viii) events, look-back / +/// in-effect windows, the 20%-or-more voting-power line, waivers, the +/// affiliated-issuer timing exception ((d)(3)) — are ALL non-deterministic +/// and are pushed off-chain to an authorized L2 verifier's factual inquiry +/// (Rule 506(d)(2)(iv)), sealed into a signed clearance attestation. This +/// gate reads only the attestation's VALIDITY layer (existence, authorized +/// issuer, offering scope, freshness, non-revocation, 506(e) disclosure). +/// It NEVER re-adjudicates an event: a valid, fresh, non-revoked clearance +/// from a trusted issuer IS the cleanliness signal, and an issuer that later +/// discovers an event REVOKES (G5) rather than the gate recomputing it. +/// +/// MOCK BOUNDARY. Production replaces the operator setters with: (a) issuer +/// D&O questionnaires + background checks + FINRA BrokerCheck / SEC action +/// & litigation releases / state securities·banking·insurance regulator +/// databases feeding the L2 counsel/transfer-agent factual-inquiry pipeline +/// that signs the clearance (doc §4.3, §11.3); (b) a multisig + time-locked +/// governance change for the trusted-issuer set (doc §11.2). The +/// operator-gated setters here ARE the "authorized channel": a self-claimed +/// clearance cannot enter except through the operator, and even an +/// operator-recorded clearance must name an attestingIssuer that is in the +/// trusted set (G2) — this is the seam the doc's "자칭 clearance 미인가 +/// 발급자" case (Test 3) exercises. +/// +/// REVIEW-AT-GATE. The doc splits a listing channel (V1~V4) from a per-mint +/// gate (G1~G6). Production activates an offering only after the V-channel +/// clears, so a mint never reaches an offering with an open REVIEW; this +/// mock has no separate listing lifecycle, so check() enforces the listing +/// invariants inline and a REVIEW is a fail-closed HOLD (blocks the mint, +/// not a pass) — doc §6.1/§6.3: the per-mint gate has no discretionary pass. +/// +/// Reason code numbers (doc §6.2 code-name map), in check() evaluation order +/// (ReasonCodes.encode(0, ELEMENT_ID, n)): +/// 1 = FAIL_BADACTOR_ROSTER_MISSING V1 covered-person roster undeclared +/// 2 = REVIEW_BADACTOR_ROSTER_INCOMPLETE V2 (d)(1) category not all identified (HOLD) +/// 3 = FAIL_BADACTOR_CLEARANCE_MISSING V3/G1 no clearance attestation (fail-closed) +/// 4 = REVIEW_BADACTOR_506E_PENDING V4 pre-2013 event but disclosure doc unprepared (HOLD) +/// 5 = FAIL_BADACTOR_ISSUER_UNTRUSTED G2 attesting issuer outside trusted set +/// 6 = FAIL_BADACTOR_SCOPE_MISMATCH G3 clearance scoped to a different offering +/// 7 = FAIL_BADACTOR_CLEARANCE_STALE G4 past re-inquiry window (A-11 freshness) +/// 8 = FAIL_BADACTOR_REVOKED G5 mid-offering revocation (§3.14) +/// 9 = FAIL_BADACTOR_506E_DISCLOSURE_MISSING G6 pre-2013 event but §506(e) disclosure not furnished +contract BadActorDisqualification is BaseElement, Governed { + bytes32 internal constant ELEMENT_ID = "E-03-v1"; + + /// @dev Offering "card" declaration (issuer-declared, sealed at listing per + /// B-01). offeringId is the G3 scope anchor; coveredPersonRosterHash is + /// the on-chain seal of the off-chain roster (V1); rosterComplete is the + /// V2 listing determination that every Rule 506(d)(1) covered-person + /// category was identified (roster substance stays off-chain — privacy + /// minimization, doc §5.4). + struct Offering { + bytes32 offeringId; + bytes32 coveredPersonRosterHash; + bool rosterComplete; + } + + /// @dev L2 clearance attestation (offering-level claim, doc §3.16). exists is + /// the presence flag (G1); attestingIssuer is the L2 that performed the + /// factual inquiry and must be in the trusted set (G2); offeringScope + /// binds it to one offering (G3); expiry is the freshness bound (G4, + /// A-11); revoked absorbs mid-offering events (G5); the disclosure506e* + /// fields drive the Rule 506(e) branch (V4/G6). noDisqualifyingEvent is + /// the L2-sealed SUBSTANTIVE conclusion and is deliberately NOT gated + /// (see check()). + struct Clearance { + bool exists; + address attestingIssuer; + bytes32 offeringScope; + uint64 expiry; + bool revoked; + bool disclosure506eRequired; + bytes32 disclosedMattersHash; + bool disclosureFurnished; + bool noDisqualifyingEvent; + } + + /// @dev asset => offering card declaration. + mapping(address => Offering) public offeringOf; + /// @dev asset => bad-actor clearance attestation for that asset's offering. + mapping(address => Clearance) public clearanceOf; + /// @dev TRUSTED_BADACTOR_ISSUERS: L2 verifiers authorized to sign a clearance + /// (Rule 506(d)(2)(iv) — the subject that may be trusted to have done the + /// factual inquiry). Governance constant, not a per-asset fact. + mapping(address => bool) public isTrustedBadActorIssuer; + + event OfferingDeclared( + address indexed asset, bytes32 offeringId, bytes32 coveredPersonRosterHash, bool rosterComplete + ); + event ClearanceSet( + address indexed asset, + address indexed attestingIssuer, + bytes32 offeringScope, + uint64 expiry, + bool disclosure506eRequired, + bytes32 disclosedMattersHash, + bool disclosureFurnished, + bool noDisqualifyingEvent + ); + event ClearanceRevocationSet(address indexed asset, bool revoked); + event TrustedBadActorIssuerSet(address indexed issuer, bool trusted); + + constructor() + BaseElement(ElementMetadata({ + elementId: ELEMENT_ID, + category: ElementCategory.ISSUER_STATUS, + version: "E-03-v1", + // PERIODIC, not ONE_TIME: unlike E-01's one-time Form D filing, a + // bad-actor event can arise mid-offering (doc §3.14), so the + // clearance is re-verified on an A-11 cycle and is revocable — + // the gate's freshness (G4) and revocation (G5) axes encode this. + temporal: TemporalNature.PERIODIC, + // ATTESTATION_BASED: the gate consumes an L2-signed clearance + // whose substance is sealed off-chain (Pattern A gate with a local + // Pattern B borrow, doc §8.1), like the E-01 issuer-side sibling. + decidability: Decidability.ATTESTATION_BASED, + timing: ObligationTiming.EX_ANTE_VERIFY, + statefulness: Statefulness.STATELESS + })) + {} + + /// @dev Declares (or overwrites) the offering card for `asset`. In production + /// this is the issuer declaration sealed at listing under B-01; + /// coveredPersonRosterHash == 0 means no roster is declared (V1 fails). + function setOffering(address asset, bytes32 offeringId, bytes32 coveredPersonRosterHash, bool rosterComplete) + external + onlyOperator + { + offeringOf[asset] = Offering({ + offeringId: offeringId, coveredPersonRosterHash: coveredPersonRosterHash, rosterComplete: rosterComplete + }); + emit OfferingDeclared(asset, offeringId, coveredPersonRosterHash, rosterComplete); + } + + /// @dev Records (or overwrites) the bad-actor clearance for `asset`. This is + /// the sole authorized ingestion channel (mock stand-in for the L2 + /// counsel/transfer-agent attestation pipeline of doc §4.3/§11.3): a + /// self-claimed clearance cannot enter except through this operator + /// gate, and G2 still requires `attestingIssuer` to be in the trusted + /// set. Sets exists=true and revoked=false; revocation is expressed via + /// setClearanceRevoked (the mid-offering seam, doc §3.14/§11.6). + function setClearance( + address asset, + address attestingIssuer, + bytes32 offeringScope, + uint64 expiry, + bool disclosure506eRequired, + bytes32 disclosedMattersHash, + bool disclosureFurnished, + bool noDisqualifyingEvent + ) external onlyOperator { + clearanceOf[asset] = Clearance({ + exists: true, + attestingIssuer: attestingIssuer, + offeringScope: offeringScope, + expiry: expiry, + revoked: false, + disclosure506eRequired: disclosure506eRequired, + disclosedMattersHash: disclosedMattersHash, + disclosureFurnished: disclosureFurnished, + noDisqualifyingEvent: noDisqualifyingEvent + }); + emit ClearanceSet( + asset, + attestingIssuer, + offeringScope, + expiry, + disclosure506eRequired, + disclosedMattersHash, + disclosureFurnished, + noDisqualifyingEvent + ); + } + + /// @dev Toggles the mid-offering revocation flag (doc §3.14: (d)(1) attaches + /// to "such sale", so a sale after a covered person is sanctioned is + /// disqualified even if the offering opened clear). Production driver is + /// the issuing L2 / operator on discovery of a new event. + function setClearanceRevoked(address asset, bool revoked) external onlyOperator { + clearanceOf[asset].revoked = revoked; + emit ClearanceRevocationSet(asset, revoked); + } + + /// @dev Manages the TRUSTED_BADACTOR_ISSUERS set. Mock stand-in for the + /// multisig + time-lock governance change of doc §11.2. + function setTrustedBadActorIssuer(address issuer, bool trusted) external onlyOperator { + isTrustedBadActorIssuer[issuer] = trusted; + emit TrustedBadActorIssuerSet(issuer, trusted); + } + + /// @dev Issuer-side gate evaluated per asset (doc §5.2, listing V-checks folded + /// ahead of the per-mint G-checks; first failure stops). Every branch is + /// existence / set-membership / scope / timestamp / boolean — no + /// discretion, no event re-adjudication. Unattested/unset fails closed. + function check(address, address, address asset, uint256, bytes calldata) + external + view + override + returns (bool passed, bytes32 reasonCode) + { + Offering memory o = offeringOf[asset]; + Clearance memory c = clearanceOf[asset]; + + // V1 — covered-person roster declared (Rule 506(d)(1) covered-person set; + // fail-closed default per §5 registration baseline, doc §3.1/§3.6). + if (o.coveredPersonRosterHash == bytes32(0)) { + return (false, _code(1)); + } + + // V2 — roster completeness: every (d)(1) category identified. A listing + // HOLD (promoter / 20%-voting-owner omissions are common), so + // fail-closed until the roster is supplemented (doc §6.2, §11.1). + if (!o.rosterComplete) { + return (false, _code(2)); + } + + // V3 / G1 — a clearance attestation is on file. Absent clearance for a + // regulated offering fails closed (doc Test 2): "no certificate" is + // never read as "no inquiry needed". + if (!c.exists) { + return (false, _code(3)); + } + + // V4 — Rule 506(e) branch, prerequisite: if a pre-2013 disqualifying + // matter exists, the written-disclosure document must at least be + // prepared (hash sealed). Unprepared => HOLD (checked before G6 so a + // not-yet-prepared disclosure surfaces as PENDING, not as G6). + if (c.disclosure506eRequired && c.disclosedMattersHash == bytes32(0)) { + return (false, _code(4)); + } + + // G2 — issuer authorization: only an L2 in TRUSTED_BADACTOR_ISSUERS may + // sign (Rule 506(d)(2)(iv) — the trusted factual-inquiry subject). + // Rejects a self-claimed clearance whose issuer is not authorized. + if (!isTrustedBadActorIssuer[c.attestingIssuer]) { + return (false, _code(5)); + } + + // G3 — offering scope: the clearance must be bound to THIS offering, so a + // certificate issued for another offering cannot be reused. + if (c.offeringScope != o.offeringId) { + return (false, _code(6)); + } + + // G4 — freshness (A-11 re-inquiry window; E-03 owns no expiry logic of its + // own, doc §9.1 — the comparison is inline here only to model the time + // axis). Inclusive window: only now strictly past expiry is STALE. + if (block.timestamp > c.expiry) { + return (false, _code(7)); + } + + // G5 — not revoked: a mid-offering event is absorbed by revocation, not by + // the gate recomputing the event (doc §3.14 transition rule). + if (c.revoked) { + return (false, _code(8)); + } + + // G6 — Rule 506(e) written disclosure furnished. (e) has NO waiver (unlike + // the (d) good-cause / regulator-advice exits), so this is an + // unconditional gate whenever a pre-2013 matter is present. + if (c.disclosure506eRequired && !c.disclosureFurnished) { + return (false, _code(9)); + } + + // NOTE — clearance.noDisqualifyingEvent is the L2-SEALED substantive + // conclusion (post-2013 event absence, waivers ((d)(2)(ii)/(iii)) and the + // affiliated-issuer timing exception ((d)(3)) already reflected). The gate + // MUST NOT branch on it (doc §5.2/§5.5, App. C): a valid, fresh, + // non-revoked clearance from a trusted issuer is itself the pass signal. + // Carried for audit reconstruction only. Likewise the 20%-or-more voting + // line (inclusive ≥, doc §3.6/§5.3) and the A-08/A-09 entity look-through + // are L2 determinations sealed into coveredPersonRosterHash — the gate + // consumes the seal, it does not recompute voting power. + return (true, bytes32(0)); + } + + function _code(uint32 n) private pure returns (bytes32) { + return ReasonCodes.encode(0, ELEMENT_ID, n); + } +} diff --git a/src/compliance/elements/FraudSurveillance.sol b/src/compliance/elements/FraudSurveillance.sol new file mode 100644 index 0000000..2e3a1b4 --- /dev/null +++ b/src/compliance/elements/FraudSurveillance.sol @@ -0,0 +1,430 @@ +// SPDX-License-Identifier: GPL-3.0 +pragma solidity 0.8.17; + +import {BaseStatefulElement} from "./BaseStatefulElement.sol"; +import {BaseElement} from "./BaseElement.sol"; +import {IComplianceElement} from "../../interfaces/compliance/IComplianceElement.sol"; +import { + ElementMetadata, + ElementCategory, + TemporalNature, + Decidability, + ObligationTiming, + Statefulness +} from "../../types/ComplianceTypes.sol"; +import {ReasonCodes} from "../../libraries/ReasonCodes.sol"; +import {Errors} from "../../libraries/Errors.sol"; + +/// @dev F-03-v1 Suspicious Activity Monitoring / Fraud Surveillance (mock, +/// STATEFUL, Pattern C — monitoring, NOT a gate). F-03 does not judge a +/// trade PASS/FAIL; it observes already-settled transfers post-trade, +/// flags the suspicious ones, and hands them to a human (Operator) who +/// decides whether to file a SAR (doc §1.3, §5.1, §8). There are no reject +/// codes — only flag STATE transitions. +/// +/// TWO LEGAL LINEAGES CONVERGE HERE (doc §1.1): the securities-fraud axis +/// (Securities Act §17(a) [15 U.S.C. §77q(a)], Exchange Act §10(b) +/// [15 U.S.C. §78j(b)] + Rule 10b-5 [17 CFR §240.10b-5]) defines *what* +/// fraud is, and the BSA SAR axis (§5318(g) [31 U.S.C. §5318(g)] + +/// 31 CFR §1023.320) defines *how* a suspicious transaction is reported. +/// F-03 is the detection/flag layer feeding the human SAR judgment. +/// +/// ───────────────────────────────────────────────────────────────────── +/// THE §6.4 KEY VULNERABILITY — NO TIPPING-OFF (doc §3.8(e), §6.4, §3.13): +/// 31 CFR §1023.320(e) / 31 U.S.C. §5318(g)(2)(A)(i) forbid disclosing a +/// SAR "or any information that would reveal the existence of a SAR" to a +/// party to the transaction. On a *public ledger* this is the architecture +/// pressure point: a public per-wallet flag event is itself a violation. +/// This mock honours that at two levels: +/// (1) PARTY-FACING SURFACE = `check()`. It is `pure` and returns +/// (true, 0) unconditionally — it is *structurally* (compiler- +/// enforced) incapable of reading flag state, so it can never leak +/// one. This is the on-chain-testable core of doc §7 Test 5. +/// (2) `onTransfer` opens auto-detected flags SILENTLY — it emits NO +/// event, because an event in the settlement transaction would +/// itself correlate a flag to that transaction's parties (the exact +/// tipping-off vector). This deliberately diverges from F-02 +/// (SurveillanceFlag), which emits a public per-subject event: F-02 +/// (market manipulation) carries no §1023.320(e) confidentiality +/// duty; F-03 (fraud/SAR) does. +/// Flag records live in operator-gated storage and are readable ONLY via +/// onlyOperator views. Operator-driven lifecycle transitions (separate +/// transactions, uncorrelated to any trade) emit SUBJECT-OPAQUE events +/// (flagId only, never the subject) for the §5318(h) audit trail — this is +/// the internal sharing that §1023.320(e)(1)(ii) permits. +/// +/// ───────────────────────────────────────────────────────────────────── +/// ON-CHAIN vs OPERATOR-ATTESTED DETECTION SPLIT (doc §5.2, §5.5, §4.4): +/// • ON-CHAIN AUTO (`onTransfer`): the one §1023.320(a)(2) category that +/// is computable without off-chain signals — STRUCTURING_EVASION +/// (a)(2)(ii): several sub-$5,000 transfers from one identity that +/// AGGREGATE to >= $5,000 within a rolling window (doc §7.1 Test 1). +/// • OPERATOR-ATTESTED (`attestSuspicion`, onlyOperator): the categories +/// that require off-chain analytics joined from A-01/A-04/A-06/A-12 +/// (illicit-funds, no-lawful-purpose, crime-facilitation) and the +/// "attempted"/unsettled transactions that never reach `onTransfer`. +/// This is the documented seam between the on-chain-computable slice +/// and the doc's off-chain surveillance engine (doc §4.3, §11.2). +/// Cross-wallet structuring uses `identityGroupOf` (the A-04 dedup output, +/// operator-attested) so disguised multi-wallets aggregate as one unit +/// (doc §4.2, §9.2). Amount is treated as USD-denominated notional; a +/// production system converts token units -> USD off-chain first. +/// +/// ───────────────────────────────────────────────────────────────────── +/// REASON CODES — ReasonCodes.encode(0, ELEMENT_ID, n). n numbers the +/// 31 CFR §1023.320(a)(2) suspicion category that OPENED the flag (the +/// "why"); F-03 output is a flag STATE (doc §6.2), not a reject code: +/// 1 = ILLICIT_FUNDS (a)(2)(i) illegal-source / concealment +/// 2 = STRUCTURING_EVASION (a)(2)(ii) splitting to evade reporting +/// 3 = NO_LAWFUL_PURPOSE (a)(2)(iii) no business/apparent lawful purpose +/// 4 = CRIME_FACILITATION (a)(2)(iv) venue used to facilitate crime +/// Flag STATE enum (doc §6.2): NO_FLAG · DETECTED · UNDER_REVIEW · +/// SAR_FILED · CLEARED · NO_ACTION. +contract FraudSurveillance is BaseStatefulElement { + bytes32 internal constant ELEMENT_ID = "F-03-v1"; + + /// @dev 31 CFR §1023.320(a)(2) suspicion categories. Enum value doubles as + /// the reason-code `n` (NONE=0 sentinel; 1..4 == (a)(2)(i)..(iv)). + enum SuspicionCategory { + NONE, + ILLICIT_FUNDS, + STRUCTURING_EVASION, + NO_LAWFUL_PURPOSE, + CRIME_FACILITATION + } + + /// @dev Flag lifecycle states (doc §6.2). NOT reject codes — F-03 is a + /// monitoring element and never blocks a trade. + enum FlagState { + NO_FLAG, + DETECTED, + UNDER_REVIEW, + SAR_FILED, + CLEARED, + NO_ACTION + } + + /// @dev Operator/audit-facing flag record. Confidential (doc §6.4): readable + /// only through onlyOperator views, never through `check()`. + struct Flag { + address subject; // the party under surveillance (the transfers' `from`) + SuspicionCategory category; + FlagState state; + uint64 detectedAt; // "initial detection" clock start (doc §5.4) + uint64 deadline; // detectedAt + FILE_DEADLINE, extendable to +MAX_DEADLINE + uint64 filedAt; // 0 until SAR_FILED + bool suspectIdentified; // false => +30d extension eligible (doc §5.3) + bool attempted; // (a)(2) "conducted or attempted" — off-chain attested + } + + /// @dev Per-identity rolling aggregation for the structuring pattern + /// (doc §3.7 "pattern of transactions", §5.2 aggregateRecent). + struct Window { + uint64 windowStart; + uint256 total; + uint256 count; + } + + /// @dev STATUTORY — 31 CFR §1023.320(a)(2): a transaction is reportable if it + /// "involves or aggregates funds or other assets of at least $5,000". + /// "at least" is INCLUSIVE (>=): exactly $5,000 crosses the threshold + /// (doc §5.3, §7.3). This is not a Decipher policy value. + uint256 public constant SAR_THRESHOLD = 5000; + + /// @dev STATUTORY — 31 CFR §1023.320(b)(3): a SAR "shall be filed no later + /// than 30 calendar days after the date of the initial detection". + /// "no later than" is INCLUSIVE (<=): filing on day 30 is timely + /// (doc §5.3, §7.3). + uint64 public constant FILE_DEADLINE = 30 days; + + /// @dev STATUTORY — 31 CFR §1023.320(b)(3): "in no case shall reporting be + /// delayed more than 60 calendar days after the date of such initial + /// detection." Absolute cap; the +30d suspect-identification extension + /// may never push past this (doc §5.3). + uint64 public constant MAX_DEADLINE = 60 days; + + /// @dev POLICY (detection sensitivity, doc §3.12) — NOT statutory. The + /// rolling window over which sub-threshold transfers are aggregated for + /// the structuring pattern. Operator-tunable, but the legal 30/60d + /// filing clock is unaffected by it. + uint64 public structuringWindow = 1 days; + + /// @notice Local operator registry (write-gate). `owner` (the deployer, + /// inherited from BaseStatefulElement) is governance and always + /// counts as an operator. Governed/Ownable is deliberately NOT + /// inherited: its `owner()` collides with BaseStatefulElement's + /// public `owner` state variable, so the same access model is + /// reproduced locally. + mapping(address => bool) public isOperator; + + /// @dev A-04 (identity dedup) output, operator-attested: maps a wallet to + /// the real-world identity group it belongs to, so structuring across + /// disguised multi-wallets aggregates as one unit (doc §4.2, §9.2). + /// bytes32(0) => ungrouped (aggregate by the wallet address itself). + mapping(address => bytes32) public identityGroupOf; + + uint256 internal _flagSeq; // monotonic flag id source (0 = "no flag") + mapping(uint256 => Flag) internal _flags; // CONFIDENTIAL — onlyOperator views + mapping(bytes32 => Window) internal _window; // per-identity aggregation + + event OperatorSet(address indexed operator, bool enabled); + event IdentityGroupSet(address indexed wallet, bytes32 indexed group); + event StructuringWindowSet(uint64 window); + + /// @dev SUBJECT-OPAQUE by design (doc §6.4): carries the flagId and the + /// lifecycle state but NEVER the subject address. Emitted only from + /// operator transactions (never from `onTransfer`). + event FlagLifecycle(uint256 indexed flagId, FlagState state, bytes32 reasonCode); + event DeadlineExtended(uint256 indexed flagId, uint64 newDeadline); + + modifier onlyOwner() { + if (msg.sender != owner) revert Errors.NotAuthorized(); + _; + } + + modifier onlyOperator() { + if (msg.sender != owner && !isOperator[msg.sender]) revert Errors.NotAuthorized(); + _; + } + + constructor() + BaseStatefulElement(ElementMetadata({ + elementId: ELEMENT_ID, + category: ElementCategory.CONDUCT_MONITORING, + version: "F-03-v1", + temporal: TemporalNature.CUMULATIVE, + decidability: Decidability.MONITORING_BASED, + timing: ObligationTiming.EX_POST_TRIGGER, + statefulness: Statefulness.STATEFUL + })) + {} + + // ----------------------------------------------------------------- + // Governance / operator plane (write-gate, doc §5318(h) program) + // ----------------------------------------------------------------- + + function setOperator(address op, bool enabled) external onlyOwner { + isOperator[op] = enabled; + emit OperatorSet(op, enabled); + } + + /// @notice Records the A-04 identity grouping used to aggregate disguised + /// multi-wallets for structuring detection (doc §4.2, §9.2). + function setIdentityGroup(address wallet, bytes32 group) external onlyOperator { + identityGroupOf[wallet] = group; + emit IdentityGroupSet(wallet, group); + } + + function setStructuringWindow(uint64 window) external onlyOperator { + structuringWindow = window; + emit StructuringWindowSet(window); + } + + // ----------------------------------------------------------------- + // Party-facing surface — NEVER blocks, NEVER leaks (doc §1.3, §6.4) + // ----------------------------------------------------------------- + + /// @notice F-03 is not a gate: `check()` always passes. It is `pure` so it + /// is compiler-guaranteed unable to read flag state — the §6.4 + /// no-tipping-off guarantee on the party-facing surface (doc §7.5). + function check(address, address, address, uint256, bytes calldata) + external + pure + override(BaseElement, IComplianceElement) + returns (bool passed, bytes32 reasonCode) + { + return (true, bytes32(0)); + } + + // ----------------------------------------------------------------- + // Post-trade detection pipeline (doc §5.2) — on-chain-computable slice + // ----------------------------------------------------------------- + + /// @dev Engine commit hook (post-trade). `from` = seller (doc: engine + /// passes ctx.seller). Implements the amount threshold + rolling + /// structuring aggregation of the doc §5.2 pseudocode. Opens + /// auto-detected structuring flags SILENTLY (no event — §6.4). Never + /// reverts, never blocks: monitoring only. + function onTransfer(address from, address, uint256 amount) external override onlyEngine { + bytes32 key = _groupKey(from); + Window memory w = _window[key]; + + // Roll the window forward if the prior one has aged out (doc §5.4). + if (w.windowStart == 0 || block.timestamp - w.windowStart > structuringWindow) { + w.windowStart = uint64(block.timestamp); + w.total = 0; + w.count = 0; + } + w.total += amount; + w.count += 1; + + // [1] Amount alone is NOT suspicious (doc §7.2 Test 2: a large but + // ordinary trade is NO_FLAG). The only category computable purely + // on-chain is STRUCTURING_EVASION (a)(2)(ii): >= 2 sub-threshold + // pieces that AGGREGATE to >= $5,000 (>=, inclusive) within the + // window. A single >= $5,000 transfer is not structuring. + if (amount < SAR_THRESHOLD && w.count >= 2 && w.total >= SAR_THRESHOLD) { + _openFlag(from, SuspicionCategory.STRUCTURING_EVASION, false); + delete _window[key]; // reset so we do not re-flag every later transfer + return; + } + + _window[key] = w; + } + + // ----------------------------------------------------------------- + // Operator-attested detection (off-chain analytics seam, doc §5.5, §4.4) + // ----------------------------------------------------------------- + + /// @notice Opens a flag for an off-chain-detected suspicion (illicit-funds, + /// no-lawful-purpose, crime-facilitation, or an attempted/unsettled + /// transaction). This is the seam to the doc's off-chain engine + /// (doc §4.3, §5.5, §11.2): the machine surfaces the signal, the + /// Operator attests it here. + /// @param amount involved/aggregated USD notional (doc §7.3 boundary + /// is enforced: >= $5,000 opens; below returns 0). + /// @param suspectKnown whether a suspect is identified at initial + /// detection; if false the +30d extension is + /// available (doc §5.3, §1023.320(b)(3)). + /// @return flagId the opened flag id, or 0 if below the threshold. + function attestSuspicion( + address subject, + SuspicionCategory category, + uint256 amount, + bool attempted, + bool suspectKnown + ) external onlyOperator returns (uint256 flagId) { + if (category == SuspicionCategory.NONE) revert Errors.NotAuthorized(); + + // 31 CFR §1023.320(a)(2) "at least $5,000" — inclusive (doc §5.3, §7.3). + if (amount < SAR_THRESHOLD) return 0; + + flagId = _openFlag(subject, category, attempted); + Flag storage f = _flags[flagId]; + f.suspectIdentified = suspectKnown; + + // Operator transaction (uncorrelated to any trade) — safe to emit a + // subject-opaque lifecycle event (doc §6.4, §1023.320(e)(1)(ii)). + emit FlagLifecycle(flagId, FlagState.DETECTED, _reasonCode(category)); + } + + // ----------------------------------------------------------------- + // Flag lifecycle / escalation (doc §6.2, §6.3) — all operator-gated + // ----------------------------------------------------------------- + + /// @notice DETECTED -> UNDER_REVIEW (doc §6.2: enters the Operator queue). + function openReview(uint256 flagId) external onlyOperator { + Flag storage f = _flags[flagId]; + if (f.state != FlagState.DETECTED) revert Errors.NotAuthorized(); + f.state = FlagState.UNDER_REVIEW; + emit FlagLifecycle(flagId, FlagState.UNDER_REVIEW, _reasonCode(f.category)); + } + + /// @notice Extend to the +30d (max 60d) window when no suspect was + /// identified at initial detection (31 CFR §1023.320(b)(3), doc + /// §5.3). Callable once; may never exceed MAX_DEADLINE. + function extendDeadline(uint256 flagId) external onlyOperator { + Flag storage f = _flags[flagId]; + if (f.state != FlagState.DETECTED && f.state != FlagState.UNDER_REVIEW) revert Errors.NotAuthorized(); + if (f.suspectIdentified) revert Errors.NotAuthorized(); // extension only if suspect unknown + if (f.deadline != f.detectedAt + FILE_DEADLINE) revert Errors.NotAuthorized(); // already extended + f.deadline = f.detectedAt + MAX_DEADLINE; + emit DeadlineExtended(flagId, f.deadline); + } + + /// @notice Marks the suspect identified (closes the +30d extension path). + function identifySuspect(uint256 flagId) external onlyOperator { + _flags[flagId].suspectIdentified = true; + } + + /// @notice Human decision: suspicion confirmed -> SAR filed with FinCEN + /// (31 CFR §1023.320(a)(1), safe harbor §5318(g)(3)). Records the + /// filing time so timeliness against the deadline is auditable. + function fileSar(uint256 flagId) external onlyOperator { + Flag storage f = _flags[flagId]; + if (f.state != FlagState.DETECTED && f.state != FlagState.UNDER_REVIEW) revert Errors.NotAuthorized(); + f.state = FlagState.SAR_FILED; + f.filedAt = uint64(block.timestamp); + emit FlagLifecycle(flagId, FlagState.SAR_FILED, _reasonCode(f.category)); + } + + /// @notice Human decision: reasonable explanation found -> closed cleared + /// (§5318(g)(1); doc §6.2). + function clearFlag(uint256 flagId) external onlyOperator { + Flag storage f = _flags[flagId]; + if (f.state != FlagState.DETECTED && f.state != FlagState.UNDER_REVIEW) revert Errors.NotAuthorized(); + f.state = FlagState.CLEARED; + emit FlagLifecycle(flagId, FlagState.CLEARED, _reasonCode(f.category)); + } + + /// @notice Reportable but closed with no SAR under a §1023.320(c) exception + /// (e.g. robbery/theft already reported through another channel); + /// the basis must be recorded/retained off-chain (doc §6.2). + function closeNoAction(uint256 flagId) external onlyOperator { + Flag storage f = _flags[flagId]; + if (f.state != FlagState.DETECTED && f.state != FlagState.UNDER_REVIEW) revert Errors.NotAuthorized(); + f.state = FlagState.NO_ACTION; + emit FlagLifecycle(flagId, FlagState.NO_ACTION, _reasonCode(f.category)); + } + + // ----------------------------------------------------------------- + // CONFIDENTIAL views (doc §6.4) — onlyOperator; never party-facing + // ----------------------------------------------------------------- + + function flagCount() external view onlyOperator returns (uint256) { + return _flagSeq; + } + + /// @dev Full flag record incl. the subject — the tipping-off-sensitive data. + /// Gated so a trade party cannot read it (doc §6.4, §7.5). + function flagOf(uint256 flagId) external view onlyOperator returns (Flag memory) { + return _flags[flagId]; + } + + function reasonCodeOf(uint256 flagId) external view onlyOperator returns (bytes32) { + return _reasonCode(_flags[flagId].category); + } + + /// @dev True once SAR filed AND filed within the 30/60d window (<=, doc + /// §5.3). day-30 filing => timely; day-31 => late (BSA violation). + function filedOnTime(uint256 flagId) external view onlyOperator returns (bool) { + Flag memory f = _flags[flagId]; + return f.filedAt != 0 && f.filedAt <= f.deadline; + } + + /// @dev Escalation view (doc §6.3): an open flag past its deadline. Feeds + /// the internal Operator dashboard, never a party-facing surface. + function isOverdue(uint256 flagId) external view onlyOperator returns (bool) { + Flag memory f = _flags[flagId]; + bool open = f.state == FlagState.DETECTED || f.state == FlagState.UNDER_REVIEW; + return open && block.timestamp > f.deadline; + } + + // ----------------------------------------------------------------- + // internals + // ----------------------------------------------------------------- + + function _openFlag(address subject, SuspicionCategory category, bool attempted) internal returns (uint256 flagId) { + flagId = ++_flagSeq; + uint64 nowTs = uint64(block.timestamp); + _flags[flagId] = Flag({ + subject: subject, + category: category, + state: FlagState.DETECTED, + detectedAt: nowTs, // initial-detection clock starts now (doc §5.4) + deadline: nowTs + FILE_DEADLINE, // 30 calendar days (doc §5.3) + filedAt: 0, + suspectIdentified: true, // default; attestSuspicion may override + attempted: attempted + }); + } + + function _groupKey(address wallet) internal view returns (bytes32) { + bytes32 g = identityGroupOf[wallet]; + return g != bytes32(0) ? g : bytes32(uint256(uint160(wallet))); + } + + function _reasonCode(SuspicionCategory category) internal pure returns (bytes32) { + return ReasonCodes.encode(0, ELEMENT_ID, uint32(category)); + } +} diff --git a/src/compliance/elements/OperatorSelfDealing.sol b/src/compliance/elements/OperatorSelfDealing.sol new file mode 100644 index 0000000..1893621 --- /dev/null +++ b/src/compliance/elements/OperatorSelfDealing.sol @@ -0,0 +1,234 @@ +// SPDX-License-Identifier: GPL-3.0 +pragma solidity 0.8.17; + +import {BaseElement} from "./BaseElement.sol"; +import {Governed} from "../../auth/Governed.sol"; +import { + ElementMetadata, + ElementCategory, + TemporalNature, + Decidability, + ObligationTiming, + Statefulness, + ComplianceContext, + FlowType +} from "../../types/ComplianceTypes.sol"; +import {ReasonCodes} from "../../libraries/ReasonCodes.sol"; + +/// @dev F-01-v1 Operator self-dealing restriction (mock). STATELESS pre-trade +/// negative-screen gate: it blocks any trade in which the operator side +/// (Decipher legal entity, its Rule 405 affiliates, its associated persons, +/// or accounts they control) is a party. Same family as A-01 (Sanctions) — +/// an operator-maintained restricted roster compared with a strict block, +/// NOT an attestation/claim (doc §2 meta, §3.12, §8.2). +/// +/// Legal anchor (doc §3). F-01 is not a transcription of any one statute; +/// it is a prophylactic gate that removes the *factual predicate* of an +/// antifraud violation before trade. Unconditional roots: Exchange Act +/// §10(b) / Rule 10b-5(a),(c) and Securities Act §17(a) (antifraud, "any +/// person" — applies whether or not the operator is a registered +/// broker/ATS, doc §1.3, §3.1-§3.3). Conditional reinforcement once venue +/// status is fixed: Reg ATS Rule 301(b)(10)(i)(B) — "controlling employees +/// trading for their own accounts" — of which this on-chain full block is +/// the strongest possible implementation (doc §3.5), plus §15(c)(1) / +/// Rule 10b-3 if broker (doc §3.6). Restricted-set scope comes from Rule +/// 405 affiliate/control (doc §3.7). NOTE (doc §3.9, statutory anchor +/// exclusion): F-01 does NOT derive from ICA §17 — BUIDL-like interests are +/// excluded from the investment-company definition by §3(c)(7) and the +/// venue operator is not a §2(a)(3) affiliated person; never re-tag F-01 +/// as ICA_17. +/// +/// Roster model (doc §3.7, §3.12, §4.2). The roster is keyed by identity +/// and each entry carries a Rule-405 category tag. On-chain the doc's +/// judgment unit is the ONCHAINID (doc §3.12 "지갑이 아니라 사람"); this mock +/// keys the roster by wallet address as the on-chain proxy, because the +/// wallet->ONCHAINID resolution that defeats fresh-wallet evasion is A-04's +/// job upstream (doc §4.3, §7.5, §9.2). Roster completeness — the only +/// structural weakness (doc §5.4, §12 P0 reflection-window) — is the +/// operator/3-layer trust problem (doc §10), not something this element can +/// close by itself. +/// +/// Screening is symmetric: a restricted party on EITHER side (buyer/to or +/// seller/from) blocks the trade (doc §5.3 matrix, §3.2). The engine passes +/// `user == ctx.buyer` (to) and `counterparty == ctx.seller` (from), so the +/// roster screen runs on the two check() address params directly (as in +/// A-01); the decoded ComplianceContext is used ONLY for the exception +/// logic (flowType + initiator), never for party identity. +/// +/// Exceptions (doc §5.2 step 6, §6.3), evaluated only once a restricted +/// party is present, narrowly and explicitly (whitelist; ambiguity blocks): +/// (1) issuer primary distribution — flowType == PRIMARY_DISTRIBUTION AND +/// the from/seller is a Manifest-designated primary distributor +/// (`allowsPrimary`), modeling Manifest.allowsPrimary(idFrom, idTo); +/// a designated issuer that appears as a party in a SECONDARY trade is +/// NOT exempt and is blocked (doc §7.4 boundary note). +/// (2) involuntary transfer — forcedTransfer/recovery (lost-wallet, estate, +/// regulatory order). FlowType has no INVOLUNTARY member, so this maps +/// to `ctx.initiator` being a registered involuntary agent (the +/// multisig/time-lock recovery authority of doc §6.3② / §11.2), the +/// narrowest on-chain proxy for the "separate authority" path. +/// A restricted party in a plain secondary trade with no exception blocks. +/// +/// Fail-closed (doc §5.5, §8.3, §5.2 step 2). Uncertainty resolves to a +/// block, never a pass: an unresolvable (zero-address) party fails closed +/// (code 1, A-04 upstream seam), and until the operator marks the roster +/// loaded (`registryAvailable`, default false) every trade fails closed +/// (code 2). PASS returns bytes32(0) per the element convention; the doc's +/// OP_CLEAR / OP_EXEMPT_* distinction is which PASS branch was taken, and is +/// an internal-audit fact, not a surfaced reason code (doc §6.1, §6.4). +/// +/// Reason code map — `n` in `ReasonCodes.encode(0, ELEMENT_ID, n)` -> doc +/// §6.2 code name, in check() evaluation order: +/// 1 | IDENTITY_UNRESOLVED (from/to unresolvable — fail-closed; A-04 upstream) +/// 2 | OP_REGISTRY_UNAVAILABLE (roster not loaded — fail-safe; doc §5.5/§8.3) +/// 3 | OP_SELF_DEALING_BLOCKED (restricted party on either side, no exception) +/// PASS branches (reasonCode 0, doc §6.2 names, audit-only): +/// - OP_CLEAR neither party restricted (step 5) +/// - OP_EXEMPT_PRIMARY issuer primary distribution (step 6 ①) +/// - OP_EXEMPT_INVOLUNTARY forcedTransfer/recovery (step 6 ②) +contract OperatorSelfDealing is BaseElement, Governed { + bytes32 internal constant ELEMENT_ID = "F-01-v1"; + + /// @dev Restricted-roster category tags — Rule 405 affiliate/control scope and + /// §3(a)(18) associated persons (doc §3.7, §3.12). NONE (0) = not on the + /// roster. The block outcome is identical for every non-NONE tag; the tag + /// is carried for the internal audit record only (doc §6.4), never to vary + /// the pass/fail result. + enum OperatorRole { + NONE, // 0 = not a restricted party + OPERATOR_ENTITY, // Decipher legal entity itself + OPERATOR_AFFILIATE, // Rule 405 control affiliate (common control) + OPERATOR_ASSOCIATED_PERSON, // officer/director/employee (§3(a)(18)) + OPERATOR_CONTROLLED_ACCOUNT // account controlled by any of the above + } + + /// @dev abi.encode(ComplianceContext) length: 11 static head-only fields + /// (5 address, 2 uint256, 2 enum, 1 address, 1 bool) => 11 words => 352 + /// bytes, no dynamic tail. A context shorter than this cannot be decoded, + /// so it is caught before abi.decode (which would revert) and treated as a + /// plain secondary trade with no exception available — fail-closed. + uint256 internal constant CTX_ENCODED_LEN = 352; + + /// @notice ONCHAINID-proxy (wallet) => restricted-roster tag. `setRestrictedParty` + /// writes it; control judgment itself is settled off-chain by A-06 and + /// only its result lands here (doc §3.7, §5.5). + mapping(address => OperatorRole) public roleOf; + + /// @notice Fail-safe roster load switch. Default false => the roster is treated + /// as UNAVAILABLE and every trade fails closed (code 2) until the + /// operator confirms the on-chain roster is loaded (doc §5.2 step 2). + bool public registryAvailable; + + /// @notice Manifest-designated primary-distribution source (from/issuer). Gates + /// exception ① together with flowType == PRIMARY_DISTRIBUTION. + mapping(address => bool) public allowsPrimary; + + /// @notice Registered forcedTransfer/recovery authority (multisig/time-lock). + /// A trade whose `ctx.initiator` is such an agent is exception ②. + mapping(address => bool) public involuntaryAgent; + + event RestrictedPartySet(address indexed account, OperatorRole role); + event RegistryAvailabilitySet(bool available); + event PrimaryDistributorSet(address indexed distributor, bool allowed); + event InvoluntaryAgentSet(address indexed agent, bool authorized); + + constructor() + BaseElement(ElementMetadata({ + elementId: ELEMENT_ID, + // Organizationally R4 market-conduct monitoring (doc §2); functionally + // a global pre-trade gate like A-01 (doc §9.3). + category: ElementCategory.CONDUCT_MONITORING, + version: "F-01-v1", + temporal: TemporalNature.REALTIME, + decidability: Decidability.DETERMINISTIC, + timing: ObligationTiming.AT_TRADE_GATE, + statefulness: Statefulness.STATELESS + })) + {} + + /// @notice Adds/updates/removes a restricted-roster entry (set NONE to remove). + /// @dev Operational transaction, not a trade — the roster is read-only during + /// check() (doc §5.4 STATELESS basis). Controlled off-chain by governance + /// multisig/time-lock in production (doc §11.2). + function setRestrictedParty(address account, OperatorRole role) external onlyOperator { + roleOf[account] = role; + emit RestrictedPartySet(account, role); + } + + /// @notice Marks the on-chain roster loaded/unloaded (fail-safe switch). + function setRegistryAvailable(bool available) external onlyOperator { + registryAvailable = available; + emit RegistryAvailabilitySet(available); + } + + /// @notice Designates (or clears) a Manifest primary-distribution source. + function setPrimaryDistributor(address distributor, bool allowed) external onlyOperator { + allowsPrimary[distributor] = allowed; + emit PrimaryDistributorSet(distributor, allowed); + } + + /// @notice Registers (or clears) a forcedTransfer/recovery authority. + function setInvoluntaryAgent(address agent, bool authorized) external onlyOperator { + involuntaryAgent[agent] = authorized; + emit InvoluntaryAgentSet(agent, authorized); + } + + /// @dev doc §5.2 order. `asset`/`amount` are unused — F-01 is party-scoped and + /// never looks at eligibility or amount. `user` == ctx.buyer (to), + /// `counterparty` == ctx.seller (from). + function check(address user, address counterparty, address, uint256, bytes calldata context) + external + view + override + returns (bool passed, bytes32 reasonCode) + { + // step 1 — identity resolution. In production A-04 resolves wallet->ONCHAINID + // and rejects unlinked wallets upstream (doc §4.3, §7.5); the mock's + // only observable proxy for an unresolvable party is the zero + // address, screened fail-closed here. + if (user == address(0) || counterparty == address(0)) { + return (false, _code(1)); // IDENTITY_UNRESOLVED + } + + // step 2 — roster load (fail-safe; doc §5.5, §8.3). + if (!registryAvailable) { + return (false, _code(2)); // OP_REGISTRY_UNAVAILABLE + } + + // step 3~5 — symmetric roster screen (both sides; doc §5.3 matrix). + bool fromRestricted = roleOf[counterparty] != OperatorRole.NONE; // seller / from + bool toRestricted = roleOf[user] != OperatorRole.NONE; // buyer / to + if (!fromRestricted && !toRestricted) { + return (true, bytes32(0)); // OP_CLEAR + } + + // step 6 — exception evaluation (a restricted party is present). Decode the + // context only now; a short/absent context => no exception, block. + FlowType flow = FlowType.SECONDARY_TRADE; + address initiator = address(0); + if (context.length >= CTX_ENCODED_LEN) { + ComplianceContext memory ctx = abi.decode(context, (ComplianceContext)); + flow = ctx.flowType; + initiator = ctx.initiator; + } + + // ① issuer primary distribution — narrow: from/issuer must be a designated + // primary distributor AND the flow must be PRIMARY_DISTRIBUTION. + if (flow == FlowType.PRIMARY_DISTRIBUTION && allowsPrimary[counterparty]) { + return (true, bytes32(0)); // OP_EXEMPT_PRIMARY + } + + // ② involuntary — forcedTransfer/recovery initiated by a registered agent. + if (involuntaryAgent[initiator]) { + return (true, bytes32(0)); // OP_EXEMPT_INVOLUNTARY + } + + // no exception => block (doc §5.3). + return (false, _code(3)); // OP_SELF_DEALING_BLOCKED + } + + /// @dev recipeId 0 is a placeholder; the engine re-encodes with the real recipeId. + function _code(uint32 n) private pure returns (bytes32) { + return ReasonCodes.encode(0, ELEMENT_ID, n); + } +} diff --git a/src/compliance/elements/RedFlagKnowledgeBar.sol b/src/compliance/elements/RedFlagKnowledgeBar.sol new file mode 100644 index 0000000..c1af92e --- /dev/null +++ b/src/compliance/elements/RedFlagKnowledgeBar.sol @@ -0,0 +1,289 @@ +// SPDX-License-Identifier: GPL-3.0 +pragma solidity 0.8.17; + +import {BaseElement} from "./BaseElement.sol"; +import {Governed} from "../../auth/Governed.sol"; +import { + ElementMetadata, + ElementCategory, + TemporalNature, + Decidability, + ObligationTiming, + Statefulness +} from "../../types/ComplianceTypes.sol"; +import {ReasonCodes} from "../../libraries/ReasonCodes.sol"; +import {Events} from "../../libraries/Events.sol"; + +/// @dev A-12-v1 Red Flag Knowledge Bar (모름 항변 차단, willful-blindness blocker, +/// mock). Pattern C — a monitoring element that MARKS (표시) and never +/// BLOCKS. It screens a single pre-trade for objective red flags that would +/// defeat a later "we didn't know" defense, and routes any hit to the +/// operator review queue with an on-chain audit-trail event. It does NOT +/// adjudicate legality: whether a marked signal is an actual underwriter +/// conduit / wash sale / structuring is a scienter/intent question left to +/// humans (doc §5.5, §8.2). +/// +/// BASE CHOICE (doc §2 meta box: Stateful? == STATELESS). A-12's trade-time +/// judgment reads only per-transaction facts; it does NOT accumulate a +/// cross-trade counter — time-series wash/spoofing accrual is F-02/F-03's +/// job (doc §3.10 note, §5.4, §9.6). So A-12 extends BaseElement (STATELESS, +/// no `onTransfer` write path), NOT BaseStatefulElement. This deliberately +/// DIVERGES from F-02 (SurveillanceFlag), which is STATEFUL/post-trade +/// (EX_POST_TRIGGER) precisely because it accrues; A-12 is pre-trade +/// (AT_TRADE_GATE). Operator/off-chain attestation of the screen result is +/// held in element state (a stateless per-tx read, same shape as A-11 +/// ClaimFreshness), gated by Governed's onlyOperator — there is no +/// engine-driven state write, hence no onlyEngine gate. +/// +/// BLOCKING SEMANTICS (doc §5.5, §6, meta box "출력: {CLEAR, FLAG, REVIEW} — +/// BLOCK 없음"). `check()` ALWAYS returns (true, bytes32(0)) — A-12 alone +/// never rejects a trade, and never leaks a red-flag detail in the +/// party-facing reason code (message separation, doc §6.4: parties see only +/// a neutral "under further review"). The CLEAR/FLAG/REVIEW disposition and +/// the specific flag mask are surfaced OUT-OF-BAND via `screen()` / +/// `dispositionOf()` / `routesToReview()` and the on-chain SurveillanceFlag +/// events (the internal record + audit trail). Whether a flagged trade +/// proceeds or is suspended is a Recipe/operator decision, not A-12's. +/// +/// DISPOSITION VALUES (doc §6.1). CLEAR = no red flag. FLAG = one or more +/// *categorized* red flags → operator queue. REVIEW = present-but-not- +/// cleanly-categorizable (REVIEW_REDFLAG_UNCERTAIN) → operator queue direct. +/// Doc §5.2 pseudocode and the §7 prose use "disposition = REVIEW" loosely +/// to mean "routed to the operator review queue"; both FLAG and REVIEW route +/// there, which `routesToReview()` captures. A false-positive resolution +/// (doc §7.5) normalizes the disposition to CLEAR while RETAINING the raw +/// flag mask for the audit trail (the objective signal was still real). +/// +/// MOCK BOUNDARY (doc §4, §8.2, §10, §11). In production the seven-category +/// screen is computed by off-chain surveillance/analytics (cross-referencing +/// A-06 affiliate status, A-03/A-13 claims, A-04 owner clusters, C-08/D-01 +/// thresholds, and an NAV oracle — doc §4.2) which drives the flag raise; +/// here an operator attests the screen result via `raiseFlag`. Activation +/// gating — resale-axis flags presuppose R2 + affiliate seller, market-axis +/// flags presuppose R4 (doc §5.2 step 1, §9.3) — is likewise an off-chain +/// screening concern in this mock: A-12 records whatever the attesting +/// surveillance layer deems applicable. A-12 never (re)judges affiliate +/// status, AI/QP eligibility, or cluster membership — those belong to A-06 / +/// A-03·A-13 / A-04 (doc §9.6); it only marks facts that contradict/monitor +/// them. +/// +/// Reason code map — `n` in `ReasonCodes.encode(0, ELEMENT_ID, n)` -> doc +/// §6.2 code name, in doc §5.2 evaluation order (bit i == RedFlag(i) == +/// code i+1). Every code is a MARK, never a block: +/// 1 | FLAG_RESALE_INTENT RESALE §2(a)(11)·§4(d)(7)·Rule 502(d)(1) +/// 2 | FLAG_CONTROL_UNDISCLOSED RESALE §4(d)(3)(K)·§2(a)(11) +/// 3 | FLAG_AI_INCONSISTENT RESALE §4(d)(1)·§201(a)·Rule 506(c) +/// 4 | FLAG_WASH_CLUSTER MARKET_CONDUCT §17(a)(3)·Rule 10b-5(c)·§9(a) +/// 5 | FLAG_STRUCTURING MARKET_CONDUCT §17(a)(3)·Rule 10b-5(c) +/// 6 | FLAG_PRICE_ANOMALY MARKET_CONDUCT §17(a)·Rule 10b-5·§9(a) +/// 7 | FLAG_SUSPICIOUS_PATTERN MARKET_CONDUCT §17(a)(3)·Rule 10b-5(c) +/// 8 | REVIEW_REDFLAG_UNCERTAIN common ambiguous/composite → operator queue +contract RedFlagKnowledgeBar is BaseElement, Governed { + bytes32 internal constant ELEMENT_ID = "A-12-v1"; + + /// @dev Reason code carried when the operator marks the screen ambiguous / + /// composite (doc §6.2 REVIEW_REDFLAG_UNCERTAIN). Not a RedFlag bit — it + /// is a disposition marker, held in `Assessment.uncertain`. + uint32 internal constant REVIEW_UNCERTAIN_CODE = 8; + + /// @dev The two legal axes A-12 straddles (doc §1.3, §3.11 "redFlag.axis"). + /// RESALE = underwriter/conduit safe-harbor axis (R2). MARKET_CONDUCT = + /// antifraud/manipulation axis (R4). + enum Axis { + RESALE, + MARKET_CONDUCT + } + + /// @dev The seven objective red-flag categories (doc §3.10 매트릭스, §6.2), in + /// doc §5.2 evaluation order. RedFlag(i) -> reason code (i + 1). Indices + /// 0..2 are the RESALE axis; 3..6 are the MARKET_CONDUCT axis. + enum RedFlag { + RESALE_INTENT, // 0 -> code 1 — conduit / resale-for-others + CONTROL_UNDISCLOSED, // 1 -> code 2 — (d)(3)(K) cert absent/contradicted + AI_INCONSISTENT, // 2 -> code 3 — eligibility claim vs trade-time facts + WASH_CLUSTER, // 3 -> code 4 — both parties in one owner cluster + STRUCTURING, // 4 -> code 5 — threshold-adjacent order splitting + PRICE_ANOMALY, // 5 -> code 6 — execution price deviates from NAV + SUSPICIOUS_PATTERN // 6 -> code 7 — other objective manipulation signal + } + + /// @dev Operator triage outcome (doc §6.3 step 5). Only CLEARED_FALSE_POSITIVE + /// normalizes the disposition back to CLEAR (doc §7.5). RISK_CONFIRMED and + /// BOUNDARY_ESCALATED are recorded but do NOT change A-12's output — A-12 + /// never blocks, so any suspend/SAR is a Recipe/operator action outside + /// this element (doc §5.5, §6.1). + enum Resolution { + PENDING, // 0 = not yet triaged (default) + CLEARED_FALSE_POSITIVE, // 해소 → disposition CLEAR (raw mask retained) + RISK_CONFIRMED, // 위험 확인 → suspend/SAR handled off-element + BOUNDARY_ESCALATED // 경계 → lawyer escalate; stays under review + } + + /// @dev The party-facing outcome type (doc §6.1). See the header note on how + /// FLAG vs REVIEW both route to the operator queue. + enum Disposition { + CLEAR, + FLAG, + REVIEW + } + + /// @dev Per-transaction screen record, keyed [seller][buyer]. The pair is the + /// unit A-12 screens (doc §4.2, §5.2): resale flags concern the affiliate + /// seller, wash-cluster concerns both sides. `flagMask` is the raw union + /// of raised categories and is kept even after a false-positive clear so + /// the audit trail shows "we saw it and a human cleared it" (doc §7.5). + struct Assessment { + uint8 flagMask; // bit i set == RedFlag(i) raised + bool uncertain; // REVIEW_REDFLAG_UNCERTAIN marked + Resolution resolution; // operator triage outcome + } + + /// @notice seller => buyer => attested red-flag screen result. + mapping(address => mapping(address => Assessment)) internal _assessment; + + /// @notice Operator resolution of a prior marking (doc §6.3). CLEARED_FALSE_ + /// POSITIVE also emitted via Disposition normalization in `screen`. + event ReviewResolved(address indexed seller, address indexed buyer, Resolution resolution); + + constructor() + BaseElement(ElementMetadata({ + elementId: ELEMENT_ID, + // Pattern C surveillance (doc §2 검증 패턴 C, §8.1). The doc's "도메인" + // is A (identity/eligibility), but the on-chain ElementCategory + // reflects the verification pattern — monitoring, like F-02. + category: ElementCategory.CONDUCT_MONITORING, + version: "A-12-v1", + temporal: TemporalNature.REALTIME, // per-trade, not accrued (doc §5.4) + decidability: Decidability.MONITORING_BASED, // Pattern C — human judges legality + timing: ObligationTiming.AT_TRADE_GATE, // pre-trade screen (doc §2 Timing) + statefulness: Statefulness.STATELESS // doc §2 meta box (accrual is F-02/F-03) + })) + {} + + // ----------------------------------------------------------------- + // Operator write path (doc §6.3, §7.5). All onlyOperator. In production + // these calls are driven by the off-chain surveillance layer, not a human + // typing them (doc §8.2, §11). + // ----------------------------------------------------------------- + + /// @notice Marks a categorized red flag on the (seller, buyer) trade and + /// records it on-chain as the reasonable-inquiry audit trail (doc + /// §1.4, §6.2). Idempotent per category (bit OR). A fresh mark + /// reopens triage (resolution -> PENDING). + /// @dev Emits Events.SurveillanceFlag with subject == seller (the resale / + /// market-conduct subject; same convention as F-02's `from`). The buyer + /// side of the pair lives in the queryable `_assessment` record. + function raiseFlag(address seller, address buyer, RedFlag flag) external onlyOperator { + Assessment storage a = _assessment[seller][buyer]; + a.flagMask |= uint8(1) << uint8(flag); + a.resolution = Resolution.PENDING; + emit Events.SurveillanceFlag(ELEMENT_ID, seller, _code(uint32(flag) + 1)); + } + + /// @notice Marks the screen ambiguous/composite → REVIEW_REDFLAG_UNCERTAIN + /// (doc §6.2, §11.4): route straight to the operator queue without a + /// clean category. Reopens triage. + function markUncertain(address seller, address buyer) external onlyOperator { + Assessment storage a = _assessment[seller][buyer]; + a.uncertain = true; + a.resolution = Resolution.PENDING; + emit Events.SurveillanceFlag(ELEMENT_ID, seller, _code(REVIEW_UNCERTAIN_CODE)); + } + + /// @notice Records the operator's triage outcome for a prior marking (doc + /// §6.3 step 5). CLEARED_FALSE_POSITIVE normalizes the disposition to + /// CLEAR (doc §7.5) while keeping the raw flag mask for audit; other + /// outcomes are recorded without changing A-12's output (A-12 never + /// blocks — suspend/SAR is handled elsewhere). + function resolveReview(address seller, address buyer, Resolution resolution) external onlyOperator { + _assessment[seller][buyer].resolution = resolution; + emit ReviewResolved(seller, buyer, resolution); + } + + // ----------------------------------------------------------------- + // Trade-gate entry (party-facing) — NEVER blocks, NEVER leaks (doc §5.5, §6.4). + // ----------------------------------------------------------------- + + /// @dev A-12 marks, it does not gate: `check` unconditionally passes with a + /// neutral reason code. The disposition/flags are read out-of-band via + /// `screen`. All params ignored — the party-facing surface carries no + /// red-flag detail (message separation, doc §6.4). + function check(address, address, address, uint256, bytes calldata) + external + pure + override + returns (bool passed, bytes32 reasonCode) + { + return (true, bytes32(0)); + } + + // ----------------------------------------------------------------- + // Screen read-out (internal record / operator + Recipe consumption). + // ----------------------------------------------------------------- + + /// @notice The A-12 disposition and raw flag mask for a (seller, buyer) trade + /// (doc §5.2 step 4, §6.1). `flagMask` is always the raw union of + /// raised categories, even when the disposition has been normalized to + /// CLEAR by a false-positive resolution (doc §7.5 audit retention). + function screen(address seller, address buyer) public view returns (Disposition disposition, uint8 flagMask) { + Assessment storage a = _assessment[seller][buyer]; + flagMask = a.flagMask; + if (a.resolution == Resolution.CLEARED_FALSE_POSITIVE) { + return (Disposition.CLEAR, flagMask); // operator normalized (doc §7.5) + } + if (a.uncertain) { + return (Disposition.REVIEW, flagMask); // REVIEW_REDFLAG_UNCERTAIN (doc §6.2) + } + if (flagMask != 0) { + return (Disposition.FLAG, flagMask); // categorized → operator queue (doc §6.1) + } + return (Disposition.CLEAR, flagMask); + } + + /// @notice The disposition only. + function dispositionOf(address seller, address buyer) external view returns (Disposition disposition) { + (disposition,) = screen(seller, buyer); + } + + /// @notice True when the trade routes to the operator review queue — i.e. the + /// disposition is FLAG or REVIEW (doc §6.3). This is the operational + /// sense of doc §5.2/§7's "disposition = REVIEW". + function routesToReview(address seller, address buyer) external view returns (bool) { + (Disposition disposition,) = screen(seller, buyer); + return disposition != Disposition.CLEAR; + } + + /// @notice Raw stored record (raw mask + uncertain marker + triage outcome), + /// independent of disposition normalization — the full internal-audit + /// view (doc §6.4). + function assessmentOf(address seller, address buyer) + external + view + returns (uint8 flagMask, bool uncertain, Resolution resolution) + { + Assessment storage a = _assessment[seller][buyer]; + return (a.flagMask, a.uncertain, a.resolution); + } + + /// @notice The audit reason code for a category (doc §6.2), for off-chain + /// (recipeId, elementId, code) recomputation/matching (ReasonCodes note). + function reasonCodeFor(RedFlag flag) external pure returns (bytes32) { + return _code(uint32(flag) + 1); + } + + /// @notice The audit reason code for REVIEW_REDFLAG_UNCERTAIN (doc §6.2). + function reviewUncertainCode() external pure returns (bytes32) { + return _code(REVIEW_UNCERTAIN_CODE); + } + + /// @notice The legal axis of a category (doc §3.11): 0..2 RESALE, 3..6 MARKET. + function axisOf(RedFlag flag) external pure returns (Axis) { + return uint8(flag) <= uint8(RedFlag.AI_INCONSISTENT) ? Axis.RESALE : Axis.MARKET_CONDUCT; + } + + /// @dev recipeId 0 is a placeholder; off-chain audit re-encodes with the real + /// contributing recipeId (ReasonCodes M4 propagation note). + function _code(uint32 n) private pure returns (bytes32) { + return ReasonCodes.encode(0, ELEMENT_ID, n); + } +} diff --git a/src/compliance/elements/RegMIssuerBuying.sol b/src/compliance/elements/RegMIssuerBuying.sol new file mode 100644 index 0000000..78413bf --- /dev/null +++ b/src/compliance/elements/RegMIssuerBuying.sol @@ -0,0 +1,348 @@ +// SPDX-License-Identifier: GPL-3.0 +pragma solidity 0.8.17; + +import {BaseElement} from "./BaseElement.sol"; +import {Governed} from "../../auth/Governed.sol"; +import { + ElementMetadata, + ElementCategory, + TemporalNature, + Decidability, + ObligationTiming, + Statefulness, + ComplianceContext, + FlowType +} from "../../types/ComplianceTypes.sol"; +import {ReasonCodes} from "../../libraries/ReasonCodes.sol"; + +/// @dev F-04-v1 Reg M "no-purchase-during-distribution" gate (mock). +/// +/// Legal anchor: Securities Exchange Act §9(a)·§10(b) + Regulation M +/// (17 C.F.R. §242.100-.102·.104). During a distribution's restricted +/// period, §242.102(a) makes it UNLAWFUL for the issuer / selling security +/// holder / their affiliated purchaser, and §242.101(a) for a distribution +/// participant / their affiliated purchaser, to "bid for, purchase, or +/// attempt to induce any person to bid for or purchase" a covered security. +/// Reg M strips the §9(a)(2) *purpose/intent* element (doc §1.1, §3.0.1), so +/// the prohibition is a bright line decidable from three OBJECTIVE +/// coordinates — time (restricted period) × direction (BUY of the covered +/// security) × person (restricted-set membership). That is why F-04 is a +/// strict-liability GATE (Pattern A), the closest structural relative of +/// A-01 Sanctions (doc §8.2): a roster gate, not a signed-claim element. +/// +/// F-04 is NOT an anti-fraud safe harbor: a PASS here only means "not caught +/// by the Reg M bright line". §9/§10(b)/§17(a) liability and post-trade +/// surveillance (F-02) run in parallel (doc §3.1, §9.1). +/// +/// ── Two statutory branches (doc §1.2, §3.8-3.9, §5.2 G⑥) ────────────── +/// The buyer's roster role routes the block to a distinct statute + code: +/// ISSUER / SELLING_SECURITY_HOLDER / AFFILIATED_PURCHASER -> §242.102(a) +/// -> code 4 RESTRICTED_PERIOD_PURCHASE_BLOCKED_ISSUER +/// DISTRIBUTION_PARTICIPANT -> §242.101(a) +/// -> code 5 RESTRICTED_PERIOD_PURCHASE_BLOCKED_PARTICIPANT +/// Same outcome (revert), distinct basis recorded (doc §3.9, §6.1). +/// +/// ── Direction rule (doc §5.3, §242.102(b)(5)) ─────────────────────────── +/// Only the BUY side is gated. The engine hands us `user = ctx.buyer` +/// (ComplianceEngine._runChecks passes abi.encode(ComplianceContext) and +/// ctx.buyer as `user`), so this element screens the BUYER only. A roster +/// member who is SELLING is the counterparty, never `user`, and therefore +/// PASSes here (§242.102(b)(5) expressly excepts offers to sell). Selling +/// is Reg M-irrelevant because it does not prop up the price. +/// +/// ── Continuous offering (doc §1.3, §3.4) ──────────────────────────────── +/// BUIDL is a continuous offering: the restricted period never closes, so +/// the gate stays on for the asset's whole life. offeringStatus == COMPLETED +/// is the only off switch, and continuous assets never reach it. +/// +/// ── Redemption separation (doc §1.4, §3.10, §5.4, §6.3) ───────────────── +/// §242.102(b)(2)(ii)/(3) except NAV redemptions by closed-end funds / LPs +/// PROVIDED the security is not traded on an exchange / IDQS / ECN. BUIDL +/// routes USD/USDC redemptions through a separate operator-controlled, +/// off-venue channel — not the DEX buy path — so F-04 structurally does not +/// participate. If a FlowType.REDEMPTION context nonetheless reaches this +/// gate, it is PASSed explicitly (F-04 does not gate redemptions). +/// +/// ── No reverse relaxation / fail-closed (doc §5.5) ────────────────────── +/// A covered asset with no offeringStatus declared HALTS (code 2), never +/// "presumed not in distribution". A declared excepted-security profile does +/// NOT silently switch the gate off (BUIDL-like §3(c)(7) private funds +/// qualify for none of §242.102(d)/§242.101(c); doc §3.11-3.12): it is +/// surfaced for review (code 1). Exceptions only ever NARROW. +/// +/// ── A-06 boundary (doc §9.1 ★) ────────────────────────────────────────── +/// Reg M "affiliated purchaser" (acquisition in concert / purchase control / +/// discretionary trading) is NOT Rule 144 "affiliate" (issuer control). This +/// element does NOT consult A-06; the restricted-person roster is its own +/// operator-attested list. +/// +/// STATELESS (doc §8.4): the roster and card facts change only through +/// out-of-band operator/governance writes; the per-trade gate only reads. +/// +/// Reason-code map — `n` in `ReasonCodes.encode(0, ELEMENT_ID, n)` -> doc +/// §2.3/§6.1 code name, in `check` evaluation order: +/// 1 | REVIEW_REGM_EXCEPTION_CONFLICT (REVIEW — V2, §3.11-3.12/§6.1) +/// 2 | REG_M_OFFERING_STATUS_MISSING (FAIL — fail-closed, §4.2/§5.5) +/// 3 | REG_M_RESTRICTED_SET_UNVERIFIED (REVIEW — roster red flag, §5.5) +/// 4 | RESTRICTED_PERIOD_PURCHASE_BLOCKED_ISSUER (FAIL — §242.102(a), issuer branch) +/// 5 | RESTRICTED_PERIOD_PURCHASE_BLOCKED_PARTICIPANT (FAIL — §242.101(a), participant branch) +/// PASS paths carry no code (bytes32(0), doc §6.2): NOT_APPLICABLE, +/// NOT_IN_DISTRIBUTION, REDEMPTION_OUT_OF_GATE, NON_RESTRICTED_BUYER, +/// EXCEPTION_APPLIED. +contract RegMIssuerBuying is BaseElement, Governed { + bytes32 internal constant ELEMENT_ID = "F-04-v1"; + + /// @dev Per-asset offering lifecycle (doc §3.4, table B). UNSET = 0 is the + /// fail-closed default for a covered asset (no declaration => code 2). + /// Continuous offerings (BUIDL) are sealed ONGOING_CONTINUOUS and never + /// reach COMPLETED (doc §1.3, §11.2). + enum OfferingStatus { + UNSET, + ONGOING_CONTINUOUS, + ONGOING_TRANCHE, + COMPLETED + } + + /// @dev Excepted-security declaration (doc §3.11-3.12, table B). Only NONE is + /// coherent for a BUIDL-like §3(c)(7) private fund; any non-NONE value is + /// a mis-declaration surfaced for review (code 1), NEVER an auto off-switch. + enum ExceptionProfile { + NONE, + ACTIVELY_TRADED, + OPEN_END_UIT, + EXEMPTED_3A12, + NONCONV_ABS + } + + /// @dev Restricted-person role (doc §3.5-3.7, §4.3). NONE = 0 = not on roster. + /// The role selects the statutory branch in `check` (doc §5.2 G⑥). + enum RestrictedRole { + NONE, + ISSUER, + SELLING_SECURITY_HOLDER, + AFFILIATED_PURCHASER, + DISTRIBUTION_PARTICIPANT + } + + /// @dev §242.101(b)(7) de minimis threshold — STATUTORY 2% of ADTV, in bps. + /// Participant branch ONLY; the issuer branch (§242.102) has no de minimis + /// (doc §3.12 asymmetry, T9). STRICT `<` ("total less than 2%"). + uint16 internal constant DE_MINIMIS_BPS = 200; + uint256 internal constant BPS_DENOMINATOR = 10_000; + + /// @dev Length of abi.encode(ComplianceContext): 11 static words => 352 bytes + /// (doc reference: ComplianceEngine._runChecks, EngineSelection). A shorter + /// context cannot be decoded, so the redemption relaxation is skipped + /// (fail-closed direction — never grant a PASS we cannot verify). + uint256 internal constant CTX_ENCODED_LEN = 352; + + /// @notice asset => is this token a covered security under F-04 (doc §3.3 G③)? + /// false (default) => F-04 not applicable => PASS. Also short-circuits + /// unconfigured assets so code 2 only fires for assets an operator has + /// affirmatively placed under F-04. + mapping(address => bool) public coveredSecurityOf; + + /// @notice asset => restricted-period lifecycle declaration (doc §3.4 G①). + mapping(address => OfferingStatus) public offeringStatusOf; + + /// @notice asset => excepted-security declaration (doc §3.11-3.12 V2). + mapping(address => ExceptionProfile) public exceptionProfileOf; + + /// @notice asset => unresolved roster red flag (doc §5.5 F04-V3) => REVIEW. + mapping(address => bool) public registryUnverifiedOf; + + /// @notice asset => ADTV governance constant, de minimis 2% denominator + /// (doc §3.12, table B). 0 => de minimis undefined => no exception. + mapping(address => uint256) public adtvOf; + + /// @notice asset => account => DIRECT restricted-person roster role (doc §4.3). + mapping(address => mapping(address => RestrictedRole)) public restrictedRoleOf; + + /// @notice asset => account => INDIRECT role via control cluster ("directly or + /// indirectly", §242.102(a); doc §3.8, §5.4). Catches third-party-wallet + /// circumvention when the direct roster role is NONE. + mapping(address => mapping(address => RestrictedRole)) public clusterRoleOf; + + /// @notice asset => account => §242.102/§242.100(b) affiliated-purchaser (3) + /// safe harbor satisfied (information barrier + annual independent + /// assessment; doc §3.7). A certified affiliate is NOT an affiliated + /// purchaser — it is dropped from restricted status at check time. + mapping(address => mapping(address => bool)) public infoBarrierCertifiedOf; + + /// @notice asset => account => written §242.101 policies/procedures maintained, + /// a precondition of the participant de minimis exception (doc §3.12). + mapping(address => mapping(address => bool)) public policiesCertifiedOf; + + event CoveredSecuritySet(address indexed asset, bool covered); + event OfferingStatusSet(address indexed asset, OfferingStatus status); + event ExceptionProfileSet(address indexed asset, ExceptionProfile profile); + event RegistryUnverifiedSet(address indexed asset, bool unverified); + event AdtvSet(address indexed asset, uint256 adtv); + event RestrictedRoleSet(address indexed asset, address indexed account, RestrictedRole role); + event ClusterRoleSet(address indexed asset, address indexed account, RestrictedRole role); + event InfoBarrierCertifiedSet(address indexed asset, address indexed account, bool certified); + event PoliciesCertifiedSet(address indexed asset, address indexed account, bool certified); + + constructor() + BaseElement(ElementMetadata({ + elementId: ELEMENT_ID, + category: ElementCategory.CONDUCT_MONITORING, + version: "F-04-v1", + temporal: TemporalNature.REALTIME, + decidability: Decidability.DETERMINISTIC, + timing: ObligationTiming.AT_TRADE_GATE, + statefulness: Statefulness.STATELESS + })) + {} + + /// @notice Place / remove `asset` under F-04 as a covered security (doc §3.3). + function setCoveredSecurity(address asset, bool covered) external onlyOperator { + coveredSecurityOf[asset] = covered; + emit CoveredSecuritySet(asset, covered); + } + + /// @notice Declare `asset`'s restricted-period lifecycle status (doc §3.4). + function setOfferingStatus(address asset, OfferingStatus status) external onlyOperator { + offeringStatusOf[asset] = status; + emit OfferingStatusSet(asset, status); + } + + /// @notice Declare `asset`'s excepted-security profile (doc §3.11-3.12). + function setExceptionProfile(address asset, ExceptionProfile profile) external onlyOperator { + exceptionProfileOf[asset] = profile; + emit ExceptionProfileSet(asset, profile); + } + + /// @notice Flag / clear an unresolved roster red flag for `asset` (doc §5.5). + function setRegistryUnverified(address asset, bool unverified) external onlyOperator { + registryUnverifiedOf[asset] = unverified; + emit RegistryUnverifiedSet(asset, unverified); + } + + /// @notice Set `asset`'s ADTV governance constant (de minimis denominator). + function setAdtv(address asset, uint256 adtv) external onlyOperator { + adtvOf[asset] = adtv; + emit AdtvSet(asset, adtv); + } + + /// @notice Register / clear a DIRECT restricted-person role (doc §4.3, §11.1). + /// The Reg M affiliated-purchaser judgment is the operator's own — it + /// must NOT be copied from A-06's Rule 144 affiliate output (doc §9.1). + function setRestrictedRole(address asset, address account, RestrictedRole role) external onlyOperator { + restrictedRoleOf[asset][account] = role; + emit RestrictedRoleSet(asset, account, role); + } + + /// @notice Register / clear an INDIRECT (control-cluster) role for `account`, + /// capturing "directly or indirectly" circumvention (doc §3.8, §5.4). + function setClusterRole(address asset, address account, RestrictedRole role) external onlyOperator { + clusterRoleOf[asset][account] = role; + emit ClusterRoleSet(asset, account, role); + } + + /// @notice Record the affiliated-purchaser (3) safe-harbor certification for + /// `account` (doc §3.7). When set, an affiliated-purchaser role is + /// dropped from restricted status (annual freshness is an operator + /// concern, doc §4.5/§11.4). + function setInfoBarrierCertified(address asset, address account, bool certified) external onlyOperator { + infoBarrierCertifiedOf[asset][account] = certified; + emit InfoBarrierCertifiedSet(asset, account, certified); + } + + /// @notice Record §242.101 written-policies certification for `account`, a + /// precondition of the participant de minimis exception (doc §3.12). + function setPoliciesCertified(address asset, address account, bool certified) external onlyOperator { + policiesCertifiedOf[asset][account] = certified; + emit PoliciesCertifiedSet(asset, account, certified); + } + + /// @dev Per-trade gate in doc §5.2 order; first hit wins. `user` IS the buyer + /// (engine passes ctx.buyer); `counterparty` (the seller) is deliberately + /// NOT screened (direction rule, §5.3). `context` is decoded only to read + /// FlowType for the redemption relaxation. + function check(address user, address, address asset, uint256 amount, bytes calldata context) + external + view + override + returns (bool passed, bytes32 reasonCode) + { + // G③ applicability (§3.3). A token that is not the covered security is out + // of F-04's scope: PASS (NOT_APPLICABLE). Every unconfigured asset + // short-circuits here, so code 2 below only fires for a covered asset. + if (!coveredSecurityOf[asset]) return (true, bytes32(0)); + + // V2 excepted-security integrity (§3.11-3.12, §5.5). A non-NONE profile on + // a BUIDL-like asset is a mis-declaration; it is NEVER honored as an + // auto off-switch (reverse relaxation is forbidden) — surface for review. + if (exceptionProfileOf[asset] != ExceptionProfile.NONE) return (false, _code(1)); + + // Fail-closed (§4.2, §5.5): a covered asset with no offeringStatus is + // un-adjudicable. HALT — do not optimistically assume "not distributing". + OfferingStatus st = offeringStatusOf[asset]; + if (st == OfferingStatus.UNSET) return (false, _code(2)); + + // G① restricted period active? (§3.4). COMPLETED closes the window: PASS + // (NOT_IN_DISTRIBUTION). Continuous offerings never reach COMPLETED. + if (st == OfferingStatus.COMPLETED) return (true, bytes32(0)); + + // Redemption is structurally outside this gate (§3.10, §5.4, §6.3). If a + // REDEMPTION flow reaches F-04, PASS it explicitly. Decoded only for + // FlowType; a short/undecodable context skips the relaxation. + if (context.length >= CTX_ENCODED_LEN) { + ComplianceContext memory ctx = abi.decode(context, (ComplianceContext)); + if (ctx.flowType == FlowType.REDEMPTION) return (true, bytes32(0)); + } + + // Roster red flag (§5.5, F04-V3): cannot trust a "not restricted" verdict + // over an unresolved set. REVIEW rather than PASS. + if (registryUnverifiedOf[asset]) return (false, _code(3)); + + // G④ subject — screen the BUYER (§5.3). Direct roster OR indirect control + // cluster ("directly or indirectly", §3.8). Not restricted => PASS. + RestrictedRole role = _restrictedRole(asset, user); + if (role == RestrictedRole.NONE) return (true, bytes32(0)); + + // G⑤ exception — participant-branch de minimis ONLY (§242.101(b)(7), §3.12). + // Issuer branch has none, so an issuer/SSH/affiliated buy is blocked no + // matter how small (asymmetry, T9). + if (role == RestrictedRole.DISTRIBUTION_PARTICIPANT && _deMinimisException(asset, user, amount)) { + return (true, bytes32(0)); + } + + // G⑥ routing + terminal block (§3.8-3.9). Distinct statute, distinct code. + if (role == RestrictedRole.DISTRIBUTION_PARTICIPANT) return (false, _code(5)); // §242.101(a) + return (false, _code(4)); // §242.102(a): ISSUER / SELLING_SECURITY_HOLDER / AFFILIATED_PURCHASER + } + + /// @dev Resolve the restricted role of `account`: direct roster first, then + /// control-cluster (indirect). §242.100(b)(3) safe harbor: a certified + /// information-barrier affiliate is NOT an affiliated purchaser (doc §3.7). + /// Certification removes ONLY affiliated-purchaser status — an issuer / + /// SSH / participant cannot buy out of the gate via an info barrier. + function _restrictedRole(address asset, address account) private view returns (RestrictedRole) { + RestrictedRole direct = restrictedRoleOf[asset][account]; + RestrictedRole role = direct != RestrictedRole.NONE ? direct : clusterRoleOf[asset][account]; + if (role == RestrictedRole.AFFILIATED_PURCHASER && infoBarrierCertifiedOf[asset][account]) { + return RestrictedRole.NONE; + } + return role; + } + + /// @dev §242.101(b)(7) de minimis: purchase totaling < 2% of ADTV, by a person + /// maintaining written policies. STATELESS (§8.4): the doc's cumulative + /// counter is an off-chain exception-path aid; a view gate cannot + /// accumulate, so THIS trade's `amount` is the deterministic on-chain proxy + /// against the 2% threshold. Undefined ADTV or missing policies => no + /// exception. STRICT `<` — exactly 2% is not de minimis. + function _deMinimisException(address asset, address account, uint256 amount) private view returns (bool) { + uint256 adtv = adtvOf[asset]; + if (adtv == 0) return false; + if (!policiesCertifiedOf[asset][account]) return false; + return amount * BPS_DENOMINATOR < adtv * DE_MINIMIS_BPS; + } + + /// @dev recipeId 0 is a placeholder; the engine re-encodes with the real recipeId. + function _code(uint32 n) private pure returns (bytes32) { + return ReasonCodes.encode(0, ELEMENT_ID, n); + } +} diff --git a/test/unit/compliance/elements/Affiliate.t.sol b/test/unit/compliance/elements/Affiliate.t.sol new file mode 100644 index 0000000..0091df4 --- /dev/null +++ b/test/unit/compliance/elements/Affiliate.t.sol @@ -0,0 +1,416 @@ +// SPDX-License-Identifier: GPL-3.0 +pragma solidity 0.8.17; + +import {Test} from "forge-std/Test.sol"; +import {Affiliate} from "../../../../src/compliance/elements/Affiliate.sol"; +import {Errors} from "../../../../src/libraries/Errors.sol"; +import { + ElementMetadata, + ElementCategory, + Decidability, + ObligationTiming, + Statefulness, + TemporalNature +} from "../../../../src/types/ComplianceTypes.sol"; + +contract AffiliateTest is Test { + // Re-declared to match Affiliate's events for vm.expectEmit (Solidity 0.8.17 + // cannot reference a non-library contract's event by qualified name in an + // `emit` statement; that requires >=0.8.22). + event ClaimSet( + address indexed subject, + address indexed asset, + Affiliate.AffiliateBasis basis, + Affiliate.DeterminationSource source, + address claimIssuer, + uint64 verifiedAt, + uint64 decayStartedAt + ); + event TrustedClaimIssuerSet(address indexed issuer, bool trusted); + + bytes32 internal constant ELEMENT_ID = "A-06-v1"; + + address internal user = address(0xA06CE); + address internal operator = address(0x0733); + address internal stranger = address(0xBAD); + address internal issuer = address(0x1550E); // trusted claim issuer + address internal assetX = address(0x7011E); // issuer X's RWA token + address internal assetY = address(0x7012E); // issuer Y's RWA token + + // Arbitrary fixed epoch anchor so every test's timeline is deterministic + // regardless of the harness's default block.timestamp. + uint64 internal constant START = 1_700_000_000; + + Affiliate internal element; + + function setUp() public { + element = new Affiliate(); + vm.warp(START); + element.setTrustedClaimIssuer(issuer, true); + } + + function _code(uint32 n) internal pure returns (bytes32) { + return keccak256(abi.encode(uint16(0), ELEMENT_ID, n)); + } + + // Set a claim signed by the default trusted issuer, source = ISSUER_REGISTRY. + function _setClaim( + address subject, + address asset, + Affiliate.AffiliateBasis basis, + uint64 verifiedAt, + uint64 decayStartedAt + ) internal { + element.setClaim( + subject, asset, basis, Affiliate.DeterminationSource.ISSUER_REGISTRY, issuer, verifiedAt, decayStartedAt + ); + } + + // --------------------------------------------------------------- + // Metadata + auth + // --------------------------------------------------------------- + + function test_metadata_fields() public { + ElementMetadata memory m = element.elementMetadata(); + assertEq(m.elementId, ELEMENT_ID); + assertEq(m.version, "A-06-v1"); + assertEq(uint256(m.category), uint256(ElementCategory.INVESTOR_ATTRIBUTE)); + assertEq(uint256(m.decidability), uint256(Decidability.ATTESTATION_BASED)); + assertEq(uint256(m.timing), uint256(ObligationTiming.EX_ANTE_VERIFY)); + assertEq(uint256(m.statefulness), uint256(Statefulness.STATELESS)); + assertEq(uint256(m.temporal), uint256(TemporalNature.PERIODIC)); + } + + function test_setClaim_revertsForNonOperator() public { + vm.prank(stranger); + vm.expectRevert(Errors.NotAuthorized.selector); + _setClaim(user, assetX, Affiliate.AffiliateBasis.OFFICER_DIRECTOR, START, 0); + } + + function test_setTrustedClaimIssuer_revertsForNonOperator() public { + vm.prank(stranger); + vm.expectRevert(Errors.NotAuthorized.selector); + element.setTrustedClaimIssuer(issuer, true); + } + + function test_setClaim_ownerCanSet_andEmitsEvent_andUpdatesStorage() public { + vm.expectEmit(true, true, false, true); + emit ClaimSet( + user, + assetX, + Affiliate.AffiliateBasis.OFFICER_DIRECTOR, + Affiliate.DeterminationSource.ISSUER_REGISTRY, + issuer, + START, + 0 + ); + _setClaim(user, assetX, Affiliate.AffiliateBasis.OFFICER_DIRECTOR, START, 0); + + ( + Affiliate.AffiliateBasis basis, + Affiliate.DeterminationSource source, + address claimIssuer, + uint64 verifiedAt, + uint64 decayStartedAt + ) = element.claimOf(user, assetX); + assertEq(uint256(basis), uint256(Affiliate.AffiliateBasis.OFFICER_DIRECTOR)); + assertEq(uint256(source), uint256(Affiliate.DeterminationSource.ISSUER_REGISTRY)); + assertEq(claimIssuer, issuer); + assertEq(verifiedAt, START); + assertEq(decayStartedAt, 0); + } + + function test_setTrustedClaimIssuer_ownerCanSet_andEmitsEvent() public { + address other = address(0xFEED); + vm.expectEmit(true, false, false, true); + emit TrustedClaimIssuerSet(other, true); + element.setTrustedClaimIssuer(other, true); + assertTrue(element.isTrustedClaimIssuer(other)); + } + + function test_setClaim_operatorCanSet() public { + element.setOperator(operator, true); + + vm.prank(operator); + _setClaim(user, assetX, Affiliate.AffiliateBasis.NOT_AFFILIATE, START, 0); + + (Affiliate.AffiliateBasis basis,,,,) = element.claimOf(user, assetX); + assertEq(uint256(basis), uint256(Affiliate.AffiliateBasis.NOT_AFFILIATE)); + } + + // --------------------------------------------------------------- + // doc §7 Test 1 — current affiliate (officer). PASS_AFFILIATE. + // --------------------------------------------------------------- + + function test_check_test1_currentOfficerIsAffiliate() public { + // 김 부장, COO of issuer X, resells token X. + _setClaim(user, assetX, Affiliate.AffiliateBasis.OFFICER_DIRECTOR, START, 0); + + (bool passed, bytes32 reasonCode) = element.check(user, address(0), assetX, 2500, ""); + assertTrue(passed); // element only DETERMINES; recipe applies Rule 144 + assertEq(reasonCode, bytes32(0)); + assertEq(uint256(element.effectiveStatus(user, assetX)), uint256(Affiliate.EffectiveStatus.AFFILIATE)); + } + + // --------------------------------------------------------------- + // doc §7 Test 2 — decay in progress (60 days after resignation) AND + // asset-specificity: affiliate for issuer X, non-affiliate for issuer Y. + // --------------------------------------------------------------- + + function test_check_test2_decayInProgress_andAssetSpecific() public { + // Issuer X: former COO, resigned 60 days ago → still inside the decay tail. + _setClaim(user, assetX, Affiliate.AffiliateBasis.FORMER_AFFILIATE_DECAY, START, START - 60 days); + // Issuer Y: never an affiliate. + _setClaim(user, assetY, Affiliate.AffiliateBasis.NOT_AFFILIATE, START, 0); + + (bool passedX,) = element.check(user, address(0), assetX, 0, ""); + assertTrue(passedX); + assertEq(uint256(element.effectiveStatus(user, assetX)), uint256(Affiliate.EffectiveStatus.AFFILIATE)); + + (bool passedY,) = element.check(user, address(0), assetY, 0, ""); + assertTrue(passedY); + assertEq(uint256(element.effectiveStatus(user, assetY)), uint256(Affiliate.EffectiveStatus.NON_AFFILIATE)); + } + + // --------------------------------------------------------------- + // doc §7 Test 3 — decay complete (95 days after resignation). The claim is + // re-attested (fresh verifiedAt) while decayStartedAt stays at resignation. + // PASS_NON_AFFILIATE (auto-resolved, doc §11.2). + // --------------------------------------------------------------- + + function test_check_test3_decayComplete() public { + _setClaim(user, assetX, Affiliate.AffiliateBasis.FORMER_AFFILIATE_DECAY, START, START - 95 days); + + (bool passed, bytes32 reasonCode) = element.check(user, address(0), assetX, 0, ""); + assertTrue(passed); + assertEq(reasonCode, bytes32(0)); + assertEq(uint256(element.effectiveStatus(user, assetX)), uint256(Affiliate.EffectiveStatus.NON_AFFILIATE)); + } + + // --------------------------------------------------------------- + // doc §7 Test 4 — indirect chain via family LLC. INDIRECT_CONTROL → AFFILIATE. + // --------------------------------------------------------------- + + function test_check_test4_indirectControlFamilyLlc() public { + address familyLlc = address(0xF00D); + _setClaim(familyLlc, assetX, Affiliate.AffiliateBasis.INDIRECT_CONTROL, START, 0); + + (bool passed,) = element.check(familyLlc, address(0), assetX, 0, ""); + assertTrue(passed); + assertEq(uint256(element.effectiveStatus(familyLlc, assetX)), uint256(Affiliate.EffectiveStatus.AFFILIATE)); + } + + // --------------------------------------------------------------- + // doc §7 Test 5 — NOT_AFFILIATE pass (ordinary retail investor). + // --------------------------------------------------------------- + + function test_check_test5_notAffiliatePass() public { + _setClaim(user, assetX, Affiliate.AffiliateBasis.NOT_AFFILIATE, START, 0); + + (bool passed, bytes32 reasonCode) = element.check(user, address(0), assetX, 2000, ""); + assertTrue(passed); + assertEq(reasonCode, bytes32(0)); + assertEq(uint256(element.effectiveStatus(user, assetX)), uint256(Affiliate.EffectiveStatus.NON_AFFILIATE)); + } + + // --------------------------------------------------------------- + // A-06.md §2 판정표 — decay look-back boundary (rows for 144(b)(2) 90-day tail + // vs 144(b)(1) "preceding three months"). verifiedAt is kept fresh (== START, + // checked at START) so freshness never interferes; decayStartedAt is placed N + // days in the past. Decay completes only once BOTH look-backs run — the binding + // one is max(90d, 92d) = 92d (LOOKBACK_144B1). The 90-day row is the critical + // regression: a naive single-90-day gate flips to NON_AFFILIATE at day 90, but + // the (b)(1) three-calendar-month look-back is not yet satisfied there. + // --------------------------------------------------------------- + + function _decayStatusAtDays(uint64 daysSinceResignation) internal returns (Affiliate.EffectiveStatus) { + _setClaim( + user, assetX, Affiliate.AffiliateBasis.FORMER_AFFILIATE_DECAY, START, START - daysSinceResignation * 1 days + ); + return element.effectiveStatus(user, assetX); + } + + function test_decayBoundary_day89_stillAffiliate() public { + assertEq(uint256(_decayStatusAtDays(89)), uint256(Affiliate.EffectiveStatus.AFFILIATE)); + } + + // Day 90: 144(b)(2) tail just cleared, but 144(b)(1) 3-calendar-month look-back + // (92d) has NOT — dual-period correctness (A-06.md checklist C5/C6, pattern 1). + function test_decayBoundary_day90_tailClearedButLookbackNot_stillAffiliate() public { + assertEq(uint256(_decayStatusAtDays(90)), uint256(Affiliate.EffectiveStatus.AFFILIATE)); + } + + function test_decayBoundary_day91_stillAffiliate() public { + assertEq(uint256(_decayStatusAtDays(91)), uint256(Affiliate.EffectiveStatus.AFFILIATE)); + } + + // Day 92: both look-backs satisfied → NON_AFFILIATE. Inclusive boundary (doc §9.3 + // Case 2 — the moment the period elapses, the person flips to non-affiliate). + function test_decayBoundary_day92_inclusive_becomesNonAffiliate() public { + assertEq(uint256(_decayStatusAtDays(92)), uint256(Affiliate.EffectiveStatus.NON_AFFILIATE)); + } + + function test_decayBoundary_day93_nonAffiliate() public { + assertEq(uint256(_decayStatusAtDays(93)), uint256(Affiliate.EffectiveStatus.NON_AFFILIATE)); + } + + // Malformed FORMER_AFFILIATE_DECAY (no decayStartedAt) cannot prove any tail ran + // → fail-closed to AFFILIATE, never the laxer non-affiliate path (doc §10.3). + function test_decay_missingStart_failsClosedToAffiliate() public { + _setClaim(user, assetX, Affiliate.AffiliateBasis.FORMER_AFFILIATE_DECAY, START, 0); + assertEq(uint256(element.effectiveStatus(user, assetX)), uint256(Affiliate.EffectiveStatus.AFFILIATE)); + } + + // --------------------------------------------------------------- + // A-06.md §2 — freshness cap boundary (Decipher policy, strict `>`). Exactly at + // the 90-day reuse cap is still fresh; one second past expires. + // --------------------------------------------------------------- + + function test_freshness_exactlyAtCapPasses() public { + _setClaim(user, assetX, Affiliate.AffiliateBasis.NOT_AFFILIATE, START, 0); + vm.warp(START + element.FRESHNESS_CAP()); + + (bool passed, bytes32 reasonCode) = element.check(user, address(0), assetX, 0, ""); + assertTrue(passed); + assertEq(reasonCode, bytes32(0)); + } + + function test_freshness_oneSecondPastCapExpires() public { + _setClaim(user, assetX, Affiliate.AffiliateBasis.NOT_AFFILIATE, START, 0); + vm.warp(START + element.FRESHNESS_CAP() + 1); + + (bool passed, bytes32 reasonCode) = element.check(user, address(0), assetX, 0, ""); + assertFalse(passed); + assertEq(reasonCode, _code(3)); // FAIL_AFFILIATE_CLAIM_EXPIRED + assertEq(uint256(element.effectiveStatus(user, assetX)), uint256(Affiliate.EffectiveStatus.EXPIRED)); + } + + // --------------------------------------------------------------- + // A-06.md §2 / checklist C3 — no on-chain bright line. BENEFICIAL_OWNER_10PLUS is + // an ATTESTED evidentiary basis, not a percentage this gate computes; the element + // never reads an ownership number, it consumes the off-chain conclusion. + // --------------------------------------------------------------- + + function test_beneficialOwner10Plus_isAttestedBasis_notComputedThreshold() public { + _setClaim(user, assetX, Affiliate.AffiliateBasis.BENEFICIAL_OWNER_10PLUS, START, 0); + (bool passed,) = element.check(user, address(0), assetX, 0, ""); + assertTrue(passed); + assertEq(uint256(element.effectiveStatus(user, assetX)), uint256(Affiliate.EffectiveStatus.AFFILIATE)); + } + + // --------------------------------------------------------------- + // Failure / review codes — every one at least once. + // --------------------------------------------------------------- + + // code 1 — no claim at all (fail-closed default state): absence is NOT a + // non-affiliate pass. + function test_failClosed_noClaim_statusUnknown() public { + (bool passed, bytes32 reasonCode) = element.check(user, address(0), assetX, 0, ""); + assertFalse(passed); + assertEq(reasonCode, _code(1)); // FAIL_AFFILIATE_STATUS_UNKNOWN + assertEq(uint256(element.effectiveStatus(user, assetX)), uint256(Affiliate.EffectiveStatus.UNKNOWN)); + } + + // code 1 — asset mismatch: a claim exists for assetX but the trade is on assetY + // (affiliate status is asset-specific, doc §4.4 / §5.1 step 4). + function test_failClosed_assetMismatch_statusUnknown() public { + _setClaim(user, assetX, Affiliate.AffiliateBasis.OFFICER_DIRECTOR, START, 0); + + (bool passed, bytes32 reasonCode) = element.check(user, address(0), assetY, 0, ""); + assertFalse(passed); + assertEq(reasonCode, _code(1)); + } + + // code 2 — claim issuer not in the trusted set. + function test_untrustedIssuer() public { + address rogue = address(0xDEAD); + element.setClaim( + user, + assetX, + Affiliate.AffiliateBasis.OFFICER_DIRECTOR, + Affiliate.DeterminationSource.ISSUER_REGISTRY, + rogue, + START, + 0 + ); + + (bool passed, bytes32 reasonCode) = element.check(user, address(0), assetX, 0, ""); + assertFalse(passed); + assertEq(reasonCode, _code(2)); // FAIL_UNTRUSTED_AFFILIATE_CLAIM_ISSUER + assertEq(uint256(element.effectiveStatus(user, assetX)), uint256(Affiliate.EffectiveStatus.UNTRUSTED)); + + // Trusting the issuer cures it. + element.setTrustedClaimIssuer(rogue, true); + (bool passedNow,) = element.check(user, address(0), assetX, 0, ""); + assertTrue(passedNow); + } + + // Revoking trust after the fact turns a previously-passing claim untrusted. + function test_untrustedIssuer_revocation() public { + _setClaim(user, assetX, Affiliate.AffiliateBasis.OFFICER_DIRECTOR, START, 0); + (bool passedBefore,) = element.check(user, address(0), assetX, 0, ""); + assertTrue(passedBefore); + + element.setTrustedClaimIssuer(issuer, false); + (bool passedAfter, bytes32 reasonCode) = element.check(user, address(0), assetX, 0, ""); + assertFalse(passedAfter); + assertEq(reasonCode, _code(2)); + } + + // code 3 — expired claim (covered at boundary above; explicit far-past case here). + function test_expiredClaim() public { + _setClaim(user, assetX, Affiliate.AffiliateBasis.OFFICER_DIRECTOR, START, 0); + vm.warp(START + 200 days); + + (bool passed, bytes32 reasonCode) = element.check(user, address(0), assetX, 0, ""); + assertFalse(passed); + assertEq(reasonCode, _code(3)); + } + + // code 4 — UNCERTAIN_AFFILIATE routes to manual review, fail-closed. + function test_uncertainAffiliate_review() public { + _setClaim(user, assetX, Affiliate.AffiliateBasis.UNCERTAIN_AFFILIATE, START, 0); + + (bool passed, bytes32 reasonCode) = element.check(user, address(0), assetX, 0, ""); + assertFalse(passed); + assertEq(reasonCode, _code(4)); // REVIEW_AFFILIATE_UNCERTAIN + assertEq(uint256(element.effectiveStatus(user, assetX)), uint256(Affiliate.EffectiveStatus.UNCERTAIN)); + } + + // --------------------------------------------------------------- + // Evaluation-order pins: earlier steps win over later ones (doc §5.1 order). + // --------------------------------------------------------------- + + // Untrusted issuer (step 2) beats an expired verifiedAt (step 3). + function test_order_untrustedBeatsExpired() public { + address rogue = address(0xDEAD); + element.setClaim( + user, + assetX, + Affiliate.AffiliateBasis.OFFICER_DIRECTOR, + Affiliate.DeterminationSource.ISSUER_REGISTRY, + rogue, + START, + 0 + ); + vm.warp(START + 200 days); // also stale + + (bool passed, bytes32 reasonCode) = element.check(user, address(0), assetX, 0, ""); + assertFalse(passed); + assertEq(reasonCode, _code(2)); // untrusted (step 2) wins over expired (step 3) + } + + // --------------------------------------------------------------- + // A-06 keys claims per (subject, asset); the identity args are otherwise inert + // (counterparty / amount / context do not affect the verdict). + // --------------------------------------------------------------- + + function test_check_ignoresCounterpartyAmountContext() public { + _setClaim(user, assetX, Affiliate.AffiliateBasis.NOT_AFFILIATE, START, 0); + + (bool passed1,) = element.check(user, address(0), assetX, 0, ""); + (bool passed2,) = element.check(user, address(0xB0B), assetX, 999999, hex"deadbeef"); + assertTrue(passed1); + assertEq(passed1, passed2); + } +} diff --git a/test/unit/compliance/elements/BadActorDisqualification.t.sol b/test/unit/compliance/elements/BadActorDisqualification.t.sol new file mode 100644 index 0000000..bf8976b --- /dev/null +++ b/test/unit/compliance/elements/BadActorDisqualification.t.sol @@ -0,0 +1,388 @@ +// SPDX-License-Identifier: GPL-3.0 +pragma solidity 0.8.17; + +import {Test} from "forge-std/Test.sol"; +import {BadActorDisqualification} from "../../../../src/compliance/elements/BadActorDisqualification.sol"; +import {ReasonCodes} from "../../../../src/libraries/ReasonCodes.sol"; +import {Errors} from "../../../../src/libraries/Errors.sol"; +import { + ElementMetadata, + ElementCategory, + TemporalNature, + Decidability, + ObligationTiming, + Statefulness +} from "../../../../src/types/ComplianceTypes.sol"; + +contract BadActorDisqualificationTest is Test { + BadActorDisqualification internal element; + + address internal buyer = address(0xA11CE); + address internal seller = address(0xC0FFEE); + address internal asset = address(0xBEEF); + address internal operator = address(0x0BADBEEF01); + address internal stranger = address(0xBAD); + + // L2 factual-inquiry verifiers. + address internal trustedIssuer = address(0x11550ED); + address internal rogueIssuer = address(0xFA15E); + + bytes32 internal constant ELEMENT_ID = "E-03-v1"; + bytes32 internal constant OFFERING_ID = keccak256("O1"); + bytes32 internal constant ROSTER_HASH = keccak256("roster-O1"); + bytes32 internal constant DISCLOSED_MATTERS = keccak256("2012-injunction-disclosure"); + + // Mirror the header's n -> code map so assertions read by name. + uint32 internal constant N_ROSTER_MISSING = 1; + uint32 internal constant N_ROSTER_INCOMPLETE = 2; + uint32 internal constant N_CLEARANCE_MISSING = 3; + uint32 internal constant N_506E_PENDING = 4; + uint32 internal constant N_ISSUER_UNTRUSTED = 5; + uint32 internal constant N_SCOPE_MISMATCH = 6; + uint32 internal constant N_CLEARANCE_STALE = 7; + uint32 internal constant N_REVOKED = 8; + uint32 internal constant N_506E_DISCLOSURE_MISSING = 9; + + event OfferingDeclared( + address indexed asset, bytes32 offeringId, bytes32 coveredPersonRosterHash, bool rosterComplete + ); + event ClearanceSet( + address indexed asset, + address indexed attestingIssuer, + bytes32 offeringScope, + uint64 expiry, + bool disclosure506eRequired, + bytes32 disclosedMattersHash, + bool disclosureFurnished, + bool noDisqualifyingEvent + ); + event ClearanceRevocationSet(address indexed asset, bool revoked); + event TrustedBadActorIssuerSet(address indexed issuer, bool trusted); + + function setUp() public { + element = new BadActorDisqualification(); + element.setOperator(operator, true); + // Anchor a definite "now" so freshness math is unambiguous. + vm.warp(1_700_000_000); + vm.prank(operator); + element.setTrustedBadActorIssuer(trustedIssuer, true); + } + + // ---- helpers ----------------------------------------------------------- + + function _future() internal view returns (uint64) { + return uint64(block.timestamp + 365 days); + } + + function _code(uint32 n) internal pure returns (bytes32) { + return ReasonCodes.encode(0, ELEMENT_ID, n); + } + + function _run() internal view returns (bool passed, bytes32 reasonCode) { + return element.check(buyer, seller, asset, 0, ""); + } + + /// @dev A fully-clean offering: roster declared+complete, valid clearance + /// from the trusted issuer, no pre-2013 matter, fresh, not revoked. + function _declareCleanOffering() internal { + vm.startPrank(operator); + element.setOffering(asset, OFFERING_ID, ROSTER_HASH, true); + element.setClearance(asset, trustedIssuer, OFFERING_ID, _future(), false, bytes32(0), false, true); + vm.stopPrank(); + } + + // ---- metadata ---------------------------------------------------------- + + function test_metadata_fields() public { + ElementMetadata memory m = element.elementMetadata(); + assertEq(m.elementId, ELEMENT_ID); + assertEq(m.version, "E-03-v1"); + assertEq(uint256(m.category), uint256(ElementCategory.ISSUER_STATUS)); + assertEq(uint256(m.temporal), uint256(TemporalNature.PERIODIC)); + assertEq(uint256(m.decidability), uint256(Decidability.ATTESTATION_BASED)); + assertEq(uint256(m.timing), uint256(ObligationTiming.EX_ANTE_VERIFY)); + assertEq(uint256(m.statefulness), uint256(Statefulness.STATELESS)); + } + + // ---- setter authorization --------------------------------------------- + + function test_setOffering_revertsForStranger() public { + vm.prank(stranger); + vm.expectRevert(Errors.NotAuthorized.selector); + element.setOffering(asset, OFFERING_ID, ROSTER_HASH, true); + } + + function test_setClearance_revertsForStranger() public { + vm.prank(stranger); + vm.expectRevert(Errors.NotAuthorized.selector); + element.setClearance(asset, trustedIssuer, OFFERING_ID, _future(), false, bytes32(0), false, true); + } + + function test_setClearanceRevoked_revertsForStranger() public { + vm.prank(stranger); + vm.expectRevert(Errors.NotAuthorized.selector); + element.setClearanceRevoked(asset, true); + } + + function test_setTrustedBadActorIssuer_revertsForStranger() public { + vm.prank(stranger); + vm.expectRevert(Errors.NotAuthorized.selector); + element.setTrustedBadActorIssuer(rogueIssuer, true); + } + + function test_owner_canCallSetters() public { + // The deployer (this contract) is owner and is authorized via onlyOperator. + element.setOffering(asset, OFFERING_ID, ROSTER_HASH, true); + element.setClearance(asset, trustedIssuer, OFFERING_ID, _future(), false, bytes32(0), false, true); + (,,, uint64 expiry,,,,,) = element.clearanceOf(asset); + assertEq(expiry, _future()); + } + + function test_operator_canCallSetters() public { + vm.startPrank(operator); + element.setOffering(asset, OFFERING_ID, ROSTER_HASH, true); + element.setClearance(asset, trustedIssuer, OFFERING_ID, _future(), false, bytes32(0), false, true); + vm.stopPrank(); + (bool exists,,,,,,,,) = element.clearanceOf(asset); + assertTrue(exists); + } + + // ---- setter events ----------------------------------------------------- + + function test_setOffering_emits() public { + vm.expectEmit(true, false, false, true); + emit OfferingDeclared(asset, OFFERING_ID, ROSTER_HASH, true); + vm.prank(operator); + element.setOffering(asset, OFFERING_ID, ROSTER_HASH, true); + } + + function test_setClearance_emits() public { + vm.expectEmit(true, true, false, true); + emit ClearanceSet(asset, trustedIssuer, OFFERING_ID, _future(), false, bytes32(0), false, true); + vm.prank(operator); + element.setClearance(asset, trustedIssuer, OFFERING_ID, _future(), false, bytes32(0), false, true); + } + + function test_setClearanceRevoked_emits() public { + _declareCleanOffering(); + vm.expectEmit(true, false, false, true); + emit ClearanceRevocationSet(asset, true); + vm.prank(operator); + element.setClearanceRevoked(asset, true); + } + + function test_setTrustedBadActorIssuer_emits() public { + vm.expectEmit(true, false, false, true); + emit TrustedBadActorIssuerSet(rogueIssuer, true); + vm.prank(operator); + element.setTrustedBadActorIssuer(rogueIssuer, true); + } + + // ---- doc §7 test cases ------------------------------------------------- + + /// Test 1 — Pass (valid clearance, no disqualifying event, 506(c) mint). + function test_T1_validClearance_passes() public { + _declareCleanOffering(); + (bool passed, bytes32 reasonCode) = _run(); + assertTrue(passed); + assertEq(reasonCode, bytes32(0)); + } + + /// Test 2 — Fail (absent clearance fails closed). + function test_T2_absentClearance_fails() public { + // Roster declared+complete, but no clearance attestation on file. + vm.prank(operator); + element.setOffering(asset, OFFERING_ID, ROSTER_HASH, true); + (bool passed, bytes32 reasonCode) = _run(); + assertFalse(passed); + assertEq(reasonCode, _code(N_CLEARANCE_MISSING)); + } + + /// Test 3 — Fail (self-claimed clearance: unauthorized issuer). + function test_T3_untrustedIssuer_fails() public { + vm.startPrank(operator); + element.setOffering(asset, OFFERING_ID, ROSTER_HASH, true); + // Operator records a clearance, but it names a non-authorized issuer. + element.setClearance(asset, rogueIssuer, OFFERING_ID, _future(), false, bytes32(0), false, true); + vm.stopPrank(); + (bool passed, bytes32 reasonCode) = _run(); + assertFalse(passed); + assertEq(reasonCode, _code(N_ISSUER_UNTRUSTED)); + } + + /// Test 4 — Fail (mid-offering cancellation: clear at open, then revoked). + function test_T4_midOfferingRevocation_fails() public { + _declareCleanOffering(); + // Clear before revocation. + (bool passedBefore,) = _run(); + assertTrue(passedBefore); + + vm.prank(operator); + element.setClearanceRevoked(asset, true); + + (bool passed, bytes32 reasonCode) = _run(); + assertFalse(passed); + assertEq(reasonCode, _code(N_REVOKED)); + } + + /// Test 5 — Boundary (exactly-20% voting owner). The ≥20% inclusion is an L2 + /// determination sealed into coveredPersonRosterHash; the gate cannot and does + /// not recompute voting power — it consumes the seal + sealed conclusion. + function test_T5_exactly20PercentOwner_passes() public { + bytes32 rosterWith20 = keccak256("roster-includes-exactly-20pct-owner-P"); + vm.startPrank(operator); + element.setOffering(asset, rosterWith20, rosterWith20, true); + // offeringId reused as rosterWith20 above is intentional only for T5's + // scope anchor; set clearance scope to match. + element.setClearance(asset, trustedIssuer, rosterWith20, _future(), false, bytes32(0), false, true); + vm.stopPrank(); + (bool passed, bytes32 reasonCode) = _run(); + assertTrue(passed); + assertEq(reasonCode, bytes32(0)); + } + + /// Test 6 — Pass (pre-2013 event + 506(e) disclosure furnished). + function test_T6_pre2013EventDisclosed_passes() public { + vm.startPrank(operator); + element.setOffering(asset, OFFERING_ID, ROSTER_HASH, true); + element.setClearance(asset, trustedIssuer, OFFERING_ID, _future(), true, DISCLOSED_MATTERS, true, true); + vm.stopPrank(); + (bool passed, bytes32 reasonCode) = _run(); + assertTrue(passed); + assertEq(reasonCode, bytes32(0)); + } + + /// Test 7 — Fail (pre-2013 event + 506(e) disclosure NOT furnished). (e) has + /// no waiver, so this is an unconditional gate. + function test_T7_pre2013EventNotDisclosed_fails() public { + vm.startPrank(operator); + element.setOffering(asset, OFFERING_ID, ROSTER_HASH, true); + // Disclosure doc prepared (hash present) but not furnished. + element.setClearance(asset, trustedIssuer, OFFERING_ID, _future(), true, DISCLOSED_MATTERS, false, true); + vm.stopPrank(); + (bool passed, bytes32 reasonCode) = _run(); + assertFalse(passed); + assertEq(reasonCode, _code(N_506E_DISCLOSURE_MISSING)); + } + + /// Test 8 — Cascade (entity covered person + affiliated-issuer timing + /// exception). Both the A-08/A-09 entity look-through and the (d)(3) timing / + /// control determination (A-06) are performed at L2 and sealed as clean; the + /// gate consumes only the sealed conclusion (noDisqualifyingEvent) via a valid + /// clearance. + function test_T8_entityLookThroughAndAffiliatedIssuer_passes() public { + bytes32 rosterWithEntities = keccak256("roster-entity-20pct-owner-and-affiliated-issuer"); + vm.startPrank(operator); + element.setOffering(asset, OFFERING_ID, rosterWithEntities, true); + element.setClearance(asset, trustedIssuer, OFFERING_ID, _future(), false, bytes32(0), false, true); + vm.stopPrank(); + (bool passed, bytes32 reasonCode) = _run(); + assertTrue(passed); + assertEq(reasonCode, bytes32(0)); + } + + // ---- remaining failure / review codes ---------------------------------- + + /// V1 — roster never declared (fail-closed default). + function test_rosterMissing_fails() public { + // No offering declared at all: rosterHash == 0. + vm.prank(operator); + element.setClearance(asset, trustedIssuer, OFFERING_ID, _future(), false, bytes32(0), false, true); + (bool passed, bytes32 reasonCode) = _run(); + assertFalse(passed); + assertEq(reasonCode, _code(N_ROSTER_MISSING)); + } + + /// V2 — roster declared but not marked complete (HOLD, fail-closed at gate). + function test_rosterIncomplete_review() public { + vm.startPrank(operator); + element.setOffering(asset, OFFERING_ID, ROSTER_HASH, false); + element.setClearance(asset, trustedIssuer, OFFERING_ID, _future(), false, bytes32(0), false, true); + vm.stopPrank(); + (bool passed, bytes32 reasonCode) = _run(); + assertFalse(passed); + assertEq(reasonCode, _code(N_ROSTER_INCOMPLETE)); + } + + /// V4 — pre-2013 matter present but disclosure document not yet prepared + /// (hash == 0): surfaces as PENDING (HOLD), ahead of the G6 furnished check. + function test_506ePending_review() public { + vm.startPrank(operator); + element.setOffering(asset, OFFERING_ID, ROSTER_HASH, true); + element.setClearance(asset, trustedIssuer, OFFERING_ID, _future(), true, bytes32(0), false, true); + vm.stopPrank(); + (bool passed, bytes32 reasonCode) = _run(); + assertFalse(passed); + assertEq(reasonCode, _code(N_506E_PENDING)); + } + + /// G3 — clearance scoped to a different offering. + function test_scopeMismatch_fails() public { + vm.startPrank(operator); + element.setOffering(asset, OFFERING_ID, ROSTER_HASH, true); + element.setClearance( + asset, trustedIssuer, keccak256("OTHER-OFFERING"), _future(), false, bytes32(0), false, true + ); + vm.stopPrank(); + (bool passed, bytes32 reasonCode) = _run(); + assertFalse(passed); + assertEq(reasonCode, _code(N_SCOPE_MISMATCH)); + } + + /// G4 — clearance past its re-inquiry window. + function test_clearanceStale_fails() public { + vm.startPrank(operator); + element.setOffering(asset, OFFERING_ID, ROSTER_HASH, true); + element.setClearance( + asset, trustedIssuer, OFFERING_ID, uint64(block.timestamp - 1), false, bytes32(0), false, true + ); + vm.stopPrank(); + (bool passed, bytes32 reasonCode) = _run(); + assertFalse(passed); + assertEq(reasonCode, _code(N_CLEARANCE_STALE)); + } + + /// G4 boundary — exactly at expiry passes (inclusive window). + function test_clearanceAtExactExpiry_passes() public { + vm.startPrank(operator); + element.setOffering(asset, OFFERING_ID, ROSTER_HASH, true); + element.setClearance(asset, trustedIssuer, OFFERING_ID, uint64(block.timestamp), false, bytes32(0), false, true); + vm.stopPrank(); + (bool passed, bytes32 reasonCode) = _run(); + assertTrue(passed); + assertEq(reasonCode, bytes32(0)); + } + + // ---- keyed-by-asset / precedence sanity -------------------------------- + + /// Gate is keyed by ASSET (offering), not by buyer: any buyer sees the same + /// verdict for the same asset. + function test_check_isPerAsset_notPerBuyer() public { + _declareCleanOffering(); + (bool p1,) = element.check(buyer, seller, asset, 0, ""); + (bool p2,) = element.check(address(0xDEAD), address(0xF00D), asset, 0, ""); + assertTrue(p1); + assertTrue(p2); + + // A different, undeclared asset fails closed (roster missing). + (bool p3, bytes32 rc3) = element.check(buyer, seller, address(0xABCD), 0, ""); + assertFalse(p3); + assertEq(rc3, _code(N_ROSTER_MISSING)); + } + + /// Revocation round-trip: re-setting the clearance clears the revoked flag. + function test_revokeThenReissue_roundTrip() public { + _declareCleanOffering(); + vm.prank(operator); + element.setClearanceRevoked(asset, true); + (bool revokedPass, bytes32 rc) = _run(); + assertFalse(revokedPass); + assertEq(rc, _code(N_REVOKED)); + + // Re-issuance (setClearance) resets revoked=false. + vm.prank(operator); + element.setClearance(asset, trustedIssuer, OFFERING_ID, _future(), false, bytes32(0), false, true); + (bool reissuedPass,) = _run(); + assertTrue(reissuedPass); + } +} diff --git a/test/unit/compliance/elements/FraudSurveillance.t.sol b/test/unit/compliance/elements/FraudSurveillance.t.sol new file mode 100644 index 0000000..46d30d5 --- /dev/null +++ b/test/unit/compliance/elements/FraudSurveillance.t.sol @@ -0,0 +1,487 @@ +// SPDX-License-Identifier: GPL-3.0 +pragma solidity 0.8.17; + +import {Test} from "forge-std/Test.sol"; +import {Vm} from "forge-std/Vm.sol"; +import {FraudSurveillance} from "../../../../src/compliance/elements/FraudSurveillance.sol"; +import {Errors} from "../../../../src/libraries/Errors.sol"; +import { + ElementMetadata, + ElementCategory, + Decidability, + ObligationTiming, + Statefulness, + TemporalNature +} from "../../../../src/types/ComplianceTypes.sol"; + +contract FraudSurveillanceTest is Test { + // Re-declared to match FraudSurveillance's events for vm.expectEmit (Solidity + // 0.8.17 cannot reference a non-library contract's event by qualified name in + // an `emit` statement; that requires >=0.8.22). + event OperatorSet(address indexed operator, bool enabled); + event IdentityGroupSet(address indexed wallet, bytes32 indexed group); + event StructuringWindowSet(uint64 window); + event FlagLifecycle(uint256 indexed flagId, FraudSurveillance.FlagState state, bytes32 reasonCode); + event DeadlineExtended(uint256 indexed flagId, uint64 newDeadline); + + bytes32 internal constant ELEMENT_ID = "F-03-v1"; + + address internal engine = address(0xE11E); + address internal operator = address(0x0733); + address internal stranger = address(0xBAD); + address internal buyer = address(0xB0B); + + // A-04-linked disguised wallets (one identity) for structuring (doc §7.1). + address internal w1 = address(0xA1); + address internal w2 = address(0xA2); + address internal w3 = address(0xA3); + bytes32 internal constant GROUP = keccak256("identity-42"); + + // Fixed epoch anchor so every timeline is deterministic. + uint64 internal constant START = 1_700_000_000; + + FraudSurveillance internal element; + + function setUp() public { + element = new FraudSurveillance(); + element.setEngine(engine); // owner (this test contract) wires the engine + vm.warp(START); + } + + function _code(uint32 n) internal pure returns (bytes32) { + return keccak256(abi.encode(uint16(0), ELEMENT_ID, n)); + } + + // ================================================================= + // Metadata + // ================================================================= + + function test_metadata_fields() public { + ElementMetadata memory m = element.elementMetadata(); + assertEq(m.elementId, ELEMENT_ID); + assertEq(uint256(m.category), uint256(ElementCategory.CONDUCT_MONITORING)); + assertEq(uint256(m.decidability), uint256(Decidability.MONITORING_BASED)); + assertEq(uint256(m.timing), uint256(ObligationTiming.EX_POST_TRIGGER)); + assertEq(uint256(m.statefulness), uint256(Statefulness.STATEFUL)); + assertEq(uint256(m.temporal), uint256(TemporalNature.CUMULATIVE)); + } + + function test_statutory_constants() public { + assertEq(element.SAR_THRESHOLD(), 5000); // 31 CFR §1023.320(a)(2) + assertEq(uint256(element.FILE_DEADLINE()), uint256(30 days)); // (b)(3) + assertEq(uint256(element.MAX_DEADLINE()), uint256(60 days)); // (b)(3) + } + + // ================================================================= + // Auth: onTransfer onlyEngine; setters onlyOperator/onlyOwner; events + // ================================================================= + + function test_onTransfer_revertsForStranger() public { + vm.prank(stranger); + vm.expectRevert(Errors.NotAuthorized.selector); + element.onTransfer(w1, buyer, 6000); + } + + function test_onTransfer_engineCanCall() public { + vm.prank(engine); + element.onTransfer(w1, buyer, 500000); + assertEq(element.flagCount(), 0); // large-but-single => not structuring + } + + function test_setOperator_revertsForNonOwner() public { + vm.prank(stranger); + vm.expectRevert(Errors.NotAuthorized.selector); + element.setOperator(operator, true); + } + + function test_setOperator_operatorCannotSet_ownerOnly() public { + element.setOperator(operator, true); + // an operator is NOT governance: setOperator is onlyOwner + vm.prank(operator); + vm.expectRevert(Errors.NotAuthorized.selector); + element.setOperator(stranger, true); + } + + function test_setOperator_ownerCanSet_emitsEvent() public { + vm.expectEmit(true, false, false, true); + emit OperatorSet(operator, true); + element.setOperator(operator, true); + assertTrue(element.isOperator(operator)); + } + + function test_setIdentityGroup_operatorGated_andEmits() public { + vm.prank(stranger); + vm.expectRevert(Errors.NotAuthorized.selector); + element.setIdentityGroup(w1, GROUP); + + vm.expectEmit(true, true, false, false); + emit IdentityGroupSet(w1, GROUP); + element.setIdentityGroup(w1, GROUP); // owner counts as operator + assertEq(element.identityGroupOf(w1), GROUP); + } + + function test_setStructuringWindow_operatorGated_andEmits() public { + vm.prank(stranger); + vm.expectRevert(Errors.NotAuthorized.selector); + element.setStructuringWindow(2 days); + + vm.expectEmit(false, false, false, true); + emit StructuringWindowSet(2 days); + element.setStructuringWindow(2 days); + assertEq(uint256(element.structuringWindow()), uint256(2 days)); + } + + function test_attestSuspicion_revertsForStranger() public { + vm.prank(stranger); + vm.expectRevert(Errors.NotAuthorized.selector); + element.attestSuspicion(w1, FraudSurveillance.SuspicionCategory.ILLICIT_FUNDS, 10000, false, true); + } + + function test_attestSuspicion_operatorCanCall() public { + element.setOperator(operator, true); + vm.prank(operator); + uint256 id = element.attestSuspicion(w1, FraudSurveillance.SuspicionCategory.ILLICIT_FUNDS, 10000, false, true); + assertEq(id, 1); + } + + // Confidential views are operator-gated (doc §6.4) — a trade party cannot + // read flag state at all. + function test_flagOf_revertsForStranger() public { + element.attestSuspicion(w1, FraudSurveillance.SuspicionCategory.ILLICIT_FUNDS, 10000, false, true); + vm.prank(stranger); + vm.expectRevert(Errors.NotAuthorized.selector); + element.flagOf(1); + } + + // ================================================================= + // doc §7 Test 1 — obvious suspicion (structuring pattern), auto-detected + // ================================================================= + + function test_doc7_test1_structuringPatternFlagged() public { + // A-04 links the three wallets to one identity so they aggregate. + element.setIdentityGroup(w1, GROUP); + element.setIdentityGroup(w2, GROUP); + element.setIdentityGroup(w3, GROUP); + + // 3 x $2,000, 6 minutes apart. Each single < $5,000; aggregate = $6,000. + vm.prank(engine); + element.onTransfer(w1, buyer, 2000); + assertEq(element.flagCount(), 0); + + vm.warp(START + 6 minutes); + vm.prank(engine); + element.onTransfer(w2, buyer, 2000); + assertEq(element.flagCount(), 0); + + vm.warp(START + 12 minutes); + vm.prank(engine); + element.onTransfer(w3, buyer, 2000); // aggregate crosses $5,000 => FLAG + + assertEq(element.flagCount(), 1); + FraudSurveillance.Flag memory f = element.flagOf(1); + assertEq(uint256(f.category), uint256(FraudSurveillance.SuspicionCategory.STRUCTURING_EVASION)); + assertEq(uint256(f.state), uint256(FraudSurveillance.FlagState.DETECTED)); + assertEq(f.subject, w3); + assertEq(uint256(f.detectedAt), uint256(START + 12 minutes)); // initial detection clock (doc §5.4) + assertEq(uint256(f.deadline), uint256(START + 12 minutes + 30 days)); // 30d (doc §5.3) + assertEq(element.reasonCodeOf(1), _code(2)); // STRUCTURING_EVASION => code 2 + + // Party-facing surface reveals nothing (doc §6.4/§7.5). + (bool passed, bytes32 rc) = element.check(w3, buyer, address(0), 2000, ""); + assertTrue(passed); + assertEq(rc, bytes32(0)); + } + + // Aggregate exactly $5,000 also crosses (>=, inclusive — doc §5.3). + function test_doc7_test1_structuringAggregateExactly5000Flags() public { + element.setIdentityGroup(w1, GROUP); + element.setIdentityGroup(w2, GROUP); + + vm.prank(engine); + element.onTransfer(w1, buyer, 2000); + vm.prank(engine); + element.onTransfer(w2, buyer, 3000); // aggregate == 5000 exactly + + assertEq(element.flagCount(), 1); + FraudSurveillance.Flag memory f = element.flagOf(1); + assertEq(uint256(f.category), uint256(FraudSurveillance.SuspicionCategory.STRUCTURING_EVASION)); + } + + // Sub-threshold pieces that never aggregate to $5,000 are NOT flagged. + function test_structuringBelowAggregate_notFlagged() public { + element.setIdentityGroup(w1, GROUP); + element.setIdentityGroup(w2, GROUP); + + vm.prank(engine); + element.onTransfer(w1, buyer, 2000); + vm.prank(engine); + element.onTransfer(w2, buyer, 2000); // aggregate 4000 < 5000 + + assertEq(element.flagCount(), 0); + } + + // Pieces separated by more than the window do NOT aggregate. + function test_structuringOutsideWindow_notFlagged() public { + element.setIdentityGroup(w1, GROUP); + element.setIdentityGroup(w2, GROUP); + + vm.prank(engine); + element.onTransfer(w1, buyer, 4000); + vm.warp(START + 2 days); // window (1 day default) has elapsed + vm.prank(engine); + element.onTransfer(w2, buyer, 4000); // fresh window: 4000 < 5000 + + assertEq(element.flagCount(), 0); + } + + // ================================================================= + // doc §7 Test 2 — clearly normal: large single trade is NOT flagged + // ================================================================= + + function test_doc7_test2_largeNormalTradeNotFlagged() public { + vm.prank(engine); + element.onTransfer(w1, buyer, 500000); // QP buys BUIDL $500K, ordinary + + assertEq(element.flagCount(), 0); // above threshold, but no category hit + (bool passed, bytes32 rc) = element.check(w1, buyer, address(0), 500000, ""); + assertTrue(passed); + assertEq(rc, bytes32(0)); + } + + // ================================================================= + // doc §7 Test 3 — boundaries: $5,000-exactly and 30-day-exactly + // ================================================================= + + // (a) amount boundary: exactly $5,000 opens (>=, inclusive). + function test_doc7_test3_amountExactly5000Opens() public { + uint256 id = + element.attestSuspicion(w1, FraudSurveillance.SuspicionCategory.NO_LAWFUL_PURPOSE, 5000, false, true); + assertEq(id, 1); + FraudSurveillance.Flag memory f = element.flagOf(1); + assertEq(uint256(f.state), uint256(FraudSurveillance.FlagState.DETECTED)); + } + + // (a) amount boundary: $4,999 does NOT open (below threshold => NO_FLAG). + function test_doc7_test3_amountBelow5000DoesNotOpen() public { + uint256 id = + element.attestSuspicion(w1, FraudSurveillance.SuspicionCategory.NO_LAWFUL_PURPOSE, 4999, false, true); + assertEq(id, 0); + assertEq(element.flagCount(), 0); + } + + // (b) deadline boundary: filing on day 30 exactly is timely (<=, inclusive). + function test_doc7_test3_filingOnDay30IsTimely() public { + element.attestSuspicion(w1, FraudSurveillance.SuspicionCategory.NO_LAWFUL_PURPOSE, 5000, false, true); + vm.warp(START + 30 days); // exactly day 30 + element.fileSar(1); + + assertTrue(element.filedOnTime(1)); + FraudSurveillance.Flag memory f = element.flagOf(1); + assertEq(uint256(f.state), uint256(FraudSurveillance.FlagState.SAR_FILED)); + } + + // (b) deadline boundary: past day 30 is late (BSA violation, 1023.320(g)). + function test_doc7_test3_filingPastDay30IsLate() public { + element.attestSuspicion(w1, FraudSurveillance.SuspicionCategory.NO_LAWFUL_PURPOSE, 5000, false, true); + vm.warp(START + 30 days + 1); + assertTrue(element.isOverdue(1)); // escalation view flags it before filing + element.fileSar(1); + assertFalse(element.filedOnTime(1)); + } + + // ================================================================= + // doc §7 Test 4 — attempted (unsettled) + no economic purpose + // ================================================================= + + function test_doc7_test4_attemptedNoLawfulPurpose_reviewedThenCleared() public { + // Unsettled attempts never reach onTransfer; the Operator attests them. + uint256 id = + element.attestSuspicion(w1, FraudSurveillance.SuspicionCategory.NO_LAWFUL_PURPOSE, 8000, true, false); + FraudSurveillance.Flag memory f = element.flagOf(id); + assertTrue(f.attempted); + assertEq(uint256(f.category), uint256(FraudSurveillance.SuspicionCategory.NO_LAWFUL_PURPOSE)); + assertEq(element.reasonCodeOf(id), _code(3)); + + element.openReview(id); // DETECTED -> UNDER_REVIEW + assertEq(uint256(element.flagOf(id).state), uint256(FraudSurveillance.FlagState.UNDER_REVIEW)); + + // Operator finds a reasonable explanation (doc §5.5) -> CLEARED. + element.clearFlag(id); + assertEq(uint256(element.flagOf(id).state), uint256(FraudSurveillance.FlagState.CLEARED)); + } + + // ================================================================= + // doc §7 Test 5 — no-tipping-off (party-facing surface stays clean) + // ================================================================= + + // The party-facing surface (`check`) reveals nothing even for a flagged + // subject, and flag state is unreadable by a trade party. + function test_doc7_test5_partyFacingSurfaceRevealsNothing() public { + element.attestSuspicion(w1, FraudSurveillance.SuspicionCategory.ILLICIT_FUNDS, 100000, false, true); + + // check() returns clean for the flagged subject and for anyone else. + (bool passed1, bytes32 rc1) = element.check(w1, buyer, address(0), 100000, ""); + (bool passed2, bytes32 rc2) = element.check(buyer, w1, address(0), 1, ""); + assertTrue(passed1); + assertTrue(passed2); + assertEq(rc1, bytes32(0)); + assertEq(rc2, bytes32(0)); + + // A trade party cannot read any flag surface. + vm.startPrank(stranger); + vm.expectRevert(Errors.NotAuthorized.selector); + element.flagOf(1); + vm.expectRevert(Errors.NotAuthorized.selector); + element.reasonCodeOf(1); + vm.expectRevert(Errors.NotAuthorized.selector); + element.flagCount(); + vm.stopPrank(); + } + + // onTransfer opens a flag WITHOUT emitting any event — an event in the + // settlement transaction would itself tip off that tx's parties (doc §6.4). + function test_doc7_test5_onTransferEmitsNoEvent() public { + element.setIdentityGroup(w1, GROUP); + element.setIdentityGroup(w2, GROUP); + + vm.prank(engine); + element.onTransfer(w1, buyer, 3000); + + vm.recordLogs(); + vm.prank(engine); + element.onTransfer(w2, buyer, 3000); // this opens the structuring flag + Vm.Log[] memory logs = vm.getRecordedLogs(); + + assertEq(element.flagCount(), 1); // flag WAS opened + assertEq(logs.length, 0); // ...but silently (no on-chain trace) + } + + // ================================================================= + // Every flag code (§1023.320(a)(2) categories 1..4) at least once + // ================================================================= + + // code 1 — ILLICIT_FUNDS (a)(2)(i) + function test_code1_illicitFunds_emitsAndStoresCode() public { + vm.expectEmit(true, false, false, true); + emit FlagLifecycle(1, FraudSurveillance.FlagState.DETECTED, _code(1)); + uint256 id = element.attestSuspicion(w1, FraudSurveillance.SuspicionCategory.ILLICIT_FUNDS, 9000, false, true); + assertEq(element.reasonCodeOf(id), _code(1)); + } + + // code 2 — STRUCTURING_EVASION (a)(2)(ii): asserted in test1 (auto path). + // Re-asserted here via the operator path so the emitted code is checked too. + function test_code2_structuring_operatorPath() public { + vm.expectEmit(true, false, false, true); + emit FlagLifecycle(1, FraudSurveillance.FlagState.DETECTED, _code(2)); + element.attestSuspicion(w1, FraudSurveillance.SuspicionCategory.STRUCTURING_EVASION, 7000, false, true); + } + + // code 3 — NO_LAWFUL_PURPOSE (a)(2)(iii) + function test_code3_noLawfulPurpose_emitsAndStoresCode() public { + vm.expectEmit(true, false, false, true); + emit FlagLifecycle(1, FraudSurveillance.FlagState.DETECTED, _code(3)); + uint256 id = + element.attestSuspicion(w1, FraudSurveillance.SuspicionCategory.NO_LAWFUL_PURPOSE, 5000, false, true); + assertEq(element.reasonCodeOf(id), _code(3)); + } + + // code 4 — CRIME_FACILITATION (a)(2)(iv) + function test_code4_crimeFacilitation_emitsAndStoresCode() public { + vm.expectEmit(true, false, false, true); + emit FlagLifecycle(1, FraudSurveillance.FlagState.DETECTED, _code(4)); + uint256 id = + element.attestSuspicion(w1, FraudSurveillance.SuspicionCategory.CRIME_FACILITATION, 50000, false, true); + assertEq(element.reasonCodeOf(id), _code(4)); + } + + function test_attestSuspicion_categoryNoneReverts() public { + vm.expectRevert(Errors.NotAuthorized.selector); + element.attestSuspicion(w1, FraudSurveillance.SuspicionCategory.NONE, 9000, false, true); + } + + // ================================================================= + // Flag lifecycle states (doc §6.2) + escalation (doc §6.3) + // ================================================================= + + function test_lifecycle_underReviewThenSarFiled() public { + uint256 id = element.attestSuspicion(w1, FraudSurveillance.SuspicionCategory.ILLICIT_FUNDS, 9000, false, true); + + vm.expectEmit(true, false, false, true); + emit FlagLifecycle(id, FraudSurveillance.FlagState.UNDER_REVIEW, _code(1)); + element.openReview(id); + + vm.expectEmit(true, false, false, true); + emit FlagLifecycle(id, FraudSurveillance.FlagState.SAR_FILED, _code(1)); + element.fileSar(id); + assertEq(uint256(element.flagOf(id).state), uint256(FraudSurveillance.FlagState.SAR_FILED)); + } + + function test_lifecycle_noAction_exception() public { + uint256 id = + element.attestSuspicion(w1, FraudSurveillance.SuspicionCategory.NO_LAWFUL_PURPOSE, 6000, false, true); + // §1023.320(c) exception: closed with no SAR, basis retained off-chain. + vm.expectEmit(true, false, false, true); + emit FlagLifecycle(id, FraudSurveillance.FlagState.NO_ACTION, _code(3)); + element.closeNoAction(id); + assertEq(uint256(element.flagOf(id).state), uint256(FraudSurveillance.FlagState.NO_ACTION)); + } + + // Terminal states are terminal: no re-transition. + function test_lifecycle_cannotTransitionAfterFiled() public { + uint256 id = element.attestSuspicion(w1, FraudSurveillance.SuspicionCategory.ILLICIT_FUNDS, 9000, false, true); + element.fileSar(id); + vm.expectRevert(Errors.NotAuthorized.selector); + element.clearFlag(id); + } + + function test_openReview_onlyFromDetected() public { + uint256 id = element.attestSuspicion(w1, FraudSurveillance.SuspicionCategory.ILLICIT_FUNDS, 9000, false, true); + element.openReview(id); + vm.expectRevert(Errors.NotAuthorized.selector); // already UNDER_REVIEW + element.openReview(id); + } + + // ================================================================= + // Deadline extension: +30d (max 60d) when suspect unidentified (doc §5.3) + // ================================================================= + + function test_extendDeadline_suspectUnknown_extendsToSixtyDays() public { + uint256 id = + element.attestSuspicion(w1, FraudSurveillance.SuspicionCategory.NO_LAWFUL_PURPOSE, 6000, false, false); + FraudSurveillance.Flag memory f0 = element.flagOf(id); + assertEq(uint256(f0.deadline), uint256(START + 30 days)); + + vm.expectEmit(true, false, false, true); + emit DeadlineExtended(id, START + 60 days); + element.extendDeadline(id); + assertEq(uint256(element.flagOf(id).deadline), uint256(START + 60 days)); + + // A day-45 filing is now timely (within the extended 60d window). + vm.warp(START + 45 days); + element.fileSar(id); + assertTrue(element.filedOnTime(id)); + } + + function test_extendDeadline_revertsWhenSuspectIdentified() public { + uint256 id = + element.attestSuspicion(w1, FraudSurveillance.SuspicionCategory.NO_LAWFUL_PURPOSE, 6000, false, true); + vm.expectRevert(Errors.NotAuthorized.selector); // suspect known => no +30d + element.extendDeadline(id); + } + + function test_extendDeadline_cannotExtendTwice() public { + uint256 id = + element.attestSuspicion(w1, FraudSurveillance.SuspicionCategory.NO_LAWFUL_PURPOSE, 6000, false, false); + element.extendDeadline(id); + vm.expectRevert(Errors.NotAuthorized.selector); + element.extendDeadline(id); + } + + function test_identifySuspect_closesExtensionPath() public { + uint256 id = + element.attestSuspicion(w1, FraudSurveillance.SuspicionCategory.NO_LAWFUL_PURPOSE, 6000, false, false); + element.identifySuspect(id); + vm.expectRevert(Errors.NotAuthorized.selector); + element.extendDeadline(id); + } +} diff --git a/test/unit/compliance/elements/OperatorSelfDealing.t.sol b/test/unit/compliance/elements/OperatorSelfDealing.t.sol new file mode 100644 index 0000000..20e132f --- /dev/null +++ b/test/unit/compliance/elements/OperatorSelfDealing.t.sol @@ -0,0 +1,365 @@ +// SPDX-License-Identifier: GPL-3.0 +pragma solidity 0.8.17; + +import {Test} from "forge-std/Test.sol"; +import {OperatorSelfDealing} from "../../../../src/compliance/elements/OperatorSelfDealing.sol"; +import {Errors} from "../../../../src/libraries/Errors.sol"; +import { + ElementMetadata, + ElementCategory, + TemporalNature, + Decidability, + ObligationTiming, + Statefulness, + ComplianceContext, + FlowType, + VenueType +} from "../../../../src/types/ComplianceTypes.sol"; + +/// @dev F-01 Operator self-dealing restriction tests. Covers metadata, setter +/// auth + events, the doc §7 test cases 1-5, every failure code (1/2/3), and +/// the fail-closed default (doc §5.5/§8.3). The gate is a symmetric negative +/// screen: a restricted party on either side blocks unless a narrow exception +/// (primary distribution / involuntary transfer) applies. +contract OperatorSelfDealingTest is Test { + // Re-declared for vm.expectEmit; Solidity 0.8.17 cannot `emit` a non-library + // contract's event by qualified name. The OperatorRole enum param canonicalizes + // to uint8 in the event signature. + event RestrictedPartySet(address indexed account, uint8 role); + event RegistryAvailabilitySet(bool available); + event PrimaryDistributorSet(address indexed distributor, bool allowed); + event InvoluntaryAgentSet(address indexed agent, bool authorized); + + address internal buyer = address(0xB0B); // ctx.buyer == check `user` (to) + address internal seller = address(0x5E11E7); // ctx.seller == check `counterparty` (from) + address internal asset = address(0xA55E7); + address internal operator = address(0x0733); + address internal stranger = address(0xBAD); + + address internal operatorEntity = address(0xDEC1); // Decipher legal entity + address internal affiliateDesk = address(0xDE54); // Rule 405 common-control desk + address internal employee = address(0xE119); // associated person (§3(a)(18)) + address internal issuer = address(0x1550E1); // primary-distribution source + address internal recoveryAgent = address(0x5A5E); // forcedTransfer/recovery authority + + OperatorSelfDealing internal f01; + + function setUp() public { + f01 = new OperatorSelfDealing(); + // Mark the roster loaded; the fail-closed default (registry unavailable) is + // exercised on a fresh instance in test_failClosed_defaultRegistryUnavailable. + f01.setRegistryAvailable(true); + } + + // --- helpers --------------------------------------------------------- + + function _code(uint32 n) internal pure returns (bytes32) { + return keccak256(abi.encode(uint16(0), bytes32("F-01-v1"), uint32(n))); + } + + /// @dev abi.encode a well-formed ComplianceContext. `flow`/`initiator` drive the + /// exception logic; buyer/seller mirror the check() params. + function _ctx(FlowType flow, address initiator) internal view returns (bytes memory) { + ComplianceContext memory c; + c.initiator = initiator; + c.buyer = buyer; + c.seller = seller; + c.tokenIn = asset; + c.tokenOut = asset; + c.venueType = VenueType.RFQ; + c.venue = address(0xF0E); + c.flowType = flow; + return abi.encode(c); + } + + /// @dev Secondary trade with a no-op initiator — the default trade shape. + function _secondaryCtx() internal view returns (bytes memory) { + return _ctx(FlowType.SECONDARY_TRADE, address(0xF0F)); + } + + // --- metadata -------------------------------------------------------- + + function test_metadata_fields() public { + ElementMetadata memory m = f01.elementMetadata(); + assertEq(m.elementId, bytes32("F-01-v1")); + assertEq(uint256(m.category), uint256(ElementCategory.CONDUCT_MONITORING)); + assertEq(uint256(m.temporal), uint256(TemporalNature.REALTIME)); + assertEq(uint256(m.decidability), uint256(Decidability.DETERMINISTIC)); + assertEq(uint256(m.timing), uint256(ObligationTiming.AT_TRADE_GATE)); + assertEq(uint256(m.statefulness), uint256(Statefulness.STATELESS)); + } + + function test_defaults_onFreshInstance() public { + OperatorSelfDealing fresh = new OperatorSelfDealing(); + assertFalse(fresh.registryAvailable()); + assertEq(uint256(fresh.roleOf(operatorEntity)), uint256(OperatorSelfDealing.OperatorRole.NONE)); + } + + // --- setter auth ----------------------------------------------------- + + function test_setRestrictedParty_revertsForStranger() public { + vm.prank(stranger); + vm.expectRevert(Errors.NotAuthorized.selector); + f01.setRestrictedParty(operatorEntity, OperatorSelfDealing.OperatorRole.OPERATOR_ENTITY); + } + + function test_setRegistryAvailable_revertsForStranger() public { + vm.prank(stranger); + vm.expectRevert(Errors.NotAuthorized.selector); + f01.setRegistryAvailable(true); + } + + function test_setPrimaryDistributor_revertsForStranger() public { + vm.prank(stranger); + vm.expectRevert(Errors.NotAuthorized.selector); + f01.setPrimaryDistributor(issuer, true); + } + + function test_setInvoluntaryAgent_revertsForStranger() public { + vm.prank(stranger); + vm.expectRevert(Errors.NotAuthorized.selector); + f01.setInvoluntaryAgent(recoveryAgent, true); + } + + function test_ownerCanSetRestrictedParty() public { + // Deployer is the owner (Ownable) => onlyOperator passes for the owner too. + f01.setRestrictedParty(operatorEntity, OperatorSelfDealing.OperatorRole.OPERATOR_ENTITY); + assertEq(uint256(f01.roleOf(operatorEntity)), uint256(OperatorSelfDealing.OperatorRole.OPERATOR_ENTITY)); + } + + function test_operatorCanSetRestrictedParty() public { + f01.setOperator(operator, true); + vm.prank(operator); + f01.setRestrictedParty(affiliateDesk, OperatorSelfDealing.OperatorRole.OPERATOR_AFFILIATE); + assertEq(uint256(f01.roleOf(affiliateDesk)), uint256(OperatorSelfDealing.OperatorRole.OPERATOR_AFFILIATE)); + } + + // --- setter events --------------------------------------------------- + + function test_setRestrictedParty_emits() public { + vm.expectEmit(true, false, false, true); + emit RestrictedPartySet(employee, uint8(OperatorSelfDealing.OperatorRole.OPERATOR_ASSOCIATED_PERSON)); + f01.setRestrictedParty(employee, OperatorSelfDealing.OperatorRole.OPERATOR_ASSOCIATED_PERSON); + } + + function test_setRegistryAvailable_emits() public { + vm.expectEmit(false, false, false, true); + emit RegistryAvailabilitySet(false); + f01.setRegistryAvailable(false); + assertFalse(f01.registryAvailable()); + } + + function test_setPrimaryDistributor_emits() public { + vm.expectEmit(true, false, false, true); + emit PrimaryDistributorSet(issuer, true); + f01.setPrimaryDistributor(issuer, true); + assertTrue(f01.allowsPrimary(issuer)); + } + + function test_setInvoluntaryAgent_emits() public { + vm.expectEmit(true, false, false, true); + emit InvoluntaryAgentSet(recoveryAgent, true); + f01.setInvoluntaryAgent(recoveryAgent, true); + assertTrue(f01.involuntaryAgent(recoveryAgent)); + } + + // --- doc §7.1 Test 1: normal pass ----------------------------------- + + function test_T1_bothClean_pass() public { + // Whitelist investor A (seller) -> whitelist investor B (buyer). Neither on + // the roster => OP_CLEAR (step 5). + (bool passed, bytes32 rc) = f01.check(buyer, seller, asset, 0, _secondaryCtx()); + assertTrue(passed); + assertEq(rc, bytes32(0)); + } + + // --- doc §7.2 Test 2: operator entity as party => code 3 ------------- + + function test_T2_operatorEntityBuyer_fails3() public { + // Decipher legal entity buys for its own account (secondary) => blocked. + f01.setRestrictedParty(buyer, OperatorSelfDealing.OperatorRole.OPERATOR_ENTITY); + (bool passed, bytes32 rc) = f01.check(buyer, seller, asset, 0, _secondaryCtx()); + assertFalse(passed); + assertEq(rc, _code(3)); + } + + function test_T2_operatorEntitySeller_fails3() public { + // Same block regardless of which side the operator entity sits on (§5.3). + f01.setRestrictedParty(seller, OperatorSelfDealing.OperatorRole.OPERATOR_ENTITY); + (bool passed, bytes32 rc) = f01.check(buyer, seller, asset, 0, _secondaryCtx()); + assertFalse(passed); + assertEq(rc, _code(3)); + } + + // --- doc §7.3 Test 3: affiliate as counterparty => code 3 ------------ + + function test_T3_affiliateCounterparty_fails3() public { + // Common-control sister desk (Rule 405) sells opposite a subscriber. A-06 + // settled control off-chain and it landed on the roster; on-chain is a + // pure membership screen. from (seller) restricted => blocked. + f01.setRestrictedParty(seller, OperatorSelfDealing.OperatorRole.OPERATOR_AFFILIATE); + (bool passed, bytes32 rc) = f01.check(buyer, seller, asset, 0, _secondaryCtx()); + assertFalse(passed); + assertEq(rc, _code(3)); + } + + function test_bothSidesRestricted_fails3() public { + // Operator internal move: both parties restricted, no exception => blocked + // (doc §3.11 boundary — F-01 does not distinguish one-side vs both-sides). + f01.setRestrictedParty(buyer, OperatorSelfDealing.OperatorRole.OPERATOR_CONTROLLED_ACCOUNT); + f01.setRestrictedParty(seller, OperatorSelfDealing.OperatorRole.OPERATOR_ENTITY); + (bool passed, bytes32 rc) = f01.check(buyer, seller, asset, 0, _secondaryCtx()); + assertFalse(passed); + assertEq(rc, _code(3)); + } + + // --- doc §7.4 Test 4: primary-distribution exception boundary -------- + + function test_T4_primaryDistribution_exempt_pass() public { + // Issuer (seller/from) distributes to a whitelist investor via the Manifest + // primary path. Issuer overlaps the operator roster but the primary + // exception clears it (OP_EXEMPT_PRIMARY). + f01.setRestrictedParty(seller, OperatorSelfDealing.OperatorRole.OPERATOR_ENTITY); + f01.setPrimaryDistributor(seller, true); + (bool passed, bytes32 rc) = f01.check(buyer, seller, asset, 0, _ctx(FlowType.PRIMARY_DISTRIBUTION, address(0))); + assertTrue(passed); + assertEq(rc, bytes32(0)); + } + + function test_T4_boundary_sameIssuerInSecondary_fails3() public { + // Boundary (doc §7.4): the same designated issuer entering a SECONDARY match + // as a party is NOT the primary path => blocked. + f01.setRestrictedParty(seller, OperatorSelfDealing.OperatorRole.OPERATOR_ENTITY); + f01.setPrimaryDistributor(seller, true); + (bool passed, bytes32 rc) = f01.check(buyer, seller, asset, 0, _secondaryCtx()); + assertFalse(passed); + assertEq(rc, _code(3)); + } + + function test_primaryFlow_butNotDesignatedDistributor_fails3() public { + // Narrow exception: PRIMARY_DISTRIBUTION flow alone is not enough — the + // from/seller must be a Manifest-designated distributor. Not designated => + // blocked. + f01.setRestrictedParty(seller, OperatorSelfDealing.OperatorRole.OPERATOR_ENTITY); + (bool passed, bytes32 rc) = f01.check(buyer, seller, asset, 0, _ctx(FlowType.PRIMARY_DISTRIBUTION, address(0))); + assertFalse(passed); + assertEq(rc, _code(3)); + } + + // --- involuntary (forcedTransfer/recovery) exception ----------------- + + function test_involuntaryTransfer_exempt_pass() public { + // Restricted party is a party, but the transfer is initiated by a registered + // recovery authority (doc §6.3②) => OP_EXEMPT_INVOLUNTARY. + f01.setRestrictedParty(buyer, OperatorSelfDealing.OperatorRole.OPERATOR_CONTROLLED_ACCOUNT); + f01.setInvoluntaryAgent(recoveryAgent, true); + (bool passed, bytes32 rc) = f01.check(buyer, seller, asset, 0, _ctx(FlowType.SECONDARY_TRADE, recoveryAgent)); + assertTrue(passed); + assertEq(rc, bytes32(0)); + } + + function test_involuntary_unregisteredInitiator_fails3() public { + // An unregistered initiator does not earn the involuntary exception. + f01.setRestrictedParty(buyer, OperatorSelfDealing.OperatorRole.OPERATOR_CONTROLLED_ACCOUNT); + (bool passed, bytes32 rc) = f01.check(buyer, seller, asset, 0, _ctx(FlowType.SECONDARY_TRADE, recoveryAgent)); + assertFalse(passed); + assertEq(rc, _code(3)); + } + + // --- doc §7.5 Test 5: fresh-wallet bypass (honest limitation) -------- + + function test_T5_freshWallet_unlisted_passes_honestLimitation() public { + // Doc §7.5: an employee routes through a brand-new wallet that is NOT on the + // address-keyed roster. On its own the on-chain mock cannot see that the + // fresh wallet resolves to the employee's ONCHAINID, so it PASSES — the + // honest limitation. The defeat comes from A-04 resolving wallet->ONCHAINID + // upstream (doc §7.5, §9.2) and from roster completeness under the §10 + // 3-layer trust model; the on-chain reflection window is the doc §12 P0 + // structural weakness, not something this element closes alone. + f01.setRestrictedParty(employee, OperatorSelfDealing.OperatorRole.OPERATOR_ASSOCIATED_PERSON); + address freshWallet = address(0xF9E54); + (bool passed, bytes32 rc) = f01.check(freshWallet, seller, asset, 0, _secondaryCtx()); + assertTrue(passed); + assertEq(rc, bytes32(0)); + } + + function test_T5_freshWallet_onceReflectedOnRoster_blocks() public { + // Mitigation realised: once A-04's wallet->ONCHAINID resolution is reflected + // onto the roster (the fresh wallet is tagged as the associated person), the + // same trade is blocked. Shows the mechanism works once the roster is + // complete (doc §10 Layer 1-2). + address freshWallet = address(0xF9E54); + f01.setRestrictedParty(freshWallet, OperatorSelfDealing.OperatorRole.OPERATOR_ASSOCIATED_PERSON); + (bool passed, bytes32 rc) = f01.check(freshWallet, seller, asset, 0, _secondaryCtx()); + assertFalse(passed); + assertEq(rc, _code(3)); + } + + // --- code 1: identity unresolved (fail-closed, A-04 upstream seam) --- + + function test_code1_zeroBuyer_fails1() public { + (bool passed, bytes32 rc) = f01.check(address(0), seller, asset, 0, _secondaryCtx()); + assertFalse(passed); + assertEq(rc, _code(1)); + } + + function test_code1_zeroSeller_fails1() public { + (bool passed, bytes32 rc) = f01.check(buyer, address(0), asset, 0, _secondaryCtx()); + assertFalse(passed); + assertEq(rc, _code(1)); + } + + // --- code 2 / fail-closed default: registry unavailable -------------- + + function test_failClosed_defaultRegistryUnavailable() public { + // Fresh instance: registryAvailable defaults false => every trade fails + // closed with OP_REGISTRY_UNAVAILABLE even with two clean parties (doc + // §5.5/§8.3 — uncertainty resolves to a block, never a pass). + OperatorSelfDealing fresh = new OperatorSelfDealing(); + (bool passed, bytes32 rc) = fresh.check(buyer, seller, asset, 0, _secondaryCtx()); + assertFalse(passed); + assertEq(rc, _code(2)); + } + + function test_code2_takesPrecedenceOverRosterMatch() public { + // Registry-unavailable is evaluated before the roster screen: even a listed + // party returns code 2, not code 3, while the roster is unloaded. + f01.setRegistryAvailable(false); + f01.setRestrictedParty(buyer, OperatorSelfDealing.OperatorRole.OPERATOR_ENTITY); + (bool passed, bytes32 rc) = f01.check(buyer, seller, asset, 0, _secondaryCtx()); + assertFalse(passed); + assertEq(rc, _code(2)); + } + + // --- context-shape robustness --------------------------------------- + + function test_shortContext_restrictedParty_blocks() public { + // A short/absent context cannot be decoded => no exception path is available + // => a restricted party is blocked (fail-closed), never accidentally exempt. + f01.setRestrictedParty(seller, OperatorSelfDealing.OperatorRole.OPERATOR_AFFILIATE); + (bool passed, bytes32 rc) = f01.check(buyer, seller, asset, 0, ""); + assertFalse(passed); + assertEq(rc, _code(3)); + } + + function test_shortContext_cleanParties_pass() public { + // With no restricted party the context is never decoded and the trade clears. + (bool passed, bytes32 rc) = f01.check(buyer, seller, asset, 0, ""); + assertTrue(passed); + assertEq(rc, bytes32(0)); + } + + // --- roster round-trip ---------------------------------------------- + + function test_roster_addThenRemove_roundTrip() public { + f01.setRestrictedParty(seller, OperatorSelfDealing.OperatorRole.OPERATOR_ENTITY); + (bool blocked,) = f01.check(buyer, seller, asset, 0, _secondaryCtx()); + assertFalse(blocked); + + // Relationship ends: removal takes effect for trades after the change (§5.4). + f01.setRestrictedParty(seller, OperatorSelfDealing.OperatorRole.NONE); + (bool passed, bytes32 rc) = f01.check(buyer, seller, asset, 0, _secondaryCtx()); + assertTrue(passed); + assertEq(rc, bytes32(0)); + } +} diff --git a/test/unit/compliance/elements/RedFlagKnowledgeBar.t.sol b/test/unit/compliance/elements/RedFlagKnowledgeBar.t.sol new file mode 100644 index 0000000..2b3a043 --- /dev/null +++ b/test/unit/compliance/elements/RedFlagKnowledgeBar.t.sol @@ -0,0 +1,341 @@ +// SPDX-License-Identifier: GPL-3.0 +pragma solidity 0.8.17; + +import {Test} from "forge-std/Test.sol"; +import {RedFlagKnowledgeBar} from "../../../../src/compliance/elements/RedFlagKnowledgeBar.sol"; +import {Errors} from "../../../../src/libraries/Errors.sol"; +import { + ElementMetadata, + ElementCategory, + Decidability, + ObligationTiming, + Statefulness, + TemporalNature +} from "../../../../src/types/ComplianceTypes.sol"; + +/// @dev A-12 Red Flag Knowledge Bar unit tests. +/// +/// Disposition wording (doc §5.2/§6.1/§7). Doc §7 states "disposition = +/// REVIEW" for a flagged trade; doc §6.1 defines FLAG (categorized) vs +/// REVIEW (uncertain/composite) as distinct dispositions that BOTH route to +/// the operator review queue (doc §6.3). This element returns the §6.1 +/// disposition value and exposes `routesToReview()` for doc §5.2/§7's +/// "routed to review" sense. Each doc §7 case below therefore asserts (a) +/// the specific flag code, (b) the §6.1 disposition, (c) routesToReview, +/// and — the load-bearing consequence — (d) that check() never blocks. +contract RedFlagKnowledgeBarTest is Test { + // Re-declared for vm.expectEmit (0.8.17 cannot `emit` a library/other + // contract's event by qualified name). Must match Events.SurveillanceFlag + // and RedFlagKnowledgeBar.ReviewResolved exactly. + event SurveillanceFlag(bytes32 indexed elementId, address indexed subject, bytes32 reasonCode); + event ReviewResolved(address indexed seller, address indexed buyer, RedFlagKnowledgeBar.Resolution resolution); + + bytes32 internal constant ELEMENT_ID = "A-12-v1"; + + address internal seller = address(0x5E11E7); + address internal buyer = address(0xB0B); + address internal operator = address(0x0733); + address internal stranger = address(0xBAD); + + RedFlagKnowledgeBar internal element; + + function setUp() public { + element = new RedFlagKnowledgeBar(); + } + + // reasonCode as the engine/off-chain audit recomputes it: encode(0, id, n). + function _code(uint32 n) internal pure returns (bytes32) { + return keccak256(abi.encode(uint16(0), ELEMENT_ID, n)); + } + + function _bit(RedFlagKnowledgeBar.RedFlag flag) internal pure returns (uint8) { + return uint8(1) << uint8(flag); + } + + // --------------------------------------------------------------- + // Metadata + // --------------------------------------------------------------- + + function test_metadata_fields() public { + ElementMetadata memory m = element.elementMetadata(); + assertEq(m.elementId, ELEMENT_ID); + assertEq(m.version, "A-12-v1"); + // Pattern C surveillance element. + assertEq(uint256(m.category), uint256(ElementCategory.CONDUCT_MONITORING)); + assertEq(uint256(m.decidability), uint256(Decidability.MONITORING_BASED)); + // Pre-trade, per-transaction, no cross-trade accrual (doc §2, §5.4). + assertEq(uint256(m.timing), uint256(ObligationTiming.AT_TRADE_GATE)); + assertEq(uint256(m.temporal), uint256(TemporalNature.REALTIME)); + assertEq(uint256(m.statefulness), uint256(Statefulness.STATELESS)); + } + + // --------------------------------------------------------------- + // Auth (Governed onlyOperator: owner + operators pass, strangers revert). + // A-12 is STATELESS: no onTransfer / onlyEngine write path exists. + // --------------------------------------------------------------- + + function test_raiseFlag_revertsForStranger() public { + vm.prank(stranger); + vm.expectRevert(Errors.NotAuthorized.selector); + element.raiseFlag(seller, buyer, RedFlagKnowledgeBar.RedFlag.RESALE_INTENT); + } + + function test_markUncertain_revertsForStranger() public { + vm.prank(stranger); + vm.expectRevert(Errors.NotAuthorized.selector); + element.markUncertain(seller, buyer); + } + + function test_resolveReview_revertsForStranger() public { + vm.prank(stranger); + vm.expectRevert(Errors.NotAuthorized.selector); + element.resolveReview(seller, buyer, RedFlagKnowledgeBar.Resolution.CLEARED_FALSE_POSITIVE); + } + + function test_raiseFlag_ownerCanRaise() public { + // The deploying test contract is owner. + element.raiseFlag(seller, buyer, RedFlagKnowledgeBar.RedFlag.WASH_CLUSTER); + (uint8 mask,,) = element.assessmentOf(seller, buyer); + assertEq(mask, _bit(RedFlagKnowledgeBar.RedFlag.WASH_CLUSTER)); + } + + function test_raiseFlag_operatorCanRaise() public { + element.setOperator(operator, true); + vm.prank(operator); + element.raiseFlag(seller, buyer, RedFlagKnowledgeBar.RedFlag.STRUCTURING); + (uint8 mask,,) = element.assessmentOf(seller, buyer); + assertEq(mask, _bit(RedFlagKnowledgeBar.RedFlag.STRUCTURING)); + } + + // --------------------------------------------------------------- + // check() NEVER blocks and NEVER leaks (doc §5.5, §6.4) — the core + // Pattern-C consequence. True both with and without a raised flag. + // --------------------------------------------------------------- + + function test_check_passes_whenClear() public { + (bool passed, bytes32 reasonCode) = element.check(buyer, seller, address(0), 0, ""); + assertTrue(passed); + assertEq(reasonCode, bytes32(0)); + } + + function test_check_passes_evenWhenFlagged_andLeaksNothing() public { + element.raiseFlag(seller, buyer, RedFlagKnowledgeBar.RedFlag.WASH_CLUSTER); + // Engine calls check(ctx.buyer, ctx.seller, ...): user=buyer, counterparty=seller. + (bool passed, bytes32 reasonCode) = element.check(buyer, seller, address(0), 0, ""); + assertTrue(passed); // A-12 alone never rejects a trade + assertEq(reasonCode, bytes32(0)); // party-facing surface carries no red-flag detail + } + + // --------------------------------------------------------------- + // doc §7 Test 1 — CLEAR (no red flag). + // --------------------------------------------------------------- + + function test_doc7_case1_clear() public { + (RedFlagKnowledgeBar.Disposition d, uint8 mask) = element.screen(seller, buyer); + assertEq(uint256(d), uint256(RedFlagKnowledgeBar.Disposition.CLEAR)); + assertEq(mask, 0); + assertFalse(element.routesToReview(seller, buyer)); + + (bool passed,) = element.check(buyer, seller, address(0), 0, ""); + assertTrue(passed); + } + + // --------------------------------------------------------------- + // doc §7 Test 2 — FLAG_RESALE_INTENT (affiliate seller flips 3-day lot to a + // FOR_OTHERS buyer → conduit). The immediate-flip + purpose judgment is the + // off-chain screen (mock boundary); on-chain we record the mark. + // --------------------------------------------------------------- + + function test_doc7_case2_flagResaleIntent() public { + vm.expectEmit(true, true, false, true); + emit SurveillanceFlag(ELEMENT_ID, seller, _code(1)); + element.raiseFlag(seller, buyer, RedFlagKnowledgeBar.RedFlag.RESALE_INTENT); + + (RedFlagKnowledgeBar.Disposition d, uint8 mask) = element.screen(seller, buyer); + assertEq(uint256(d), uint256(RedFlagKnowledgeBar.Disposition.FLAG)); + assertEq(mask, _bit(RedFlagKnowledgeBar.RedFlag.RESALE_INTENT)); + assertTrue(element.routesToReview(seller, buyer)); // doc §7 "→ REVIEW" (routed) + + (bool passed,) = element.check(buyer, seller, address(0), 0, ""); + assertTrue(passed); // not blocked by A-12 + } + + // --------------------------------------------------------------- + // doc §7 Test 3 — boundary: threshold-adjacent structuring. Each split leg + // PASSes C-08/D-01 (A-12 does not judge the ">" threshold, doc §7.3), yet + // A-12 marks the near-threshold splitting pattern. + // --------------------------------------------------------------- + + function test_doc7_case3_boundaryStructuring() public { + vm.expectEmit(true, true, false, true); + emit SurveillanceFlag(ELEMENT_ID, seller, _code(5)); + element.raiseFlag(seller, buyer, RedFlagKnowledgeBar.RedFlag.STRUCTURING); + + (RedFlagKnowledgeBar.Disposition d, uint8 mask) = element.screen(seller, buyer); + assertEq(uint256(d), uint256(RedFlagKnowledgeBar.Disposition.FLAG)); + assertEq(mask, _bit(RedFlagKnowledgeBar.RedFlag.STRUCTURING)); + assertTrue(element.routesToReview(seller, buyer)); + + (bool passed,) = element.check(buyer, seller, address(0), 0, ""); + assertTrue(passed); + } + + // --------------------------------------------------------------- + // doc §7 Test 4 — FLAG_WASH_CLUSTER (both parties one owner cluster per A-04). + // --------------------------------------------------------------- + + function test_doc7_case4_flagWashCluster() public { + vm.expectEmit(true, true, false, true); + emit SurveillanceFlag(ELEMENT_ID, seller, _code(4)); + element.raiseFlag(seller, buyer, RedFlagKnowledgeBar.RedFlag.WASH_CLUSTER); + + (RedFlagKnowledgeBar.Disposition d, uint8 mask) = element.screen(seller, buyer); + assertEq(uint256(d), uint256(RedFlagKnowledgeBar.Disposition.FLAG)); + assertEq(mask, _bit(RedFlagKnowledgeBar.RedFlag.WASH_CLUSTER)); + assertTrue(element.routesToReview(seller, buyer)); + + (bool passed,) = element.check(buyer, seller, address(0), 0, ""); + assertTrue(passed); + } + + // --------------------------------------------------------------- + // doc §7 Test 5 — false positive → operator CLEAR. The Test-4 wash-cluster + // mark turns out to be a legit self-transfer; the operator resolves it as a + // false positive → disposition normalizes to CLEAR, but the raw flag mask is + // RETAINED as the reasonable-inquiry audit trail (doc §7.5). + // --------------------------------------------------------------- + + function test_doc7_case5_falsePositiveOperatorClear() public { + element.raiseFlag(seller, buyer, RedFlagKnowledgeBar.RedFlag.WASH_CLUSTER); + + vm.expectEmit(true, true, false, true); + emit ReviewResolved(seller, buyer, RedFlagKnowledgeBar.Resolution.CLEARED_FALSE_POSITIVE); + element.resolveReview(seller, buyer, RedFlagKnowledgeBar.Resolution.CLEARED_FALSE_POSITIVE); + + (RedFlagKnowledgeBar.Disposition d, uint8 mask) = element.screen(seller, buyer); + assertEq(uint256(d), uint256(RedFlagKnowledgeBar.Disposition.CLEAR)); // normalized + assertEq(mask, _bit(RedFlagKnowledgeBar.RedFlag.WASH_CLUSTER)); // raw signal retained + assertFalse(element.routesToReview(seller, buyer)); + + // The audit record still shows the raw flag + the operator's resolution. + (uint8 rawMask, bool uncertain, RedFlagKnowledgeBar.Resolution res) = element.assessmentOf(seller, buyer); + assertEq(rawMask, _bit(RedFlagKnowledgeBar.RedFlag.WASH_CLUSTER)); + assertFalse(uncertain); + assertEq(uint256(res), uint256(RedFlagKnowledgeBar.Resolution.CLEARED_FALSE_POSITIVE)); + + (bool passed,) = element.check(buyer, seller, address(0), 0, ""); + assertTrue(passed); + } + + // --------------------------------------------------------------- + // REVIEW_REDFLAG_UNCERTAIN — ambiguous/composite goes straight to REVIEW + // (doc §6.2, §11.4). Distinct disposition value from FLAG. + // --------------------------------------------------------------- + + function test_markUncertain_yieldsReviewDisposition() public { + vm.expectEmit(true, true, false, true); + emit SurveillanceFlag(ELEMENT_ID, seller, _code(8)); + element.markUncertain(seller, buyer); + + (RedFlagKnowledgeBar.Disposition d,) = element.screen(seller, buyer); + assertEq(uint256(d), uint256(RedFlagKnowledgeBar.Disposition.REVIEW)); + assertTrue(element.routesToReview(seller, buyer)); + + (bool passed,) = element.check(buyer, seller, address(0), 0, ""); + assertTrue(passed); + } + + // --------------------------------------------------------------- + // Every flag code fires at least once, in doc §6.2 order: RedFlag(i) => n=i+1, + // plus REVIEW_REDFLAG_UNCERTAIN => n=8. Also pins the flag->axis mapping. + // --------------------------------------------------------------- + + function test_everyFlagCode_encodesInDocOrder_andMapsAxis() public { + for (uint8 i = 0; i <= uint8(RedFlagKnowledgeBar.RedFlag.SUSPICIOUS_PATTERN); i++) { + RedFlagKnowledgeBar.RedFlag flag = RedFlagKnowledgeBar.RedFlag(i); + assertEq(element.reasonCodeFor(flag), _code(uint32(i) + 1)); + + RedFlagKnowledgeBar.Axis expectedAxis = i <= uint8(RedFlagKnowledgeBar.RedFlag.AI_INCONSISTENT) + ? RedFlagKnowledgeBar.Axis.RESALE + : RedFlagKnowledgeBar.Axis.MARKET_CONDUCT; + assertEq(uint256(element.axisOf(flag)), uint256(expectedAxis)); + } + assertEq(element.reviewUncertainCode(), _code(8)); + } + + function test_everyFlagCode_emitsWhenRaised() public { + // Distinct (seller,buyer) per category so each mark is independent. + for (uint8 i = 0; i <= uint8(RedFlagKnowledgeBar.RedFlag.SUSPICIOUS_PATTERN); i++) { + RedFlagKnowledgeBar.RedFlag flag = RedFlagKnowledgeBar.RedFlag(i); + address s = address(uint160(0x1000 + i)); + address b = address(uint160(0x2000 + i)); + + vm.expectEmit(true, true, false, true); + emit SurveillanceFlag(ELEMENT_ID, s, _code(uint32(i) + 1)); + element.raiseFlag(s, b, flag); + + (RedFlagKnowledgeBar.Disposition d, uint8 mask) = element.screen(s, b); + assertEq(uint256(d), uint256(RedFlagKnowledgeBar.Disposition.FLAG)); + assertEq(mask, _bit(flag)); + } + } + + // --------------------------------------------------------------- + // Multiple categories accumulate in the mask (doc §5.2 appends flags). + // --------------------------------------------------------------- + + function test_multipleFlags_accumulateInMask() public { + element.raiseFlag(seller, buyer, RedFlagKnowledgeBar.RedFlag.RESALE_INTENT); + element.raiseFlag(seller, buyer, RedFlagKnowledgeBar.RedFlag.CONTROL_UNDISCLOSED); + + (RedFlagKnowledgeBar.Disposition d, uint8 mask) = element.screen(seller, buyer); + assertEq(uint256(d), uint256(RedFlagKnowledgeBar.Disposition.FLAG)); + assertEq( + mask, + _bit(RedFlagKnowledgeBar.RedFlag.RESALE_INTENT) | _bit(RedFlagKnowledgeBar.RedFlag.CONTROL_UNDISCLOSED) + ); + } + + // Re-raising the same category is idempotent (bit OR, no double-set). + function test_raiseFlag_idempotentPerCategory() public { + element.raiseFlag(seller, buyer, RedFlagKnowledgeBar.RedFlag.PRICE_ANOMALY); + element.raiseFlag(seller, buyer, RedFlagKnowledgeBar.RedFlag.PRICE_ANOMALY); + (uint8 mask,,) = element.assessmentOf(seller, buyer); + assertEq(mask, _bit(RedFlagKnowledgeBar.RedFlag.PRICE_ANOMALY)); + } + + // --------------------------------------------------------------- + // resolveReview outcomes other than false-positive: A-12 records them but + // does NOT clear the disposition and NEVER blocks (doc §5.5, §6.1). Suspend/ + // SAR is a Recipe/operator action outside this element. + // --------------------------------------------------------------- + + function test_resolveReview_riskConfirmed_keepsFlag_andDoesNotBlock() public { + element.raiseFlag(seller, buyer, RedFlagKnowledgeBar.RedFlag.SUSPICIOUS_PATTERN); + element.resolveReview(seller, buyer, RedFlagKnowledgeBar.Resolution.RISK_CONFIRMED); + + (RedFlagKnowledgeBar.Disposition d,) = element.screen(seller, buyer); + assertEq(uint256(d), uint256(RedFlagKnowledgeBar.Disposition.FLAG)); // still flagged + assertTrue(element.routesToReview(seller, buyer)); + + (bool passed,) = element.check(buyer, seller, address(0), 0, ""); + assertTrue(passed); // A-12 never blocks, even on confirmed risk + } + + // A fresh mark after a false-positive clear reopens triage (resolution -> PENDING). + function test_raiseFlag_afterClear_reopensReview() public { + element.raiseFlag(seller, buyer, RedFlagKnowledgeBar.RedFlag.WASH_CLUSTER); + element.resolveReview(seller, buyer, RedFlagKnowledgeBar.Resolution.CLEARED_FALSE_POSITIVE); + // Cleared -> CLEAR. + (RedFlagKnowledgeBar.Disposition dCleared,) = element.screen(seller, buyer); + assertEq(uint256(dCleared), uint256(RedFlagKnowledgeBar.Disposition.CLEAR)); + + // A new, different signal reopens the review. + element.raiseFlag(seller, buyer, RedFlagKnowledgeBar.RedFlag.PRICE_ANOMALY); + (RedFlagKnowledgeBar.Disposition dReopened, uint8 mask) = element.screen(seller, buyer); + assertEq(uint256(dReopened), uint256(RedFlagKnowledgeBar.Disposition.FLAG)); + assertEq(mask, _bit(RedFlagKnowledgeBar.RedFlag.WASH_CLUSTER) | _bit(RedFlagKnowledgeBar.RedFlag.PRICE_ANOMALY)); + (,, RedFlagKnowledgeBar.Resolution res) = element.assessmentOf(seller, buyer); + assertEq(uint256(res), uint256(RedFlagKnowledgeBar.Resolution.PENDING)); + } +} diff --git a/test/unit/compliance/elements/RegMIssuerBuying.t.sol b/test/unit/compliance/elements/RegMIssuerBuying.t.sol new file mode 100644 index 0000000..52e3bcd --- /dev/null +++ b/test/unit/compliance/elements/RegMIssuerBuying.t.sol @@ -0,0 +1,467 @@ +// SPDX-License-Identifier: GPL-3.0 +pragma solidity 0.8.17; + +import {Test} from "forge-std/Test.sol"; +import {RegMIssuerBuying} from "../../../../src/compliance/elements/RegMIssuerBuying.sol"; +import {Errors} from "../../../../src/libraries/Errors.sol"; +import { + ElementMetadata, + ElementCategory, + TemporalNature, + Decidability, + ObligationTiming, + Statefulness, + ComplianceContext, + FlowType +} from "../../../../src/types/ComplianceTypes.sol"; + +/// @dev F-04 Reg M no-purchase-during-distribution gate tests. Covers metadata, +/// setter auth/events, the doc §7 cases T1-T14, the §5.3 direction rule +/// (roster member as buyer fails / as seller passes), both statutory branches +/// (§242.102 issuer code 4 / §242.101 participant code 5), the §6.3 redemption +/// exception, the §5.5 fail-closed default, and every failure code (1-5). +contract RegMIssuerBuyingTest is Test { + // Re-declared for vm.expectEmit; enum params canonicalize to uint8 in the + // signature (Solidity 0.8.17 cannot `emit` a contract's event by name). + event CoveredSecuritySet(address indexed asset, bool covered); + event OfferingStatusSet(address indexed asset, uint8 status); + event ExceptionProfileSet(address indexed asset, uint8 profile); + event RegistryUnverifiedSet(address indexed asset, bool unverified); + event AdtvSet(address indexed asset, uint256 adtv); + event RestrictedRoleSet(address indexed asset, address indexed account, uint8 role); + event ClusterRoleSet(address indexed asset, address indexed account, uint8 role); + event InfoBarrierCertifiedSet(address indexed asset, address indexed account, bool certified); + event PoliciesCertifiedSet(address indexed asset, address indexed account, bool certified); + + address internal asset = address(0xA55E7); + address internal issuer = address(0x1550E7); + address internal buyer = address(0xB0B); + address internal seller = address(0x5E11E7); + address internal operator = address(0x0733); + address internal stranger = address(0xBAD); + + RegMIssuerBuying internal e; + + function setUp() public { + e = new RegMIssuerBuying(); + } + + // --- helpers --------------------------------------------------------- + + function _code(uint32 n) internal pure returns (bytes32) { + return keccak256(abi.encode(uint16(0), bytes32("F-04-v1"), uint32(n))); + } + + /// @dev abi.encode(ComplianceContext) — the exact element context the engine + /// passes (ComplianceEngine._runChecks). buyer/seller/flow are the only + /// fields F-04 can observe (flow) or the engine binds to `user` (buyer). + function _ctx(address buyer_, address seller_, FlowType flow) internal pure returns (bytes memory) { + ComplianceContext memory c; + c.buyer = buyer_; + c.seller = seller_; + c.flowType = flow; + return abi.encode(c); + } + + /// @dev The engine passes ctx.buyer as `user`; mirror that here. + function _check(address buyer_, address seller_, uint256 amount, FlowType flow) + internal + view + returns (bool passed, bytes32 rc) + { + return e.check(buyer_, seller_, asset, amount, _ctx(buyer_, seller_, flow)); + } + + /// @dev A covered asset in an active continuous offering, profile NONE. + function _activeCoveredAsset() internal { + e.setCoveredSecurity(asset, true); + e.setOfferingStatus(asset, RegMIssuerBuying.OfferingStatus.ONGOING_CONTINUOUS); + } + + // --- metadata -------------------------------------------------------- + + function test_metadata() public { + ElementMetadata memory m = e.elementMetadata(); + assertEq(m.elementId, bytes32("F-04-v1")); + assertEq(m.version, "F-04-v1"); + assertEq(uint256(m.category), uint256(ElementCategory.CONDUCT_MONITORING)); + assertEq(uint256(m.temporal), uint256(TemporalNature.REALTIME)); + assertEq(uint256(m.decidability), uint256(Decidability.DETERMINISTIC)); + assertEq(uint256(m.timing), uint256(ObligationTiming.AT_TRADE_GATE)); + assertEq(uint256(m.statefulness), uint256(Statefulness.STATELESS)); + } + + function test_defaults() public { + assertFalse(e.coveredSecurityOf(asset)); + assertEq(uint256(e.offeringStatusOf(asset)), uint256(RegMIssuerBuying.OfferingStatus.UNSET)); + assertEq(uint256(e.exceptionProfileOf(asset)), uint256(RegMIssuerBuying.ExceptionProfile.NONE)); + assertFalse(e.registryUnverifiedOf(asset)); + assertEq(e.adtvOf(asset), 0); + assertEq(uint256(e.restrictedRoleOf(asset, buyer)), uint256(RegMIssuerBuying.RestrictedRole.NONE)); + } + + // --- setter auth: stranger reverts ---------------------------------- + + function test_setCoveredSecurity_revertsForNonOperator() public { + vm.prank(stranger); + vm.expectRevert(Errors.NotAuthorized.selector); + e.setCoveredSecurity(asset, true); + } + + function test_setOfferingStatus_revertsForNonOperator() public { + vm.prank(stranger); + vm.expectRevert(Errors.NotAuthorized.selector); + e.setOfferingStatus(asset, RegMIssuerBuying.OfferingStatus.ONGOING_CONTINUOUS); + } + + function test_setExceptionProfile_revertsForNonOperator() public { + vm.prank(stranger); + vm.expectRevert(Errors.NotAuthorized.selector); + e.setExceptionProfile(asset, RegMIssuerBuying.ExceptionProfile.OPEN_END_UIT); + } + + function test_setRegistryUnverified_revertsForNonOperator() public { + vm.prank(stranger); + vm.expectRevert(Errors.NotAuthorized.selector); + e.setRegistryUnverified(asset, true); + } + + function test_setAdtv_revertsForNonOperator() public { + vm.prank(stranger); + vm.expectRevert(Errors.NotAuthorized.selector); + e.setAdtv(asset, 1_000_000); + } + + function test_setRestrictedRole_revertsForNonOperator() public { + vm.prank(stranger); + vm.expectRevert(Errors.NotAuthorized.selector); + e.setRestrictedRole(asset, buyer, RegMIssuerBuying.RestrictedRole.ISSUER); + } + + function test_setClusterRole_revertsForNonOperator() public { + vm.prank(stranger); + vm.expectRevert(Errors.NotAuthorized.selector); + e.setClusterRole(asset, buyer, RegMIssuerBuying.RestrictedRole.ISSUER); + } + + function test_setInfoBarrierCertified_revertsForNonOperator() public { + vm.prank(stranger); + vm.expectRevert(Errors.NotAuthorized.selector); + e.setInfoBarrierCertified(asset, buyer, true); + } + + function test_setPoliciesCertified_revertsForNonOperator() public { + vm.prank(stranger); + vm.expectRevert(Errors.NotAuthorized.selector); + e.setPoliciesCertified(asset, buyer, true); + } + + // --- setter auth: owner + operator succeed -------------------------- + + function test_ownerCanSet() public { + // The deployer (this contract) is the owner via Governed/Ownable. + e.setCoveredSecurity(asset, true); + assertTrue(e.coveredSecurityOf(asset)); + } + + function test_operatorCanSet() public { + e.setOperator(operator, true); + vm.prank(operator); + e.setRestrictedRole(asset, buyer, RegMIssuerBuying.RestrictedRole.DISTRIBUTION_PARTICIPANT); + assertEq( + uint256(e.restrictedRoleOf(asset, buyer)), uint256(RegMIssuerBuying.RestrictedRole.DISTRIBUTION_PARTICIPANT) + ); + } + + // --- setter events --------------------------------------------------- + + function test_setCoveredSecurity_emits() public { + vm.expectEmit(true, false, false, true); + emit CoveredSecuritySet(asset, true); + e.setCoveredSecurity(asset, true); + } + + function test_setOfferingStatus_emits() public { + vm.expectEmit(true, false, false, true); + emit OfferingStatusSet(asset, uint8(RegMIssuerBuying.OfferingStatus.COMPLETED)); + e.setOfferingStatus(asset, RegMIssuerBuying.OfferingStatus.COMPLETED); + } + + function test_setExceptionProfile_emits() public { + vm.expectEmit(true, false, false, true); + emit ExceptionProfileSet(asset, uint8(RegMIssuerBuying.ExceptionProfile.OPEN_END_UIT)); + e.setExceptionProfile(asset, RegMIssuerBuying.ExceptionProfile.OPEN_END_UIT); + } + + function test_setRegistryUnverified_emits() public { + vm.expectEmit(true, false, false, true); + emit RegistryUnverifiedSet(asset, true); + e.setRegistryUnverified(asset, true); + } + + function test_setAdtv_emits() public { + vm.expectEmit(true, false, false, true); + emit AdtvSet(asset, 5_000_000); + e.setAdtv(asset, 5_000_000); + } + + function test_setRestrictedRole_emits() public { + vm.expectEmit(true, true, false, true); + emit RestrictedRoleSet(asset, issuer, uint8(RegMIssuerBuying.RestrictedRole.ISSUER)); + e.setRestrictedRole(asset, issuer, RegMIssuerBuying.RestrictedRole.ISSUER); + } + + function test_setClusterRole_emits() public { + vm.expectEmit(true, true, false, true); + emit ClusterRoleSet(asset, buyer, uint8(RegMIssuerBuying.RestrictedRole.ISSUER)); + e.setClusterRole(asset, buyer, RegMIssuerBuying.RestrictedRole.ISSUER); + } + + function test_setInfoBarrierCertified_emits() public { + vm.expectEmit(true, true, false, true); + emit InfoBarrierCertifiedSet(asset, buyer, true); + e.setInfoBarrierCertified(asset, buyer, true); + } + + function test_setPoliciesCertified_emits() public { + vm.expectEmit(true, true, false, true); + emit PoliciesCertifiedSet(asset, buyer, true); + e.setPoliciesCertified(asset, buyer, true); + } + + // --- doc §7 test cases ---------------------------------------------- + + /// T1 — issuer on-DEX buy during distribution => FAIL §242.102 (issuer branch). + function test_T1_issuerBuy_blocked_issuerBranch() public { + _activeCoveredAsset(); + e.setRestrictedRole(asset, issuer, RegMIssuerBuying.RestrictedRole.ISSUER); + (bool passed, bytes32 rc) = _check(issuer, seller, 1, FlowType.SECONDARY_TRADE); + assertFalse(passed); + assertEq(rc, _code(4)); + } + + /// T2 — affiliated purchaser buy (safe harbor not met) => FAIL (issuer branch). + function test_T2_affiliatedPurchaserBuy_blocked() public { + _activeCoveredAsset(); + e.setRestrictedRole(asset, buyer, RegMIssuerBuying.RestrictedRole.AFFILIATED_PURCHASER); + (bool passed, bytes32 rc) = _check(buyer, seller, 1, FlowType.SECONDARY_TRADE); + assertFalse(passed); + assertEq(rc, _code(4)); + } + + /// T3 — ordinary qualified buyer, not on roster, cluster unrelated => PASS. + function test_T3_generalBuyer_passes() public { + _activeCoveredAsset(); + (bool passed, bytes32 rc) = _check(buyer, seller, 1, FlowType.SECONDARY_TRADE); + assertTrue(passed); + assertEq(rc, bytes32(0)); + } + + /// T4 ★ — restricted person SELLING => PASS (direction asymmetry, §5.3). The + /// issuer is the counterparty (seller), never `user`, so is not screened. + function test_T4_restrictedPersonSelling_passes() public { + _activeCoveredAsset(); + e.setRestrictedRole(asset, issuer, RegMIssuerBuying.RestrictedRole.ISSUER); + // buyer is a clean buyer; issuer is the seller/counterparty. + (bool passed, bytes32 rc) = _check(buyer, issuer, 1, FlowType.SECONDARY_TRADE); + assertTrue(passed); + assertEq(rc, bytes32(0)); + } + + /// T5 ★ — offering COMPLETED, issuer buys => PASS (window closed, §3.4). + function test_T5_completedOffering_issuerBuy_passes() public { + e.setCoveredSecurity(asset, true); + e.setOfferingStatus(asset, RegMIssuerBuying.OfferingStatus.COMPLETED); + e.setRestrictedRole(asset, issuer, RegMIssuerBuying.RestrictedRole.ISSUER); + (bool passed, bytes32 rc) = _check(issuer, seller, 1, FlowType.SECONDARY_TRADE); + assertTrue(passed); + assertEq(rc, bytes32(0)); + } + + /// T6 ★ — redemption flow => PASS (structurally outside the gate, §6.3), even + /// when the buyer is the issuer. + function test_T6_redemptionFlow_passes() public { + _activeCoveredAsset(); + e.setRestrictedRole(asset, issuer, RegMIssuerBuying.RestrictedRole.ISSUER); + (bool passed, bytes32 rc) = _check(issuer, seller, 1, FlowType.REDEMPTION); + assertTrue(passed); + assertEq(rc, bytes32(0)); + } + + /// T7 ★ — issuer's indirect buy via a third-party wallet => FAIL (indirectly + /// caught via control cluster, §3.8). + function test_T7_indirectBuy_viaCluster_blocked() public { + _activeCoveredAsset(); + // buyer is NOT directly on the roster, but is in the issuer's control cluster. + e.setClusterRole(asset, buyer, RegMIssuerBuying.RestrictedRole.ISSUER); + (bool passed, bytes32 rc) = _check(buyer, seller, 1, FlowType.SECONDARY_TRADE); + assertFalse(passed); + assertEq(rc, _code(4)); + } + + /// T8 ★ — participant de minimis buy (< 2% ADTV + policies) => PASS (exception). + function test_T8_participantDeMinimis_passes() public { + _activeCoveredAsset(); + e.setRestrictedRole(asset, buyer, RegMIssuerBuying.RestrictedRole.DISTRIBUTION_PARTICIPANT); + e.setAdtv(asset, 1_000_000); + e.setPoliciesCertified(asset, buyer, true); + // 19_999 / 1_000_000 = 1.9999% < 2% => de minimis. + (bool passed, bytes32 rc) = _check(buyer, seller, 19_999, FlowType.SECONDARY_TRADE); + assertTrue(passed); + assertEq(rc, bytes32(0)); + } + + /// T9 ★ — issuer small buy (de minimis attempt) => FAIL. Issuer branch has NO + /// de minimis (§3.12 asymmetry). + function test_T9_issuerDeMinimis_stillBlocked() public { + _activeCoveredAsset(); + e.setRestrictedRole(asset, issuer, RegMIssuerBuying.RestrictedRole.ISSUER); + e.setAdtv(asset, 1_000_000); + e.setPoliciesCertified(asset, issuer, true); + (bool passed, bytes32 rc) = _check(issuer, seller, 1, FlowType.SECONDARY_TRADE); + assertFalse(passed); + assertEq(rc, _code(4)); + } + + /// T10 — covered asset with no offeringStatus => FAIL (fail-closed, §5.5). + function test_T10_offeringStatusMissing_failClosed() public { + e.setCoveredSecurity(asset, true); // covered, but offeringStatus left UNSET + e.setRestrictedRole(asset, issuer, RegMIssuerBuying.RestrictedRole.ISSUER); + (bool passed, bytes32 rc) = _check(issuer, seller, 1, FlowType.SECONDARY_TRADE); + assertFalse(passed); + assertEq(rc, _code(2)); + } + + /// T11 ★ — excepted-security mis-declaration (private fund declared OPEN_END_UIT) + /// => REVIEW conflict (§3.11, no reverse relaxation). + function test_T11_exceptionProfileConflict_review() public { + e.setCoveredSecurity(asset, true); + e.setOfferingStatus(asset, RegMIssuerBuying.OfferingStatus.ONGOING_CONTINUOUS); + e.setExceptionProfile(asset, RegMIssuerBuying.ExceptionProfile.OPEN_END_UIT); + (bool passed, bytes32 rc) = _check(buyer, seller, 1, FlowType.SECONDARY_TRADE); + assertFalse(passed); + assertEq(rc, _code(1)); + } + + /// T12 ★ — affiliate satisfying the (3) safe harbor => PASS (dropped from + /// restricted status, §3.7). Registered AFFILIATED_PURCHASER but certified. + function test_T12_safeHarborAffiliate_passes() public { + _activeCoveredAsset(); + e.setRestrictedRole(asset, buyer, RegMIssuerBuying.RestrictedRole.AFFILIATED_PURCHASER); + e.setInfoBarrierCertified(asset, buyer, true); + (bool passed, bytes32 rc) = _check(buyer, seller, 1, FlowType.SECONDARY_TRADE); + assertTrue(passed); + assertEq(rc, bytes32(0)); + } + + /// T13 — unresolved roster red flag => REVIEW (§5.5). + function test_T13_registryUnverified_review() public { + _activeCoveredAsset(); + e.setRegistryUnverified(asset, true); + e.setRestrictedRole(asset, issuer, RegMIssuerBuying.RestrictedRole.ISSUER); + (bool passed, bytes32 rc) = _check(issuer, seller, 1, FlowType.SECONDARY_TRADE); + assertFalse(passed); + assertEq(rc, _code(3)); + } + + /// T14 ★ — a token that is not the covered security => PASS (not applicable), + /// even when the buyer would be the issuer. + function test_T14_notCoveredSecurity_notApplicable() public { + // asset never marked covered (default). Even an ISSUER role is irrelevant. + e.setRestrictedRole(asset, issuer, RegMIssuerBuying.RestrictedRole.ISSUER); + (bool passed, bytes32 rc) = _check(issuer, seller, 1, FlowType.SECONDARY_TRADE); + assertTrue(passed); + assertEq(rc, bytes32(0)); + } + + // --- direction rule (explicit) -------------------------------------- + + function test_direction_rosterMemberAsBuyer_fails() public { + _activeCoveredAsset(); + e.setRestrictedRole(asset, buyer, RegMIssuerBuying.RestrictedRole.ISSUER); + (bool passed,) = _check(buyer, seller, 1, FlowType.SECONDARY_TRADE); + assertFalse(passed); + } + + function test_direction_rosterMemberAsSeller_passes() public { + _activeCoveredAsset(); + // Same roster member, now on the SELL side (counterparty). Buyer is clean. + e.setRestrictedRole(asset, seller, RegMIssuerBuying.RestrictedRole.ISSUER); + (bool passed, bytes32 rc) = _check(buyer, seller, 1, FlowType.SECONDARY_TRADE); + assertTrue(passed); + assertEq(rc, bytes32(0)); + } + + // --- both branches: distinct codes ---------------------------------- + + function test_participantBuy_blocked_participantBranch() public { + _activeCoveredAsset(); + e.setRestrictedRole(asset, buyer, RegMIssuerBuying.RestrictedRole.DISTRIBUTION_PARTICIPANT); + (bool passed, bytes32 rc) = _check(buyer, seller, 1, FlowType.SECONDARY_TRADE); + assertFalse(passed); + assertEq(rc, _code(5)); // §242.101(a) + } + + function test_sellingSecurityHolderBuy_blocked_issuerBranch() public { + _activeCoveredAsset(); + e.setRestrictedRole(asset, buyer, RegMIssuerBuying.RestrictedRole.SELLING_SECURITY_HOLDER); + (bool passed, bytes32 rc) = _check(buyer, seller, 1, FlowType.SECONDARY_TRADE); + assertFalse(passed); + assertEq(rc, _code(4)); // §242.102(a) + } + + // --- primary distribution flow is also gated ------------------------ + + function test_primaryDistributionFlow_issuerBuy_blocked() public { + _activeCoveredAsset(); + e.setRestrictedRole(asset, issuer, RegMIssuerBuying.RestrictedRole.ISSUER); + (bool passed, bytes32 rc) = _check(issuer, seller, 1, FlowType.PRIMARY_DISTRIBUTION); + assertFalse(passed); + assertEq(rc, _code(4)); + } + + // --- de minimis boundaries + preconditions -------------------------- + + function test_deMinimis_exactly2pct_blocked() public { + _activeCoveredAsset(); + e.setRestrictedRole(asset, buyer, RegMIssuerBuying.RestrictedRole.DISTRIBUTION_PARTICIPANT); + e.setAdtv(asset, 1_000_000); + e.setPoliciesCertified(asset, buyer, true); + // 20_000 / 1_000_000 = exactly 2% => strict < fails => blocked (participant). + (bool passed, bytes32 rc) = _check(buyer, seller, 20_000, FlowType.SECONDARY_TRADE); + assertFalse(passed); + assertEq(rc, _code(5)); + } + + function test_deMinimis_withoutPolicies_blocked() public { + _activeCoveredAsset(); + e.setRestrictedRole(asset, buyer, RegMIssuerBuying.RestrictedRole.DISTRIBUTION_PARTICIPANT); + e.setAdtv(asset, 1_000_000); + // policiesCertified defaults false => no exception even though amount tiny. + (bool passed, bytes32 rc) = _check(buyer, seller, 1, FlowType.SECONDARY_TRADE); + assertFalse(passed); + assertEq(rc, _code(5)); + } + + function test_deMinimis_withoutAdtv_blocked() public { + _activeCoveredAsset(); + e.setRestrictedRole(asset, buyer, RegMIssuerBuying.RestrictedRole.DISTRIBUTION_PARTICIPANT); + e.setPoliciesCertified(asset, buyer, true); + // adtv defaults 0 => threshold undefined => no exception. + (bool passed, bytes32 rc) = _check(buyer, seller, 1, FlowType.SECONDARY_TRADE); + assertFalse(passed); + assertEq(rc, _code(5)); + } + + // --- fail-closed: short context skips redemption relaxation --------- + + function test_shortContext_skipsRedemptionRelaxation_stillBlocks() public { + _activeCoveredAsset(); + e.setRestrictedRole(asset, issuer, RegMIssuerBuying.RestrictedRole.ISSUER); + // An empty context cannot be decoded for FlowType; the relaxation is skipped + // and the issuer buy is blocked (fail-closed direction). + (bool passed, bytes32 rc) = e.check(issuer, seller, asset, 1, ""); + assertFalse(passed); + assertEq(rc, _code(4)); + } +} diff --git a/tools/deploy-wave3/DeployWave3Elements.s.sol b/tools/deploy-wave3/DeployWave3Elements.s.sol new file mode 100644 index 0000000..e8e06e7 --- /dev/null +++ b/tools/deploy-wave3/DeployWave3Elements.s.sol @@ -0,0 +1,51 @@ +// SPDX-License-Identifier: GPL-3.0 +pragma solidity 0.8.17; + +import {Script} from "forge-std/Script.sol"; +import {ElementRegistry} from "../../src/registry/ElementRegistry.sol"; +import {Affiliate} from "../../src/compliance/elements/Affiliate.sol"; +import {RedFlagKnowledgeBar} from "../../src/compliance/elements/RedFlagKnowledgeBar.sol"; +import {BadActorDisqualification} from "../../src/compliance/elements/BadActorDisqualification.sol"; +import {OperatorSelfDealing} from "../../src/compliance/elements/OperatorSelfDealing.sol"; +import {FraudSurveillance} from "../../src/compliance/elements/FraudSurveillance.sol"; +import {RegMIssuerBuying} from "../../src/compliance/elements/RegMIssuerBuying.sol"; + +/// @title DeployWave3Elements +/// @notice Opt-in deployment for the illustrative wave-3 compliance element library. +/// @dev Kept separate from DeployStack (mirrors tools/deploy-wave2) so the default +/// BUIDL-like/Reg D demo does not force the larger compliance graph through one +/// compiler invocation. Like wave-2, this script sits outside default Foundry +/// script discovery and does NOT add the elements to an active recipe, so the +/// default demo's deployment scope and compile graph are unchanged. +/// +/// F-03 FraudSurveillance is STATEFUL (BaseStatefulElement): it needs setEngine() +/// wiring after deployment so the ComplianceEngine commit hook can drive its +/// post-trade onTransfer aggregation, exactly like wave-2 D-01 HolderCount. +/// +/// F-01 OperatorSelfDealing ships fail-closed: `registryAvailable` defaults to +/// false, so every trade fails closed (code 2) until an operator loads the +/// restricted-party roster and calls setRegistryAvailable(true). This is +/// intentional; the script does NOT auto-enable it. Operator action is required +/// before F-01 passes anything. +contract DeployWave3Elements is Script { + function run() external { + address registryAddress = vm.envAddress("ELEMENT_REGISTRY"); + address engineAddress = vm.envAddress("COMPLIANCE_ENGINE"); + uint256 deployerPk = vm.envUint("DEPLOYER_PRIVATE_KEY"); + + vm.startBroadcast(deployerPk); + ElementRegistry registry = ElementRegistry(registryAddress); + + registry.registerElement(bytes32("A-06-v1"), address(new Affiliate())); + registry.registerElement(bytes32("A-12-v1"), address(new RedFlagKnowledgeBar())); + registry.registerElement(bytes32("E-03-v1"), address(new BadActorDisqualification())); + registry.registerElement(bytes32("F-01-v1"), address(new OperatorSelfDealing())); + registry.registerElement(bytes32("F-04-v1"), address(new RegMIssuerBuying())); + + // F-03 is stateful: wire the engine before registration (HolderCount pattern). + FraudSurveillance fraudSurveillance = new FraudSurveillance(); + fraudSurveillance.setEngine(engineAddress); + registry.registerElement(bytes32("F-03-v1"), address(fraudSurveillance)); + vm.stopBroadcast(); + } +}