Control Rail 개요
Control Rail은 비수탁 멀티시그 지갑 위에 컴플라이언스·통제를 얹은 기관용 레일입니다. 정책을 앱·서버가 아니라 체인 합의(XRPL)로 우회 불가능하게 강제하고, 그 증명을 온체인에 남깁니다.
무엇을 해결하나
기관이 디지털자산을 운용하려면 두 가지가 동시에 필요합니다 — 우회 불가능한 통제와 지켰다는 증명. 기존 방식(EOA + 서버 정책, MPC)은 둘 중 하나에서 무너집니다. Control Rail은 멀티시그 정족수와 온체인 기록으로 둘 다 충족합니다.
- 우회 불가능한 통제 — 모든 거래가 멀티시그 정족수를 통과해야 성립합니다. 앱·서버를 우회해도 체인이 막습니다.
- 온체인 증명 — 정책 통과·정족수 서명이 원장에 기록됩니다. 사후 로그가 아니라 변조 불가능한 증거입니다.
- 비수탁 — 유저 키는 디바이스에만 있고 우리는 보관하지 않습니다. 우리 혼자서는 거래를 만들 수 없습니다.
역할 경계
누가 무엇을 책임지는지가 명확히 갈립니다. 우리는 인프라만 운영하고 비즈니스 정책은 판단하지 않습니다.
| 주체 | 역할 |
|---|---|
| 기관 | 비즈니스 정책(한도·화이트리스트·허용 자산 등)을 정하고 /sign에서 승인(서명)한다. |
| 우리 (ANAM145) | 그 승인이 등록된 signer의 것인지 검증 → 모아서 → 우리 RPC로 브로드캐스트 → 전 과정을 기록·미터링하는 레일 인프라. 정책 판단은 하지 않는다. |
| 체인 | 최종적으로 정족수를 강제한다. 진짜 enforcement는 여기서 일어난다. |
거래 흐름
유저 intent에서 출발해 체인에서 끝납니다. 게이트웨이는 오케스트레이션만 하고 거래 자체는 만들지 못합니다. 검증은 가스 절약용 사전 검증이고, 최종 정족수 강제는 온체인이 합니다.
유저 → 게이트웨이
POST /submit · 토큰 · txId · userSignature
토큰 검증
verifyToken — tenant·user·wallet 해석
기관 /sign 호출
operation·address·tx 전달 → institutionSignature 또는 reject
KYT 평가 (옵션)
kytOn이면 kyt.evaluate — block이면 여기서 중단
안암 서명
anamSigner.sign — operation 무관 항상
검증 · 결합
adapter.verify — 등록 pubkey 유효서명 + 정족수 충족 확인
브로드캐스트
adapter.submit — 우리 RPC로 제출
체인 최종 강제
체인이 정족수를 최종 강제
결과 반환
같은 응답으로 status · hash
Signer 프리셋 · 복구
지갑은 user·institution·anam 3자 멀티시그입니다. 안암 signer는 모든 거래의 정족수 멤버이며, 프리셋에 따라 복구 가능 여부가 갈립니다.
| 프리셋 | 가중치 (user·inst·anam) | 평상시 거래 | 복구 |
|---|---|---|---|
| STRICT (기본) | 1·1·1 / Q=3 | 세 명 전원 필수 | 없음 |
| RECOVERABLE (옵션) | 1·2·2 / Q=4 | 세 명 전원 필수 | institution+anam = 4 |
데이터 경계 (비수탁)
키 재료는 절대 서버로 넘어가지 않습니다. SDK가 디바이스에서 키를 만들고 서명하며, 서버로는 공개키·서명값만 전달됩니다.
| 작업 | 클라이언트(SDK)에서 | 서버로 | 절대 안 감 |
|---|---|---|---|
| 지갑 생성 | 유저 키 생성(로컬) | 유저 공개키 | 개인키 · 니모닉 |
| 거래 | tx 디코드·유저 확인 → 서명 | 유저 서명값 | 개인키 |
| 복구 (키 분실) | 새 키 생성(로컬) | 새 공개키 | 신·구 개인키 |
| 복원 (니모닉 보유) | 니모닉 → 같은 키 재파생 | 없음 (이미 등록된 키) | 니모닉 |