Robot VASP 활용

Robot VASP를 통해 VerifyVASP를 통한 송/수진자 검증과 입출금 과정을 시뮬레이션 할 수 있습니다.

  • Robot VASP를 Beneficiary VASP로 설정하고 테스트하면서 출금 시나리오에서 트래블룰 관련 구현이 정상 동작하는지 확인할 수 있습니다.

  • Robot VASP를 Originating VASP로 설정하고 테스트하면서 입금 시나리오에서 트래블룰 관련 구현이 정상 동작하는지 확인할 수 있습니다.

Robot VASP 회원 정보

Robot VASP를 통해 좀 더 다양한 케이스를 테스트할 수 있도록 하기 위해 아래와 같이 가상의 사용자를 준비했습니다. 아래 사용자들은 Robot VASP의 end user라고 간주할 수 있습니다. 아래 사용자들을 originator 혹은 beneficiary로 설정하여 테스트하면 Robot VASP를 통해 사용자 검증 또는 사용자 계정 검증의 다양한 케이스의 동작을 확인할 수 있습니다.

사용자 1 (KYC verified natural person)

해당 사용자는 KYC 인증을 이미 마친 개인 회원으로 가정합니다. 따라서 모든 정보를 정확하게 입력하였을 경우 VERIFIED 검증 결과를 받을 수 있습니다.

  • 개인 정보

    • 성 : Robbins

    • 이름 : Taylor

  • 지갑 주소

    • 'ETH' address: '0xFa230E9cCAF5e382539147294d7965Eeccbbfa5c'

    • 'XRP' address: 'rGFFufDwabHuPur9927p1EgBTcCBfsjtEU'

      • 'XRP' destination tag: '123456789'

사용자 2 (KYC unverified natural person)

해당 사용자는 KYC 인증을 받지 못한 개인 회원으로 가정합니다. 따라서 모든 정보를 정확하게 입력하였을 경우 DENIED (UNVERIFIED-KYC) 검증 결과를 받을 수 있습니다.

  • 개인 정보

    • 성 : Cook

    • 이름 : Ethan

  • 지갑 주소

    • 'ETH' address: '0x319E92715729c46869ed31d228f3b4f31e951450'

    • 'XRP' address: 'rGFFufDwabHuPur9927p1EgBTcCBfsjtEU'

      • 'XRP' destination tag: '345678912'

Robot VASP를 이용한 TravelRule 동작 확인 테스트

Robot VASP를 이용하면 당신의 VASP에서 가상 자산을 출금하거나 입금 받는 경우에 대해 모두 테스트할 수 있습니다. 테스트넷 블록체인을 통해 실제 가상 자산을 주고 받으며 블록체인 트랜잭션과 관련된 VASP 내부 동작도 검증할 수 있습니다. 현재 Robot VASP 에서 지원하는 블록체인 테스트넷은 이더리움의 Sepolia리플의 testnet입니다. 위에 기재된 가상의 Rovot VASP 사용자들의 지갑 주소도 모두 테스트넷에 실제 존재하는 주소들입니다.

Robot VASP와 테스트넷을 이용해 실제 가상 자산을 전송하는 테스트를 할 때에는 다음과 같은 사항에 주의하여 테스트하십시오.

  1. 출금 테스트를 먼저 수행해야 입금 테스트를 할 수 있습니다.

    • 먼저 Robot VASP에게 가상 자산을 전달하는 출금 테스트를 진행하여 Robot VASP가 가상 자산을 소유할 수 있도록 해야 합니다.

    • 그런 다음에야 반대로 Robot VASP가 당신의 VASP로 입금하는 테스트를 할 수 있습니다.

  2. Robot VASP의 가상 자산은 각 beneficiary 주소별로 관리됩니다. (hot / cold wallet을 사용하지 않습니다.)

    • 당신의 VASP로 다시 입금 받기 위해서는 출금 테스트를 할 때 기재했던 beneficiary 주소를 입금 테스트의 originator 주소로 설정해야 합니다.

    • 입금 테스트 시 전송할 수 있는 수량은 출금 테스트할 때 해당 Robot VASP 주소로 전송했던 총 수량을 넘을 수 없습니다.

  3. 가상 자산을 전송하기 전에는 먼저 해당 전송에 대응하는 VERIFIED 된 사용자 검증을 미리 수행해야 합니다. 출금과 입금 테스트 모두 마찬가지입니다.

    • 사용자 검증에서 VERIFIED 결과를 받은 다음에 해당 검증에 대응하는 블록체인 트랜잭션을 보내야 합니다.

    • 만약 출금에 대응하는 VERIFIED 된 사용자 검증이 없이 Robot VASP로 가상 자산을 전송하면 가상 자산을 다시 입금 받을 수 없습니다.

  4. XRP 주소에 대해 입출금 테스트를 할 때에는 destination tag를 기재하는 것을 잊지 마십시오.

