Enclave Server API 활용

Enclave Server API에 대한 용도와 호출 순서 가이드입니다.

사용자 시나리오

사용자가 VASP를 통해 출금 신청을 할 경우 Enclave 서버 API 활용에 대한 가이드.

사용자 출금 신청

사용자가 VASP (가상 자산 거래소)를 통해 출금 신청을 합니다. 위 이미지는 API에 대한 용도를 이해하기 위한 참고용 이미지입니다

  • 예를 들어, 거래소 애플리케이션을 통해 출금 신청을 했을 경우.

  • 사용자는 출금을 어느 거래소의 어느 계좌 번호로, 누구에게, 얼마나 보내야 하는지에 대한 정보를 기입해야 합니다.

    • Amount: 얼마 보낼지 입력.

    • Beneficiary VASP: 어느 거래소로 보낼지 입력. 수신 가능한 거래소 목록 중 한 개를 선택한다.

    • Beneficiary Address: 어느 계좌 번호로 보낼지 입력.

    • Beneficiary Name: 누구에게 보낼지 입력.

  • 이때 사용자 편의를 위해, Beneficiary VASP의 목록을 VerifyVASP에서 제공합니다.

    • VASP 백엔드에서 Enclave의 GET /v1/vasps API를 호출하여, 사용자 화면에 리스트를 제공할 수 있습니다.

    • VASP에서 자체적으로 VASP 목록을 관리하고, 그 목록을 사용자에게 제공해도 됩니다. (단, VASP 목록에 정의된 VASP의 VaspId가 일치하여야 합니다.)

  • 출금 버튼 클릭한다.

    • 거래소 백엔드에서는 실제 출금에 대한 Transaction을 블록체인에 전송하기 전에, VerifyVASP를 통해 Travel Rule에 의한 검증 작업을 진행합니다.

    • 필수적으로

      • 위 화면에서 입력한 Amount, Beneficiary VASP, Beneficiary Address, Beneficiary Name 등을 모두 포함한 검증 작업을 진행합니다.

      • 트래벌룰 준수를 위해 처음부터 송신인, 수취인의 모든 데이터를 전달하는 게 아니라 사전에 거래소 소유 계좌 인지 확인하는 작업이 필요합니다.

      • POST /v1/verifications/account API를 사용하여, 수취 VASP 소유의 지갑 주소인지 확인합니다.

        • 법정 기준 금액 이상인 경우에는, 지갑 주소와 수취인의 이름을 함께 전달하여, 검증합니다.

        • 이때에는, KYC 나 Sanction Screening 과정을 하는 게 아니라, 단순히 거래소 소유 계좌 정보가 맞는지 확인합니다.

        • 수취 VASP의 지갑 주소가 맞는다면, 아래 트래벌룰 준수를 위한 사용자 검증 과정을 진행합니다.

      • POST /v1/verifications API를 사용하여 확인할 수 있습니다.

      • IVMS101 메시지 프로토콜에 따라, 송신인, 수신인에 대한 정보를 함께 전송해야 합니다.

      • 거래소 백엔드에서, Originator(송신인)에 대한 정보를 IVMS101 형태로 제공해야 합니다.

    • 추가적으로 상대 VASP로부터 전송받은 송신자 혹은 수취인 지갑 주소나 개인 정보를 통해 추가적인 위험 평가(risk assessment)를 수행할 수 있습니다.

      • POST /v1/risk-assessment/chainalysis-sanction API를 사용하여 상대방 지갑 주소에 대한 위험 평가를 수행할 수 있습니다.

      • POST /v1/risk-assessment/chainalysis-kyt API를 사용하여 수신자 지갑 주소에 대한 위험 평가를 수행할 수 있습니다. 또한 전송 트랜잭션에 대한 위험 평가도 수행할 수 있습니다.

      • POST /v1/risk-assessment/refinitiv-wco API를 사용하여 송수신자에 대한 위험 평가를 수행할 수 있습니다.

  • 출금 버튼 클릭 이후 검증 작업에 대한 결과를 보고, 실제 전송할지 말지를 선택해야 합니다.

    • 아직 이상적인 작업 흐름은 없지만,

      • 거래소 백엔드 자체적으로 결괏값을 확인하고 실제 전송을 진행하거나,

      • 검증 결과를 사용자 화면에 노출하여, 사용자가 직접 선택적으로 진행을 하도록 합니다.

    • 거래소 백엔드에서 실제 전송을 진행한다.

  • 출금 결과 리포트한다.

    • 거래소 백엔드에서 전송이 완료되면, Transaction Hash를 수신 VASP도 결과를 알 수 있도록 리포트(공유) 합니다.

      • POST /v1/verifications/tx API를 사용합니다.

    • 만약 문제가 있어서 트랜잭션을 영구히 보내지 않기로 결정했다면, 해당 에러 내용 또한 수신 VASP가 알 수 있도록 리포트(공유) 합니다.

      • POST /v1/verifications/error API를 사용합니다.

    • 수신 VASP 입장에서 검증이 끝난 건에 대해 일정 시간이 지나도록 트랜잭션 처리 결과를 리포트 받지 못했다면, 거꾸로 송신 VASP에게 트랜잭션 처리 상태를 질의할 수 있습니다.

      • POST /v1/verifications/tx/inquiry API를 사용합니다.

  • 검증 히스토리를 조회한다.

    • 거래소 백엔드에서 거래소를 통한 트랜잭션 과정 중에 진행되었던 검증 기록을 조회하고 싶을 때,

      • GET /v1/verifications API를 사용합니다.

    • 거래소에서 쉽게 확인할 수 있는 화면이 필요하다면, Enclave에서 제공하는 위 Verification 조회 API를 통해 화면을 직접 구성하면 됩니다.

다중 출금 신청에 대한 단일 트랜잭션 처리 방법

  • 거래소에서 수수료 절감을 위해 여러 명에 대한 출금 신청에 대해 하나의 트랜잭션으로 전송하고 싶을 경우 다음과 같이 처리합니다.

    • 거래소 백엔드에서 각각의 출금 정보에 대해 위와 같은 검증 절차를 N 번 실행합니다.

      • 그러면 각 출금 정보 하나당 verificationUuid 가 각각 생성됩니다.

    • 단일 트랜잭션 전송으로 생성된 txHash 와 vout 값을 리포트 합니다.

      • 각 출금 정보에 대응되는 verificationUuid에 같은 txHash 값과 서로 다른 vout 값으로 N 번 리포트 합니다.

  • VerifyVASP 자체적으로 다중 출금에 대한 단일 트랜잭션 처리를 자동적으로 처리해 주진 않습니다.

Enclave Server API 명세서

Last updated