자산의 이전 데이터 요청을 검토하고, 결과를 반환합니다.
PUT
/v1/verification/tx
이미 TXID가 발생되어 입고처리가 필요한 가장자산 전송이나 트래블룰 데이터가 없어 입고 처리 하는 VASP에서 출고 VASP측으로 '자산 이전 데이터'를 요청합니다. 이 데이터 요청을 처리하기 위한 API를 구현합니다.
API 동작 명세
txid
및transferId
기준으로 해당 출고건을 찾습니다.- 해당 출고건의 정보를 찾습니다. 찾을 정보는 자산 이전 허가 요청과 같이 다음을 포함합니다.
currency
,amount
,historicalCost
,tradePrice
,tradeCurrency
,isExceedingThreshold
. - 암호화된 payload를 자신의 Private Key로 복호화합니다.
- 자산 정보와
Beneficiary
정보,BeneficiaryVASP
정보를 통해 상대방 VASP의 요청을 확인합니다. - 자산 이전 허가 요청과 마찬가지로 출고한 고객의 정보로
Originator
정보를 만들고OriginatingVASP
정보도 만듭니다. - 이 내용을 토대로 자산 이전 정보를 DB에 저장하고,
status
값을 부여합니다.normal
또는error
로 지정할 수 있습니다. - 요청 메시지의 내용을 확인한 결과를 토대로 응답(response) 메시지를 생성합니다. 이때,
Originator
,OriginatingVASP
정보는 자산 이전 허가 요청을 보내는 것 처럼 출고한 사용자의 KYC 정보를 이용하여 객체를 만들고,Beneficiary
,BeneficiaryVASP
정보는 요청의 값을 그대로 복사하여 사용합니다.
Originator의 KYC 정보가 없을 때
Originator가 KYC를 완료하지 않아 신원정보가 없는 경우에는 '자산 이전 데이터 요청'에 대한 응답값으로 'reasonType'을 'LACK_OF_INFORMATION'으로 작성하고 'reasonMsg'에 상세 사유를 추가합니다. (예: 'The user did not finish KYC.')
Request
Originator 의 개인정보는 2022.3.25 현재 개인인 경우 개인의 이름, 법인인 경우 법인과 대표자의 이름에 대한 정보만 보내기로 합니다.
이름 | 필수 여부 | 타입 |
---|---|---|
transferId | 필수 | string |
txid | 필수 | string |
vout | 옵션 | string |
payload | 필수 | string |
transferId: 데이터를 요청하는 Beneficiary VASP에서 전송한 UUID입니다. 상호간의 관리를 위한 값으로 저장해두면 됩니다.
txid: 이미 On-Chain 트랜잭션이 발생한 TXID 입니다. 가상자산 이전을 위해 블록체인 상에 실행된 특정한 트랜잭션을 식별하기 위한 고유한 값입니다. 블록체인에 의해서 생성되며 유일한 값입니다.
vout: utxo타입 코인의 경우 복수의 블록체인 트랜잭션이 하나의 txid 를 공유하면서 그룹을 형성할 수 있습니다. 이때, 고유한 트랜잭션을 식별하기 위해 이 값을 사용합니다.
vout란? https://learnmeabitcoin.com/technical/transaction/input/vout/
payload: IVMS101 메시지를 담기 위한 객체입니다. IVMS101타입 페이지를 참고해 주세요.
{
"txid" : "311BFF73D9B7969CCF1042186180159C724FAB59013A7A034A93E5FB9D6BAFE6",
"vout" : "",
"transferId" : "b09c8d00-8da9-11ec-b909-0242ac120002",
"payload": "encrypted ivms101 payload(Beneficiary.Object,BeneficiaryVASP.Object)"
}
Response
이름 | 필수 여부 | 타입 |
---|---|---|
result | 필수 | string |
reasonType | 옵션 | string |
reasonMsg | 옵션 | string |
transferId | 필수 | string |
currency | 옵션 | string |
amount | 옵션 | string |
historicalCost | 옵션 | string |
tradePrice | 옵션 | string |
tradeCurrency | 옵션 | string |
isExceedingThreshold | 옵션 | String |
payload | 필수 | string |
result: 가상자산의 이전 허가 결과입니다.
-normal
: 허가된 경우 반환됩니다.
-error
: 자산 이전을 거부한 경우 반환됩니다. reasonType 값으로 상세 내용을 구분할 수 있습니다.
reasonType: result 필드 값이 error 인 경우 이 필드가 추가 됩니다.
-NOT_FOUND_TXID
: TXID를 찾을 수 없는 경우입니다.
-LACK_OF_INFORMATION
: IVMS101 데이터 구성에 필요한 정보가 없을 경우입니다.
※송신 사용자(Originator)가 KYC를 완료하지 않아 신원정보가 없는 경우에 'reasonType'을 'LACK_OF_INFORMATION'으로 작성하고 'reasonMsg'에 상세 사유를 추가해 주세요. (예: 'The user did not finish KYC.')
-UNKNOWN
: 그 밖에 다른 이유입니다.
reasonMsg: reasonType 을 설명하는 상세 메시지를 정의합니다.
transferId: '자산 이전 데이터 요청'의 request 로 부터 받은 transferId입니다.
currency: 출고된 가상자산의 심볼로 대소문자를 구분하지 않습니다.
amount: 출고된 가상자산의 총 볼륨입니다.
historicalCost: 출고된 가상자산의 취득 원가입니다. (국세청 요구 사항이지만, 아직은 사용하지 않습니다.)
tradePrice: 출고 당시 법정 화폐로 환산한 가상자산 전송 금액입니다. 아래의 'tradePrice' 계산법을 참고해 주세요
tradeCurrency: 법정 화폐로 환산할 때 사용한 ISO 4217 표준을 따르는 법정 화폐 코드입니다. "KRW", "USD", "EUR", "JPY", "CNY", "GBP", "CAD", "AUD", "HKD", "SGD"가 입력 가능하며 그 외의 화폐코드를 사용하게 되면 CODE 팀에게 알려주세요! 자세한 내용은 개발 FAQ페이지를 참고 부탁드립니다.
isExceedingThreshold: tradePrice가 법령에서 지정한 트래블룰 적용 기준을 초과하는지 여부로, true 또는false로 입력합니다.
payload(Required): IVMS101 메시지가 담긴 객체입니다. 상세 내용은 IVMS101타입 페이지를 참고해주세요.
'tradePrice' 계산법
'tradePrice'에는 해당 자산의 수량과 가격을 곱하여 법정 화폐로 계산한 값을, tradeCurrency에는 법정 화폐의 종류를 입력해야 합니다. 예를 들어 2 BTC를 이전하는 경우, 그 시점의 가격이 $42,708라고 한다면 총 가격은 42,708*2 = 85,416 달러 입니다. 이 경우 다음과 같이 입력해야 합니다.
"tradePrice": "85416",
"tradeCurrency": "USD",
{
"result" : "normal",
"transferId" : "b09c8d00-8da9-11ec-b909-0242ac120002",
"currency": "BTC",
"amount": "0.1",
"historicalCost": "",
"tradePrice": "10000",
"tradeCurrency": "KRW",
"isExceedingThreshold": "true",
"payload": "encrypted ivms101 payload"
}