출금 검증

Robot VASP로 하여금 Beneficiary VASP 역할을 하도록 하여 출금 시나리오를 검증할 수 있습니다. Enclave API 호출 시 beneficiaryVaspId를 Robot VASP의 VASP ID로 설정해서 호출하십시오. Robot VASP의 VASP ID는 enclave의 VASP 목록 조회 API를 호출하여 조회할 수 있습니다.

출금 테스트는 다음과 같은 순서로 테스트하는 것을 권장합니다.

1. 계정 검증

2. 사용자 검증

3. 자산 출금

  • 위 2번 과정에서 사용자 검증 결과가 VERIFIED 로 반환된 검증 건에 대해 똑같은 수량의 가상 자산을 실제 블록체인에서 전송하십시오.

  • 현재 Robot VASP에서 지원하는 가상 자산 및 네트워크는 이더리움의 Sepolia리플의 testnet 입니다.

  • 블록체인 트랜잭션의 to 주소는 트랜잭션에 대응하는 VERIFIED 된 사용자 검증의 beneficiary 지갑 주소와 동일한 주소로 설정하여 보내야 합니다.

4. 트랜잭션 리포트

  • 3번 과정의 출금 트랜잭션이 정상적으로 블록체인 노드에 전송되었다면 아마도 transaction hash 또는 transaction ID가 반환될 것입니다. 이것을 트랜잭션 결과 리포트 API를 통해 beneficiary VASP (i.e. Robot VASP)에게 즉시 보고해야 합니다.

  • 이때 트랜잭션에 대응하는 사용자 검증(verification)의 uuid를 request body에 넣어 호출해야 합니다.

  • Robot VASP가 트랜잭션 결과 리포트를 정상적으로 수신했다면, 잠시 후 해당 beneficiary 계좌로 입금 반영이 될 것입니다.

  • 다음의 API를 사용하여 Robot VASP에 입금 반영이 제대로 완료되었는지를 조회할 수 있습니다.

입금 반영 조회 API

GET https://api.verifyvasp.xyz/vega/robot/v1.0/testnet/balance

Query parameters example

1. vaspId : "15952089931162058999", // vaspId of your (originating) VASP
2. symbol : "ETH", // transferred virtual asset
3. address : "0xb0bFf9721871e22653358956cf59a5FdBF3D752F" // beneficiary address (deposit address)

5. 에러 리포트

  • 3번 과정의 출금 단계에서 어떤 문제가 발생했거나, 혹은 테스트를 중지하여 최종적으로 해당 검증(verification)에 대응하는 자산을 전송하지 않기로 결정하였다면 에러 상황 리포트 API를 통해 beneficiary VASP (i.e. Robot VASP)에게 이를 보고해야 합니다.

  • Robot VASP가 에러 상황 리포트를 정상적으로 수신했다면, 해당 검증(verification)에 대해 더 이상 트랜잭션 처리 상태 조회 API를 호출하지 않을 것입니다.

  • 만약 VERIFIED 결과가 반환된 사용자 검증임에도 불구하고 트랜잭션 리포트도 보내지 않고 에러 상황 리포트도 보내지 않으면, Robot VASP에서는 최대 1시간이 지날 때까지 해당 검증(verification)에 대한 트랜잭션 상태 조회 API를 당신의 VASP로 주기적으로 호출할 것입니다.

