본문으로 건너뛰기

7. 출금(Transfer) 흐름 테스트

SDK의 transfer()는 같은 오버레이를 송금 방향으로 엽니다 — 가맹점이 사용자 주소로 크립토를 보냅니다. pay()와 달리 즉시 자금이 이동하지 않고, REQUESTED 상태의 출금 요청이 대시보드에 생성됩니다. 가맹점 관리자가 2FA로 승인해야 실제 온체인 트랜잭션이 실행됩니다.

7-1. SDK transfer() 호출

await client.transfer({
price: 1,
unit: 'usd',
successUrl: '/withdrawal/success',
failUrl: '/withdrawal/fail',
onCreateInvoice: async (params) => {
const res = await fetch('/api/create-withdrawal', {
method: 'POST',
body: JSON.stringify(params),
});
const { withdrawalId } = await res.json();
return withdrawalId;
},
});

콜백은 sender 대신 receiver(수령인 주소)를 받습니다. 서버는 POST /api/invoices/withdrawals를 호출하고 withdrawalId를 반환해야 합니다. 코드 예제는 서버 연동 → 출금 생성 참고.

7-2. 대시보드에서 출금 요청 확인

Dashboard → 프로젝트 → 출금 요청

REQUESTED 상태의 새 행이 추가됩니다. 이 시점엔 온체인 자금 이동 없습니다.

7-3. 관리자 2FA 승인

가맹점 관리자가 행의 승인 버튼 클릭 → 2FA 입력 → 확인.

승인되면 프로젝트 지갑에서 receiver로 온체인 트랜잭션이 실행됩니다. 상태가 REQUESTEDPENDINGCONFIRMED로 진행.

7-4. 온체인 트랜잭션 확인

Dashboard → 프로젝트 → 거래 내역 — 출금 건이 WITHDRAWAL 타입으로 표시되고 TX hash가 채워집니다.

TX hash 클릭 → 블록 익스플로러에서 확인.

주의사항

  • 출금 테스트를 위해 프로젝트 지갑에 토큰 + 가스용 네이티브 코인이 들어 있어야 함 (예: Sepolia의 USDC + ETH). 3. 테스트 토큰 받기의 faucet으로 받되 프로젝트 지갑 주소(프로젝트 홈에서 확인)로 받기.
  • 승인을 위해 관리자 계정의 TOTP 2FA가 미리 설정되어 있어야 함.
  • 일괄 승인도 동일 방식 — 여러 REQUESTED 행을 한 번에 승인 가능.