is_ownership_verified: true로 설정되고, 이에 연결된 Travel Rule 이체는 UNCONFIRMED_OWNERSHIP 상태에서 벗어나 진행할 수 있습니다.
Didit이 위젯을 자동으로 발급하는 경우
직접 세션을 발급할 필요는 거의 없습니다. Travel Rule 설정에서auto_wallet_verification이 켜져 있으면(기본값), 이체에 최종 사용자의 지갑 통제 증명이 필요할 때 Didit이 거래 생성 시점에 위젯 세션을 자동으로 발급합니다.
- 이체가
UNCONFIRMED_OWNERSHIP상태입니다. 제출 시 거래 상대방 지갑이 자체 보관 지갑으로 선언되었습니다. - 이체가 발신 거래이며
COUNTERPARTY_VASP_NOT_FOUND상태입니다. 거래 상대방 VASP를 식별하지 못했으므로 소유권 증명이 거래를 완료하기 위해 남은 유일한 경로입니다.
action_required 블록(type: "wallet_ownership", 열어야 할 url 포함)으로 반환되며, SDK는 클라이언트 측 제출 시 이를 자동으로 실행합니다.
Didit이 대신 생성하는 수신 이체(선라이즈 등록, 수신 TRP 조회, INTERNAL 레일의 수신 구간)에는 UNCONFIRMED_OWNERSHIP 상태가 되더라도 자동 발급 세션이 생성되지 않습니다.
이체가 존재하기 전에 지갑을 미리 검증하려는 경우, auto_wallet_verification을 끈 경우, 또는 위와 같은 수신 이체의 경우에는 POST /v3/travel-rule/widget-session/으로 직접 발급하십시오.
증명 내용
이 위젯은 최대 네 가지 증명 방법을 제공합니다. 어떤 방법이 표시되는지는 세션을 발급한 방식과 Travel Rule 설정에 따라 달라집니다:메시지 서명 검증 계약
서명을 제출하면 지갑에 대한 제어 권한을 증명할 때200과 status: "VERIFIED"가 반환됩니다.
이 외의 경우 400이 반환되며 증명은 열린 상태로 남아 고객이 다시 서명할 수 있습니다. 이때 다음 code 값 중 하나가 포함됩니다:
Satoshi 테스트 검증 계약
Satoshi 테스트 입금의 검증은 비동기로 진행됩니다. 트랜잭션이 온체인에서 확인되고 확정되어야 하기 때문입니다. 입금의txid를 제출하면, 입금이 온체인에서 아직 확정되지 않은 동안 200과 status: "PENDING"이 반환됩니다. 이때 txid는 폐기되지 않고 보관됩니다.
입금이 확정되면 200과 status: "VERIFIED"가 반환됩니다.
정상적이지 않은 입금의 경우 400과 status: "REJECTED"가 반환됩니다. 다른 지갑에서 보냈거나, 입금 주소로 예상 금액이 전송되지 않았거나, 챌린지보다 오래되었거나, 이미 다른 지갑의 증명에 사용된 트랜잭션인 경우입니다. 이 경우 증명은 닫히며, 세션에 시도 횟수가 남아 있으면 고객은 새 증명을 시작할 수 있습니다.
아직 인덱싱되지 않은 입금도 200과 status: "PENDING"을 반환합니다. Didit 측 조회가 실패하면 400과 DEPOSIT_LOOKUP_FAILED 코드가 반환됩니다. 두 경우 모두 증명은 열린 상태로 남고 Didit은 계속 확인합니다.
유효한 입금이 확인되기 전에 테스트 기간이 만료되면 410이 반환됩니다.
txid가 제출되면 백그라운드 작업이 5분마다 대기 중인 입금을 다시 확인하고, 트랜잭션이 확정된 후 증명을 완료합니다. 따라서 고객이 txid를 다시 제출할 필요는 없습니다.
satoshi_deposit_address를 전달하면, 위젯 세션의 expires_at이 최소 24시간인 Satoshi 테스트 기간까지 연장됩니다. 세션 자체가 만료되기 전에 입금이 확정될 시간을 확보하기 위해서입니다.
흐름
1
위젯 세션 발급
검증할 지갑으로
POST /v3/travel-rule/widget-session/을 호출합니다. 선택 사항으로, 소유권이 증명되면 이체가 자동으로 진행되도록 이체와 연결할 수 있습니다.2
반환된 URL 열기
고객을 응답의
url로 보냅니다. 고객은 그곳에서 증명을 완료하며, Didit 계정이나 API 키는 필요하지 않습니다. URL에 포함된 토큰이 인증 역할을 합니다.3
완료 감지
증명이 검증되면 위젯이 주소록 항목을 검증됨으로 표시하고, 세션이 이체와 연결되어 있으면 해당 이체를 진행시킵니다.
travel_rule.status.updated(연결된 이체)를 확인하거나 위젯 컨텍스트를 폴링합니다.위젯 세션 발급
이 예제는 세션을 Travel Rule 가이드의 선언된 자체 보관 이체와 연결하므로,wallet_address는 해당 이체의 목적지 지갑입니다.
이체와 연결된 세션은 해당 이체의 거래 상대방 지갑에 대한 증명만 허용합니다.
url은 항상 그대로 여십시오. 직접 URL을 만들지 마십시오.
반환된 URL 열기
완료 감지
위젯은 토큰으로 조회하는 공개 읽기 엔드포인트를 제공합니다. 이를 폴링해 진행 상황을 확인하거나, 세션이 이체와 연결된 경우 webhook을 사용하십시오.- 증명이 검증되면
completed_at에 값이 설정됩니다(null이 아님). proofs의 각 항목에는 해당 방식에 필요한 필드가 포함됩니다.SATOSHI_TEST증명에는deposit_address,expected_amount, 그리고 자체expires_at이 추가됩니다.MESSAGE_SIGNING증명에는 고객이 서명할 문자열인challenge가 추가됩니다.SATOSHI_TEST증명은 입금이 온체인에서 확인되었지만 아직 확정되지 않은 동안status: "PENDING"상태에 머물 수 있습니다. 이때 귀사나 고객이 할 일은 없습니다. 위의 Satoshi 테스트 검증 계약을 참고하십시오.- 세션이
transaction_id와 함께 발급된 경우, 증명이 검증되면 연결된 이체가 진행되며, 라이브 애플리케이션에서는travel_rule.status.updatedwebhook이 발생합니다. 폴링보다 webhook을 사용하는 것이 좋습니다. 수신TRP문의는 발신자에게 승인 결과가 전달되고, 이 승인이 전달되면COMPLETED로 이동합니다.UNCONFIRMED_OWNERSHIP상태의 다른 이체(또는ON_HOLD상태의 수신 이체)는COMPLETED로 이동하며, 수취인 이름이 지갑 보유자와 일치하지 않으면COUNTERPARTY_MISMATCHED_DATA로 이동합니다. 정산이 완료된 sunrise 입금이 완료되면FINISHED로 계속 진행됩니다. 발신 이체가COUNTERPARTY_VASP_NOT_FOUND상태이면COMPLETED로 이동합니다. - 이 맥락에서
SCREENSHOT증명은 귀사가 소유권을 확인한 뒤에도status: "PENDING"상태를 유지합니다.POST .../travel-rule/ownership/로 승인하며, 이 엔드포인트는 소유권 확인을 기다리는 이체만 받습니다. 따라서 연결된 이체가 없는 세션이나COUNTERPARTY_VASP_NOT_FOUND상태의 발신 이체와 연결된 세션에서는 스크린샷 증명을 승인할 방법이 없습니다. 이런 세션에서 스크린샷 증명을 제공하면 안 된다면allow_screenshot_proof를 끄십시오. - 증명이 거부된 후에도 남은 시도 횟수가 있으면 세션에서 새 시도를 할 수 있습니다.
max_attempts,attempts_used,attempts_remaining이 시도 횟수를 나타내며, 거부된 증명에는rejection_reason이 포함됩니다.attempts_remaining이0이면 새 증명을 시작할 때409가 반환되므로, 새 세션을 발급해야 합니다. - 컨텍스트 엔드포인트는 알 수 없는 토큰에 대해
404를, 완료되지 않은 채 세션이 만료되면410을 반환합니다.
여기에는 일회성 의존성이 없습니다. 위젯과 귀사의 백엔드는 같은 영속 상태(검증된 주소록 항목과 이체 상태)로 수렴합니다. 따라서 webhook이 누락되거나 탭이 닫히더라도, 이체 또는 위젯 컨텍스트를 다시 읽어 언제든 복구할 수 있습니다.
현지화 및 브랜딩
위젯은 54개 언어로 렌더링되며, 링크의 언어 경로(또는 브라우저 기본값)를 따릅니다. 앱에서 화이트 라벨이 활성화되어 있으면 위젯은 인증 플로우의 브랜딩을 자동으로 상속합니다. 로고, 브랜드 색상, 버튼 및 패널 스타일, 사용자 지정 글꼴, 파비콘, 제목에 표시되는 앱의 공개 이름이 여기에 포함됩니다. 별도의 설정은 필요 없습니다. KYC 세션에 설정한 것과 같은 커스터마이징이 여기에도 적용됩니다. 이미 완료된 링크로 다시 접속한 사용자에게는 완료 화면이 다시 표시됩니다.callback_url을 전달한 경우 위젯은 사용자를 해당 URL로 되돌려 보냅니다.
만료된 링크에는 브랜드가 적용된 만료 화면이 표시되며, 사용자에게 새 링크를 요청하도록 안내합니다.
사용자를 위해 새 세션을 생성하려면 POST /v3/travel-rule/widget-session/을 사용하세요. action: "resend"로 전송을 재전송해도 세션은 생성되지 않습니다.
다음 단계
Travel Rule
전체 송금 수명 주기, 결제 경로, 설정 및 수취 플로우를 확인할 수 있습니다.
지갑 주소록
직접 관리하는 지갑을 등록하면 인바운드 전송이 이 지갑을 기준으로 확인됩니다.
Webhooks
travel_rule.status.updated를 구독하면 증명으로 전송이 진행될 때 이에 대응할 수 있습니다.
네이티브 SDK
위젯 URL은 SDK 웹뷰가 아닌 시스템 브라우저에서 여세요.