6. 트랜잭션 상태 조회

  • 3번 과정에서 출금 트랜잭션을 블록체인에 전송한 다음 4번 과정의 트랜잭션 리포트를 보내지 않으면, Robot VASP에서는 감지된 입금 트랜잭션에 대응되는 사용자 검증(verification)이 어떤 것인지 알 수 없기 때문에 입금 반영을 할 수 없습니다.

  • 따라서 Robot VASP에서는 블록체인을 통해 감지된 입금 트랜잭션에 대해 트랜잭션 리포트가 특정 시간(10분) 동안 도착하지 않으면, Robot VASP는 트랜잭션 상태 조회 API를 통해 거꾸로 송신 VASP(i.e. your VASP)에게 트랜잭션 상태를 조회하기 시작합니다.

  • 즉, 당신의 VASP의 트랜잭션 상태 조회 API가 정상 동작하는지 테스트하기 위해서는 출금 트랜잭션 전송 후 트랜잭션 리포트를 보내지 않고 특정 시간(10분) 동안 기다리면 됩니다.

  • 만약 10분 동안 기다리지 않고 즉시 호출되도록 하고 싶다면 다음의 Robot VASP API를 호출하십시오.

트랜잭션 상태 조회 simulation API

POST https://api.verifyvasp.xyz/vega/robot/v1.0/action/tx/inquiry

{
  "verificationUuid": "ecb457e3-2307-4e72-8a42-16a3774e154b" // uuid of previous successful verification
}

검증 결과 케이스별 테스트 방법

Robot VASP를 상대로 한 계정 검증 또는 사용자 검증 결과에서 다양한 케이스를 테스트하려면 다음을 참고하여 호출하십시오.

  1. VERIFIED 케이스

    • Robot VASP 사용자의 이름과 지갑 주소를 정확히 입력하여 호출합니다.

    • 법인 사용자를 테스트할 경우에는 대표자의 이름까지 정확히 입력해야 합니다. 대표자의 이름을 입력하는 방법은 IVMS101 정보 기입 가이드를 참고하세요.

  2. UNKNOWN-SYMBOL 케이스

    • 현재 Robot VASP에서는 ETH, XRP를 제외한 다른 asset은 지원하지 않습니다.

    • 따라서 위 2가지 asset 이외의 symbol을 입력하면 UNKNOWN-SYMBOL 에러를 반환합니다.

  3. UNKNOWN-ADDRESS 케이스

    • Robot VASP 사용자의 지갑 주소 이외의 다른 주소를 beneficiary 지갑 주소로 설정하고 호출하면 UNKNOWN-ADDRESS 에러를 반환합니다.

  4. UNVERIFIED-KYC 케이스 (계정 검증에서는 반환하지 않음)

    • Robot VASP 사용자 중에 Ethan Cook 은 KYC 인증이 되어 있지 않다고 가정한 사용자입니다.

    • 따라서 beneficiary 정보를 Ethan Cook의 정보로 기입하고 호출하면 UNVERIFIED-KYC 에러를 반환합니다.

  5. MISMATCHED-NAME 케이스

    • Robot VASP 사용자의 지갑 주소는 정확히 입력하고 사용자 이름을 잘못 입력하여 호출하면 MISMATCHED-NAME 에러를 반환합니다.

  6. UNAVAILABLE-INFORMATION 케이스 (계정 검증에서는 반환하지 않음)

    • 개인 사용자에 대해 사용자 검증 API를 호출할 때, requiredBeneficiaryInfo 필드에 다음 코드를 제외한 개인 정보 코드를 입력하면 UNAVAILABLE-INFORMATION 에러를 반환합니다.

      • NATURAL_PERSON_NAME

      • ACCOUNT_NUMBER

  7. LACK-OF-INFORMATION 케이스 (계정 검증에서는 반환하지 않음)

    • LACK-OF-INFORMATION 에러는 beneficiary VASP에서 originator에 대한 검증을 할 때 개인 정보가 충분하지 않아 검증할 수 없는 경우에 반환하는 에러입니다.

    • 사용자 검증 API를 호출할 때 originator 정보에서 name이나 dateAndPlaceOfBirth 항목이 없으면 LACK-OF-INFORMATION 에러를 반환합니다.

  8. BLACKLISTED 케이스 (계정 검증에서는 반환하지 않음)

    • BLACKLISTED 에러는 beneficiary VASP에서 originator에 대한 검증을 했을 때 originator가 위험인물이라고 판별된 경우에 반환하는 에러입니다.

    • 사용자 검증 API를 호출할 때 originator 정보를 다음과 같이 입력하면 BLACKLISTED 에러를 반환합니다.

      • first name : Pablo

      • last name : Escobar

      • date of birth : 1949-12-01

      • place of birth : Colombia

