Skip to content

feat(compliance): Manifest 기반 범용 Element 파라미터 지원 - #98

Closed
0xMuang wants to merge 2 commits into
mainfrom
feature/generic-element-parameters
Closed

feat(compliance): Manifest 기반 범용 Element 파라미터 지원#98
0xMuang wants to merge 2 commits into
mainfrom
feature/generic-element-parameters

Conversation

@0xMuang

@0xMuang 0xMuang commented Sep 8, 2026

Copy link
Copy Markdown
Collaborator

작업 배경

기존 BUIDL-like 데모는 5,000,000 ether 최소금액을 BUIDL 전용 Element와 Recipe 코드에 직접 포함하고 있었습니다. 이 구조에서는 같은 최소금액 규칙을 다른 자산에 재사용하기 어렵고, 금액을 변경하려면 새 컨트랙트 버전을 배포해야 합니다.

이번 PR은 규칙 로직은 범용 Element가 담당하고, 자산별 값은 Manifest가 소유하도록 분리합니다. 관련 설계 논의는 #90, #97을 참고했습니다.

ADR-010(#90) 대비 적용 범위

이 PR은 ADR-010의 모든 질문과 제안을 확정하거나 구현하지 않습니다. BUIDL-like 최소금액이라는 한 개의 자산별 값을 Manifest compiled plan으로 이관하는 한정된 범위입니다.

  • 적용: D-1의 일부(Manifest parameter), Q2의 한 선택지(bounded bytes), Q4의 parameter commitment 부분
  • 미적용: Jurisdiction.allowedJurisdiction 등 다른 자산별 Element 설정 이관
  • 미적용: D-2의 check 인터페이스에 elementId 추가
  • 미적용: Element 구현 주소를 policy commitment에 추가하는 D-3
  • 미적용: Element/Recipe 교체 및 긴급 업그레이드 거버넌스, Recipe latest pointer 통제
  • 미적용: 감독기관 질의에 대한 이력 재구성 절차와 전체 Element predicate 정규화

따라서 #90/#97의 나머지 거버넌스·운영 질문은 별도 최종 ADR에서 닫아야 합니다.

주요 변경

1. Manifest 기반 Element 파라미터

  • ElementParameter { elementId, value } 타입 추가
  • Manifest 등록 및 지연 업데이트 시 bounded parameter 입력 지원
  • 빈 값, 중복 Element, 사용되지 않는 Element, 256바이트 초과 값을 거부
  • parameter를 각 compiled Element rule과 함께 저장
  • parameter 값을 binding plan hash와 전체 compiled plan hash에 포함
  • parameter 변경도 기존 Manifest timelock과 이력 관리 절차를 사용

2. 기존 Element 호환성 유지

  • parameter가 없는 기존 Element에는 기존과 동일한 abi.encode(ComplianceContext) 전달
  • parameter가 있는 Element에만 abi.encode(ComplianceContext, bytes) 전달
  • 기존 IComplianceElement ABI는 변경하지 않음
  • parameter가 없는 Manifest의 기존 binding hash 계산 방식 유지

3. 범용 최소 거래금액 규칙

  • 범용 MIN-TRADE-v1 Element 추가
  • Manifest가 abi.encode(uint256 minimumAmount) 형태로 금액을 주입
  • 거래금액이 최소금액 이상이면 통과하는 inclusive 기준 적용
  • parameter가 없거나 잘못됐거나 0이면 fail-closed
  • 최소금액 전용 독립 Recipe 추가

4. BUIDL-like 데모 재구성

기존 BUIDL 전용 하위 컴포넌트 대신 다음 독립 Recipe를 조합합니다.

  1. Reg D 506(c)
  2. ICA 3(c)(7) Qualified Purchaser
  3. Minimum Trade Amount

기존 데모 동작을 보존하기 위해 5,000,000 ether를 Manifest parameter로 사용합니다. 이 값은 실제 BlackRock/Securitize BUIDL 정책이라고 주장하지 않으며, 현재는 데모의 양방향 거래 최소금액으로만 취급합니다.

기존 BuidlMinimumInvestmentBuidlLikeFundRecipe는 배포·소스 호환성을 위해 남겨두지만 신규 데모 배포에서는 사용하지 않습니다.

5. 온보딩 도구 반영

  • Factory에 parameter-aware 자산 등록 및 Manifest 업데이트 경로 추가
  • DeployStack, testnet RFQ, demo scenario 배선 갱신
  • CLI BUIDL-like profile에 세 Recipe와 최소금액 parameter 반영
  • production Toolkit의 입력 검증, Safe calldata, compiled plan commitment 및 배포 후 parameter 검증 지원
  • 관련 아키텍처, 정책, 제품 명세, 결정 기록 갱신

검증 결과

  • targeted Forge 테스트: 82/82 통과
  • 전체 forge test --offline: 878/878 통과
  • Toolkit build/smoke: 통과
  • CLI build/smoke: 통과
  • BUIDL-like Anvil E2E: 7/7 및 dashboard, 양방향 RFQ, QP 만료/복구, CLI settlement 통과
  • GitHub Actions repository-wide CI: 통과
  • git diff --check: 통과

현재 리뷰 상태 — 병합 전 수정 필요

독립 코드·아키텍처 리뷰 결과 현재 상태는 REQUEST CHANGES입니다.

  • 기존 BuidlLikeFundReciperecipeId=3을 새 최소금액 Recipe가 재사용하는 identity 충돌 수정
  • CLI가 기존 Manifest를 retire하기 전에 Factory capability와 필요한 Recipe/Element를 확인하도록 preflight 추가
  • parameter가 없는 profile은 기존 Factory 함수를 사용하도록 호환성 복구
  • CLI status/check가 latest Recipe를 재해석하지 않고 실제 compiled rule과 parameter를 사용하도록 Engine 판정과 정렬
  • opaque parameter가 비밀값 검사를 우회하지 않도록 schema-aware 검증 보강

위 사항을 수정하고 회귀 테스트를 추가한 뒤 재검토해야 합니다.

@0xMuang 0xMuang changed the title feat(compliance): bind generic Element parameters to manifests feat(compliance): Manifest 기반 범용 Element 파라미터 지원 Sep 8, 2026
@0xMuang

0xMuang commented Sep 11, 2026

Copy link
Copy Markdown
Collaborator Author

종료 결정

현재 PR은 방향 자체는 유지하지만, 변경 범위가 너무 넓고 아래 안전성 문제가 한 PR에 섞여 있어 병합하지 않고 종료합니다.

  • Recipe ID 충돌
  • 새 기능 지원 여부를 확인하기 전에 기존 Manifest를 교체할 수 있는 온보딩 순서
  • parameter 없는 기존 Factory 경로와의 호환성
  • 실제 compiled binding과 CLI status/check 판정의 불일치
  • opaque bytes에 대한 Element별 스키마 검증 부족

원격 브랜치 feature/generic-element-parameters와 기존 커밋은 참고용으로 보존합니다.

후속 작업은 다음 두 PR로 분리합니다.

  1. Manifest Element parameter 기반 기능

    • bounded parameter 저장·commitment
    • schema-aware 검증
    • 기존 parameter-less 경로 호환성
    • compiled binding 기준 조회와 안전한 onboarding preflight
  2. BUIDL-like profile 이전

    • 범용 Minimum Trade Amount Element/Recipe
    • 충돌 없는 신규 Recipe ID
    • BUIDL 전용 최소금액 컴포넌트의 신규 배포 경로 제외
    • CLI·배포 스크립트·문서·Anvil E2E 갱신

정책 방향은 “모든 설정을 Manifest로 이동”이 아니라, 자산별로 달라지고 정책 판정 의미에 영향을 주는 값만 Manifest가 소유하는 것으로 제한합니다.

@0xMuang

0xMuang commented Sep 11, 2026

Copy link
Copy Markdown
Collaborator Author

위 분리 계획에 따라 이 PR은 병합하지 않고 닫습니다. 원격 브랜치는 삭제하지 않습니다.

@0xMuang 0xMuang closed this Sep 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant