# 내부거래 온체인 공증 서비스 — 준비 노트

작성일: 2026-08-14
상태: **구축 전 준비 단계.** 목적·구조·제약만 기록한다. 상세 설계는 착수 시점에.
관련: [P2P_SETTLEMENT_RESTRUCTURE.md](./P2P_SETTLEMENT_RESTRUCTURE.md) · [P2P_MATCHES_INTEGRITY.md](./P2P_MATCHES_INTEGRITY.md)

---

## 1. 목적

**자금 이동의 근거를 온체인 데이터로 확보한다.**

동일 파트너 회원 간 거래(INNER)는 USDT 가 플랫폼 밖으로 나가지 않으므로 온체인 흔적이 없다. 지금은 합성 해시로 채우고 있다.

```
p2p_settlements.tx_hash = "INNER_ps_7b2d7ee00668"
deposits.tx_hash        = "INNER_ps_..."
```

**이 값은 체인에 존재하지 않는다.** 파트너 웹훅으로도 나가 대사를 시도하면 찾을 수 없다.

### 실측 규모

```
INNER 정산   44건 · 39,007 USDT   건당 2.97 ~ 5,270 USDT
INNER 입금   34건 · 10,696 USDT
```

---

## 2. 구조 — A/B 마스터 그룹 순환

TORQ 처럼 **외부 서비스**로 분리한다. 단순한 API 기반 HD 지갑 서비스.

```
B 마스터 ──전송──> A 하위 지갑 ──집금──> A 마스터
A 마스터 ──전송──> B 하위 지갑 ──집금──> B 마스터
```

- **A · B 는 각각 HD 구조를 갖는 마스터 지갑 그룹**이다
- 출금자에게 A 또는 B 하위 지갑이 배정되고, **반대 그룹 마스터에서 그 주소로 전송**한다
- 하위 지갑에 입금되면 자기 마스터로 집금해 **출금 가능 금액을 상시 유지**한다

Cryptoments 가 이미 쓰는 HD 입금 패턴(하위 지갑 수신 → MASTER 집금)과 같은 모양이다.

### 2.1 왜 두 그룹인가

한 방향으로만 흐르면 한쪽 마스터가 마른다. A↔B 를 섞어 **양방향 흐름으로 균형을 유지**한다.

> **배정을 순수 랜덤 대신 "잔액 많은 쪽에서 보낸다"로 하면 리밸런싱이 저절로 된다.** 랜덤은 큰 거래가 몰릴 때 편향된다.

### 2.2 체인 — BSC

가스비가 가장 낮다. BEP-20 전송이 건당 수십 센트 수준이라, 전송 + 집금 2회를 쳐도 비용이 무시할 만하다.

이미 등록돼 있다.

```
blockchain_networks  id=1 · chain_symbol BSC · chain_id 56 · EVM
derivation_base_path m/44'/60'/1'
```

---

## 3. 인터페이스

전송 공증기에 가깝다. Cryptoments 가 "이 금액만큼 온체인 흔적을 남겨줘"라고 부르면, 서비스가 자기 지갑 사이에서 그 금액을 실제로 옮기고 해시를 돌려준다.

```
POST /transfers   { amount, ref }   →   { txHash, from, to, confirmedAt }
```

그 해시를 **내부 원장에 기록**한다.

---

## 4. 파트너 노출

**파트너에게 전달한다.** 거래에 온체인 근거가 있다는 사실을 파트너도 알아야 한다.

> ⚠️ **명명에 주의한다.** `transactionHash` 로 주면 파트너가 자기 지갑 전송으로 오해한다. 이 해시에는 **파트너 주소가 나타나지 않는다** — 공증 서비스의 A/B 지갑 간 이동이다.
>
> 별도 필드로 주고 의미를 명시한다.
> ```
> evidenceTxHash · evidenceNetwork: BSC
> ```
> 파트너 문서에 "Cryptoments 정산 인프라의 온체인 기록이며 귀사 지갑 주소는 포함되지 않습니다"를 명기한다.

기존 `INNER_ps_...` 합성 해시는 폐기한다.

---

## 5. 제약

| | |
|---|---|
| **필요 자금** | 최대 동시 거래액 이상이 A·B 마스터에 상시 필요. 부족하면 전송이 막힌다 |
| **집금 주기** | 하위 지갑에 묶인 동안은 못 쓴다. 즉시 집금은 가스비가 늘고, 배치는 유동성이 잠긴다 |
| **가스비** | 건당 2회(전송 + 집금). BSC 라 총액은 작으나 BNB 잔액 감시는 필요 |
| **실패 처리** | **거래를 막지 않는다.** 증거 확보가 목적이므로 거래는 성립시키고 공증만 재시도한다. 대신 "증거 미확보" 상태를 추적해야 한다 |

---

## 6. 미결

| 항목 | 내용 |
|---|---|
| 하위 지갑 단위 | 출금자별 고정 vs 거래별. **만들면서 결정** — 만들어 둔 것으로 롤링 가능 |
| 자금 조달·회계 | A/B 마스터 USDT 의 소유와 회계 처리 |
| 외부 분리 이유 | 책임 분리인지 타 서비스 재사용 예정인지에 따라 인터페이스 범위가 달라진다 |
| 증거 미확보 추적 | 공증 실패 건을 어디에 남기고 어떻게 재시도할지 |