입금 검증

Robot VASP로 하여금 Originating VASP 역할을 하도록 하여 입금 시나리오를 검증할 수 있습니다. 아래의 API들을 호출하면 Robot VASP에서 마치 출금을 하려는 것처럼 일련의 트래블룰 API를 호출하도록 할 수 있습니다. 입금 시나리오 테스트에서는 beneficiaryVaspId를 당신의 VASP ID로 설정해서 호출하십시오.

입금 검증은 다음과 같은 순서로 테스트하는 것을 권장합니다.

1. 계정 검증

  • 다음의 Robot VASP API를 호출하여 Robot VASP가 당신의 VASP에게 계정 검증 요청을 전송하도록 요청할 수 있습니다.

계정 검증 Simulation API

POST https://api.verifyvasp.xyz/vega/robot/v1.0/action/verifications/account

{
  "keyType": "PerVasp",
  "beneficiaryVaspId": "16384656509591635927", // your VASP ID
  "symbol": "ETH",
  "payload": {
    "version": "1.0",
    "ivms101": {
      "beneficiary": {
        "beneficiaryPersons": [
          {
            "naturalPerson": {
              "name": {
                "nameIdentifier": [
                  {
                    "primaryIdentifier": "last name",
                    "secondaryIdentifier": "first name",
                    "nameIdentifierType": "LEGL"
                  }
                ]
              }
            }
          }
        ],
        "accountNumber": ["0xb0bFf9721871e22653358956cf59a5FdBF3D752F"]
      }
    }
  }
}

2. 사용자 검증

  • 다음의 Robot VASP API를 호출하여 Robot VASP가 당신의 VASP에게 사용자 검증 요청을 전송하도록 요청할 수 있습니다.

사용자 검증 Simulation API

POST https://api.verifyvasp.xyz/vega/robot/v1.0/action/verifications

{
  "keyType": "PerVasp",
  "beneficiaryVaspId": "16384656509591635927", // your VASP ID
  "assetInfo": {
    "symbol": "ETH",
    "amount": "231.0",
    "isExceedingThreshold": true,
    "tradeCurrency": "KRW",
    "tradePrice": "87681287",
    "tradeISODatetime": "2022-02-08T13:02:57.824Z"
  },
  "requiredBeneficiaryInfo": "NATURAL_PERSON_NAME,ACCOUNT_NUMBER",
  "payload": {
    "version": "1.0",
    "ivms101": {
      "originator": {
        "originatorPersons": [
          {
            "naturalPerson": {
              "name": {
                "nameIdentifier": [
                  {
                    "primaryIdentifier": "Robbins",
                    "secondaryIdentifier": "Taylor",
                    "nameIdentifierType": "LEGL"
                  }
                ]
              },
              "dateAndPlaceOfBirth": {
                "dateOfBirth": "1991-05-03",
                "placeOfBirth": "Seoul"
              }
            }
          }
        ],
        "accountNumber": ["0x5811001506550d8356a215be229c15b6ef371a9a"]
      },
      "beneficiary": {
        "beneficiaryPersons": [
          {
            "naturalPerson": {
              "name": {
                "nameIdentifier": [
                  {
                    "primaryIdentifier": "last name",
                    "secondaryIdentifier": "first name",
                    "nameIdentifierType": "LEGL"
                  }
                ]
              }
            }
          }
        ],
        "accountNumber": ["0xb0bFf9721871e22653358956cf59a5FdBF3D752F"]
      }
    }
  }
}

