# USDC 에스크로 서비스 조사 결과

## 개요

중고차 거래 특성상 **구매자 보호**(차량 확보 전 대금 지불 불안)와 **판매자 보호**(차량 인도 후 미수금 위험)를 모두 해결해야 합니다.

---

## 1. 사용 가능한 USDC 에스크로 서비스

### Option A: Circle Refund Protocol (추천 ⭐)

Circle에서 2025년 4월 출시한 스마트 컨트랙트 기반 에스크로 프로토콜

**특징:**
- **비수탁형(Non-Custodial)**: 제3자가 자금을 직접 보유하지 않음
- **중재자 시스템**: 분쟁 발생 시 중재자가 수령자에게 전달 또는 발신자에게 환불만 가능
- **락업 기간 설정**: 일정 기간 후 자동 해제
- **오픈소스**: GitHub에 코드 공개

**작동 방식:**
```
구매자 → USDC 예치 → 스마트 컨트랙트(락업)
                          ↓
                    [조건 충족 확인]
                          ↓
              판매자에게 USDC 전달 또는 환불
```

**비용:** 무료 (Gas fee만 발생)

**참고 링크:**
- https://www.circle.com/blog/refund-protocol-non-custodial-dispute-resolution-for-stablecoin-payments
- https://github.com/circlefin/stablecoin-evm

---

### Option B: Uniscrow

블록체인 에스크로 전문 서비스

**특징:**
- Ethereum + USDC 기반
- API, SDK, White Label 제공
- 자동화된 KPI 기반 결제 (API로 조건 검증)
- 법인/스타트업 지원

**비용:** 거래액의 1% (최소 $20)

**적합 시나리오:** 빠른 도입이 필요할 때

**참고 링크:**
- https://uniscrow.com/
- https://uniscrow.com/blockchain-escrow-payment/

---

### Option C: Guaranty Escrow

20년 이상 에스크로 경험을 가진 기업

**특징:**
- BitGo 기관급 멀티시그 커스터디
- USDC, USDT 지원
- 규제 준수 (미국 기준)
- 24/7 자산 보호

**비용:** 문의 필요 (기관 수준 서비스)

**참고 링크:**
- https://www.guaranty-escrow.com/1031-exchange-aspen/stablecoin-escrow-company/

---

### Option D: 자체 스마트 컨트랙트 개발

Circle의 오픈소스 코드를 활용한 커스텀 솔루션

**장점:**
- 완전한 커스터마이징
- 수수료 없음 (Gas만)
- 비즈니스 로직 직접 구현

**단점:**
- 개발 및 보안 감사 필요
- 스마트 컨트랙트 취약점 위험

---

## 2. AutonetSellCar 맞춤 에스크로 플로우 제안

```
┌─────────────────────────────────────────────────────────────────┐
│                    차량 구매 에스크로 플로우                      │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  [1단계] 구매자: USDC를 에스크로 컨트랙트에 예치                  │
│          └→ 상태: "대금 예치 완료" (구매자 보호)                  │
│                                                                 │
│  [2단계] Grantech: 예치 확인 후 한국 딜러에게 차량 대금 지불       │
│          └→ 상태: "차량 확보 중"                                 │
│                                                                 │
│  [3단계] 차량 인천항 도착 & 선적                                 │
│          └→ 상태: "운송 중" (B/L 업로드)                         │
│                                                                 │
│  [4단계] 몽골 통관 완료 & 인도                                   │
│          └→ 상태: "인도 완료"                                    │
│                                                                 │
│  [5단계] 구매자 인수 확인 (앱에서 버튼 클릭)                       │
│          └→ 에스크로 해제 → Grantech에 USDC 전달                 │
│                                                                 │
│  [분쟁 시] 중재자(Grantech 또는 제3자)가 증거 검토 후 결정         │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘
```

---

## 3. 코인 월렛 통합 방안

### 추천 스택: WalletConnect + Wagmi

**지원 월렛:**
- MetaMask
- Coinbase Wallet
- Trust Wallet
- Rainbow
- 200+ 기타 월렛

**설치:**
```bash
npm install wagmi viem @web3modal/wagmi @tanstack/react-query
```

**구현 예시:**
```typescript
// Web3 Provider 설정
import { createWeb3Modal } from '@web3modal/wagmi/react'
import { defaultWagmiConfig } from '@web3modal/wagmi/react/config'

const config = defaultWagmiConfig({
  chains: [mainnet, polygon, arbitrum, base],
  projectId: 'YOUR_WALLETCONNECT_PROJECT_ID',
  metadata: {
    name: 'AutonetSellCar',
    description: 'Korean Used Car Export Platform',
    url: 'https://autonetsellcar.com',
    icons: ['https://autonetsellcar.com/logo.png']
  }
})

// 컴포넌트에서 사용
function ConnectButton() {
  const { address, isConnected } = useAccount()
  const { connect } = useConnect()

  return (
    <button onClick={() => open()}>
      {isConnected ? `${address.slice(0,6)}...` : 'Connect Wallet'}
    </button>
  )
}
```

**참고 링크:**
- https://docs.walletconnect.com/web3modal/nextjs/about

---

## 4. 추천 구현 전략

### Phase 1: 빠른 MVP (1-2주)
- **Uniscrow API** 연동
- 기본 월렛 연결 (WalletConnect)
- 구매 플로우에 에스크로 통합

### Phase 2: 자체 솔루션 (1-2개월)
- Circle Refund Protocol 기반 커스텀 스마트 컨트랙트
- 배송 상태와 연동된 자동 해제 조건
- 분쟁 해결 대시보드

### Phase 3: 고급 기능
- 다중 서명(Multi-sig) 에스크로
- 부분 해제 (단계별 결제)
- 보험 연동

---

## 5. 블록체인 선택

| 체인 | Gas Fee | 속도 | USDC 지원 | 추천도 |
|------|---------|------|-----------|--------|
| **Base** | $0.01 미만 | 빠름 | ✅ | ⭐⭐⭐ |
| Polygon | $0.01-0.05 | 빠름 | ✅ | ⭐⭐⭐ |
| Arbitrum | $0.05-0.20 | 빠름 | ✅ | ⭐⭐ |
| Ethereum | $1-50 | 느림 | ✅ | ⭐ |

**추천:** Circle이 만든 **Base** 체인 - 저렴한 Gas, 빠른 속도, USDC 네이티브 지원

---

## 6. 에스크로 스마트 컨트랙트 예시 (Solidity)

```solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";

contract CarEscrow is ReentrancyGuard {
    IERC20 public usdc;

    enum EscrowState { Created, Funded, Shipped, Delivered, Completed, Disputed, Refunded }

    struct Escrow {
        address buyer;
        address seller;
        uint256 amount;
        EscrowState state;
        uint256 createdAt;
        string vehicleId;
    }

    mapping(uint256 => Escrow) public escrows;
    uint256 public escrowCount;

    address public arbiter;

    event EscrowCreated(uint256 indexed escrowId, address buyer, address seller, uint256 amount);
    event EscrowFunded(uint256 indexed escrowId);
    event VehicleShipped(uint256 indexed escrowId);
    event VehicleDelivered(uint256 indexed escrowId);
    event EscrowCompleted(uint256 indexed escrowId);
    event EscrowRefunded(uint256 indexed escrowId);
    event DisputeRaised(uint256 indexed escrowId);

    constructor(address _usdc, address _arbiter) {
        usdc = IERC20(_usdc);
        arbiter = _arbiter;
    }

    // 에스크로 생성 및 USDC 예치
    function createEscrow(
        address _seller,
        uint256 _amount,
        string memory _vehicleId
    ) external nonReentrant returns (uint256) {
        require(_amount > 0, "Amount must be greater than 0");
        require(usdc.transferFrom(msg.sender, address(this), _amount), "Transfer failed");

        escrowCount++;
        escrows[escrowCount] = Escrow({
            buyer: msg.sender,
            seller: _seller,
            amount: _amount,
            state: EscrowState.Funded,
            createdAt: block.timestamp,
            vehicleId: _vehicleId
        });

        emit EscrowCreated(escrowCount, msg.sender, _seller, _amount);
        emit EscrowFunded(escrowCount);

        return escrowCount;
    }

    // 판매자: 차량 선적 완료 표시
    function markShipped(uint256 _escrowId) external {
        Escrow storage escrow = escrows[_escrowId];
        require(msg.sender == escrow.seller, "Only seller");
        require(escrow.state == EscrowState.Funded, "Invalid state");

        escrow.state = EscrowState.Shipped;
        emit VehicleShipped(_escrowId);
    }

    // 구매자: 차량 인수 확인 → 판매자에게 대금 전달
    function confirmDelivery(uint256 _escrowId) external nonReentrant {
        Escrow storage escrow = escrows[_escrowId];
        require(msg.sender == escrow.buyer, "Only buyer");
        require(escrow.state == EscrowState.Shipped, "Invalid state");

        escrow.state = EscrowState.Completed;
        require(usdc.transfer(escrow.seller, escrow.amount), "Transfer failed");

        emit VehicleDelivered(_escrowId);
        emit EscrowCompleted(_escrowId);
    }

    // 분쟁 제기
    function raiseDispute(uint256 _escrowId) external {
        Escrow storage escrow = escrows[_escrowId];
        require(
            msg.sender == escrow.buyer || msg.sender == escrow.seller,
            "Only buyer or seller"
        );
        require(
            escrow.state == EscrowState.Funded || escrow.state == EscrowState.Shipped,
            "Invalid state"
        );

        escrow.state = EscrowState.Disputed;
        emit DisputeRaised(_escrowId);
    }

    // 중재자: 분쟁 해결
    function resolveDispute(uint256 _escrowId, bool _releaseToBuyer) external nonReentrant {
        require(msg.sender == arbiter, "Only arbiter");
        Escrow storage escrow = escrows[_escrowId];
        require(escrow.state == EscrowState.Disputed, "Not disputed");

        if (_releaseToBuyer) {
            escrow.state = EscrowState.Refunded;
            require(usdc.transfer(escrow.buyer, escrow.amount), "Transfer failed");
            emit EscrowRefunded(_escrowId);
        } else {
            escrow.state = EscrowState.Completed;
            require(usdc.transfer(escrow.seller, escrow.amount), "Transfer failed");
            emit EscrowCompleted(_escrowId);
        }
    }
}
```