3. 자산 입금

  • 다음의 Robot VASP API를 호출하여 Robot VASP가 당신의 VASP에게 자산 전송을 수행하도록 요청할 수 있습니다.

  • 자산 전송을 요청하기 전에 먼저 사용자 검증을 수행해야 합니다. Robot VASP는 VERIFIED된 사용자 검증에 대응되는 출금만 수행합니다.

    • beneficiary의 accountNumber는 자산을 받을 주소로 설정해야 합니다.

    • originator의 accountNumber는 출금 테스트에서 Robot VASP로 보냈던 beneficiary의 지갑 주소를 입력해야 합니다. 즉, 자신이 보냈던 자산이 들어있는 Robot VASP의 지갑 주소로 설정해야 합니다.

  • 전송되는 자산의 종류와 수량은 대응되는 사용자 검증(verification)에 입력한 assetInfo와 동일하게 입금됩니다.

    • 입금 수량은 이전에 출금 테스트 시에 전송했던 총 수량을 넘을 수 없습니다. 즉, Robot VASP가 받은 양만큼만 돌려줄 수 있습니다.

Robot VASP 출금 요청 API

POST https://api.verifyvasp.xyz/vega/robot/v1.0/action/withdrawal

{
  "verificationUuid": "ecb457e3-2307-4e72-8a42-16a3774e154b", // uuid of previous successful verification
  "omitTxReport": false // (optional) whether the transaction report is sent or not after withdrawal
}

4. 트랜잭션 리포트

  • Robot VASP는 특별한 요청이 없으면 자산 전송을 수행한 뒤 자동으로 트랜잭션 리포트를 전송하도록 구현되어 있습니다.

  • 따라서 실제 트랜잭션이 전송된 뒤 수 초 이내에 당신의 VASP로 Callback VASP API를 통해 트랜잭션 정보가 전달될 것입니다.

  • 만약 Robot VASP가 자산을 전송한 다음 트랜잭션 리포트를 하지 않도록 시뮬레이션하고 싶다면 3번 과정의 출금 요청 API를 호출할 때 omitTxReport를 true로 설정하여 호출하면 됩니다.

  • 실제 자산 전송 여부와 관계없이 트랜잭션 리포트 기능을 테스트하고 싶다면 다음의 API를 호출하여 Robot VASP가 트랜잭션 리포트를 하도록 강제할 수 있습니다.

Robot VASP 트랜잭션 리포팅 Simulation API

POST https://api.verifyvasp.xyz/vega/robot/v1.0/action/verifications/tx

{
  "verificationUuid": "f02081b4-1837-41c0-a96c-221399db46d2", // previous successful verification
  "txHash": "0xaaa042c0632f4d44c7cea978f22cd02e751a410e"
}

5. 에러 리포트

  • Robot VASP에서는 자산 전송이 실패하지 않는 이상 자동으로 에러 리포트를 보내는 경우는 없습니다.

  • 만약 에러 리포트 상황을 테스트하고 싶다면 다음의 Robot VASP API를 호출하여 수동으로 당신의 VASP에게 에러 리포트를 하도록 요청해야 합니다.

Robot VASP 에러 상황 리포팅 Simulation API

POST https://api.verifyvasp.xyz/vega/robot/v1.0/action/verifications/error

{
  "verificationUuid": "f02081b4-1837-41c0-a96c-221399db46d2", // previous successful verification
  "result": "DENIED",
  "reason": "USER-CANCELED",
  "message": "User canceled"
}

6. 트랜잭션 상태 조회

  • Robot VASP는 출금을 한 경우에는 자동으로 트랜잭션 리포트를 하도록 되어 있습니다. 따라서 트랜잭션 리포트가 당신의 VASP로 전달되지 않는 경우는 거의 없을 것입니다.

  • 그럼에도 불구하고 Robot VASP로 트랜잭션 상태를 조회하고 싶다면 enclave의 트랜잭션 상태 조회 API를 호출하면 됩니다.

Last updated