---

## 7. 참고 자료

- [Circle Refund Protocol](https://www.circle.com/blog/refund-protocol-non-custodial-dispute-resolution-for-stablecoin-payments)
- [Circle Stablecoin EVM GitHub](https://github.com/circlefin/stablecoin-evm)
- [Uniscrow Blockchain Escrow](https://uniscrow.com/blockchain-escrow-payment/)
- [Guaranty Escrow Stablecoin Services](https://www.guaranty-escrow.com/1031-exchange-aspen/stablecoin-escrow-company/)
- [WalletConnect Web3Modal Docs](https://docs.walletconnect.com/web3modal/nextjs/about)
- [Propy Onchain Escrow](https://www.inman.com/2024/10/24/propy-advances-onchain-escrow/)

---

---

# USDC 대금 수령 시 국내 법적 검토

## 결론 요약

| 항목 | 현재 상태 | 위험도 |
|------|----------|--------|
| VASP 등록 의무 | **해당 가능성 높음** | 🔴 높음 |
| 외국환거래법 | **2025 하반기 신고 의무화** | 🔴 높음 |
| 법인세 | **과세 대상** | 🟡 중간 |
| 부가가치세 | **불명확 (해석 필요)** | 🟡 중간 |
| 자금세탁방지 | **Travel Rule 적용** | 🔴 높음 |

---

## 8. 가상자산사업자(VASP) 등록 의무

### 현행법 (특금법)

특금법 제2조에 따르면, **가상자산의 매도, 매수, 교환, 이전, 보관, 관리, 중개, 알선** 등의 영업을 하는 자는 가상자산사업자로 신고해야 합니다.

**Grantech 해당 여부 분석:**

| 행위 | VASP 해당? | 설명 |
|------|-----------|------|
| USDC 수령 (대금결제) | △ 불명확 | 단순 수령은 해당 안 될 수 있음 |
| USDC → 원화 환전 | ✅ 해당 | 교환 행위로 해석 가능 |
| 에스크로 보관 | ✅ 해당 | 보관/관리로 해석 가능 |
| 고객 월렛 제공 | ✅ 해당 | 관리 서비스로 해석 |

### VASP 등록 요건

1. **ISMS 인증** (한국인터넷진흥원) - 102개 심사 항목
2. **실명확인 입출금계정** - 은행과 계약 필요
3. **대표자/임원 결격사유 없음**
4. **AML/KYC 체계 구축**

### 미등록 시 처벌

> **최대 5년 이하 징역 또는 5천만원 이하 벌금**

---

## 9. 외국환거래법 적용

### 2025년 개정 사항 (중요!)

2025년 하반기부터 **가상자산 국제거래 신고 의무화**가 시행됩니다.

**신고 의무 내용:**
- 국제 가상자산 거래 사업자는 **사전 등록** 필요
- **매월** 한국은행에 거래 보고서 제출
- 데이터는 국세청, 관세청, 금융당국과 공유

**위반 시 문제:**
- 국제 가상자산 거래의 **88%가 불법 외환거래**로 적발 (관세청 추정)
- 총 **1.65조원** 규모의 외환범죄가 가상자산 관련

### Grantech 리스크

```
몽골 구매자 → USDC 송금 → Grantech (한국)
                              ↓
                    [외국환거래법 적용 대상]
```

---

## 10. 세금 문제

### 법인세 (해당)

법인이 가상자산을 취득/처분하면 **법인세 과세 대상**입니다.

```
USDC 수령 시점: 시가로 원화 환산 → 수익 인식
USDC 처분 시점: 취득가와 처분가 차이 → 손익 인식
```

**취득가액 평가방법:**
- 거래소 경유: **이동평균법**
- 그 외: **선입선출법**

### 부가가치세 (불명확)

현재 가상자산 결제에 대한 부가세 규정이 명확하지 않습니다.

**쟁점:**
- 차량 판매 대금을 USDC로 받으면 과세표준은?
- USDC → 원화 환전 시 부가세 적용?

**권장:** 세무사 자문 필요

---

## 11. 디지털자산기본법 (2025-2026)

### 2025년 6월 통과

디지털자산기본법(DABA)이 통과되어 **2026년 1월 시행** 예정입니다.

**주요 내용:**
- 스테이블코인 발행자 **자본금 50억원** 요구
- 거래소의 자체 스테이블코인 발행 **금지**
- 은행이 51% 이상 지분 보유해야 스테이블코인 발행 가능
- **원화 스테이블코인** 규제 도입

### Grantech 영향

- USDC는 **외국 스테이블코인**으로 분류
- 사용 자체는 금지되지 않으나, **규제 준수 부담 증가**

---

## 12. 자금세탁방지 (AML)

### Travel Rule 강화

2025년 11월부터 **모든 금액**에 Travel Rule 적용 (기존 100만원 미만 면제 폐지)

**의무 사항:**
- 송금인/수취인 정보 확인
- 거래소 간 정보 공유
- 의심거래 보고 (STR)

---

## 13. 법적 리스크 최소화 방안

### Option A: 직접 USDC 수령 (고위험)

```
[필요 조치]
1. VASP 등록 (ISMS 인증, 실명계좌)
2. 외국환거래 신고
3. AML/KYC 시스템 구축
4. 세무 자문

[예상 비용] 1-2억원 이상 + 6개월 이상 소요
[위험] VASP 등록 심사 1년 이상 지연 중
```

### Option B: 제3자 결제대행 활용 (중위험)

```
[구조]
구매자 → USDC → 결제대행사(해외 VASP) → 원화 → Grantech

[장점]
- VASP 등록 불필요
- 외국환거래법 리스크 감소

[단점]
- 수수료 발생 (1-3%)
- 결제대행사 의존
```

**가능한 서비스:**
- Circle 비즈니스 계정
- Coinbase Commerce
- BitPay

### Option C: 해외 법인 설립 (저위험)

```
[구조]
구매자 → USDC → Grantech Mongolia LLC → 한국 법인

[장점]
- 한국 VASP 규제 회피
- 몽골에서 합법적 운영

[단점]
- 해외법인 설립/운영 비용
- 이전가격 세무 이슈
```

### Option D: 원화 결제만 수령 (무위험)

```
[구조]
구매자 → 현지 거래소에서 USDC → 원화 환전 → 송금 → Grantech

[장점]
- 모든 규제 회피
- 기존 외환 시스템 활용

[단점]
- 고객 불편
- 송금 수수료 발생
```

---

## 14. 권장 사항

### 단기 (즉시)
1. **세무사/법무사 자문** 받기
2. **Option D** (원화 결제)로 시작
3. 규제 동향 모니터링

### 중기 (6개월 내)
1. **Option B** (결제대행) 검토
2. 해외 결제대행사 계약
3. 몽골 규제 환경 조사

### 장기 (1년 이상)
1. 디지털자산기본법 시행 후 재검토
2. **Option A** (VASP 등록) 또는 **Option C** (해외법인) 결정

---

## 15. 법적 검토 참고 자료

- [한국 가상자산법과 스테이블코인 전망](https://bd-notes2155.com/blog/2025/11/13/korea-virtual-asset-law-stablecoin-outlook-2026/)
- [Korea Digital Asset Basic Act](https://www.thekoreanlawblog.com/2025/09/korean-digital-asset-basic-act.html)
- [Korea Stablecoin Regulation Framework](https://law.asia/korea-stablecoin-regulation-framework/)
- [가상자산 사업자 등록 절차](https://www.coinbro.blog/2025/06/vasp-registration-guide.html)
- [Korea Foreign Exchange Transactions Regulations](https://www.lexology.com/library/detail.aspx?g=e4901a9c-d89b-4337-9d09-1e9d01fc4ccf)
- [South Korea Cross-Border Crypto Monitoring](https://www.blockhead.co/2024/10/28/south-korea-to-monitor-cross-border-crypto-transactions/)
- [가상자산 과세 유예 2027년](https://kbthink.com/crypto/crypto-tax.html)
- [특금법 VASP 갱신 심사 지연](https://www.ajunews.com/view/20251202082307835)

---

*작성일: 2025-12-15*
*법적 검토 추가: 2025-12-15*
