개발 FAQ

개발 관련 문의사항이 생기면 이 페이지를 먼저 참고해 주세요.

CODE-Cipher를 꼭 사용해야 하나요?

ID Connect를 연동하는 경우에는 CODE-Cipher를 필수적으로 사용해야 합니다. ID Connect를 사용하지 않는다면 의무는 아니지만, 개발 시간 단축에 큰 도움이 될 수 있습니다.

'VASP 목록 조회' 얼마나 자주 해야 하나요?

코드와 연동 되어 있는 VASP 목록은 실시간 조회가 필요할 정도로 변동성이 큰 리스트는 아닙니다. 따라서 비용 효율적 운영을 위해 적절한 주기를 설정해 호출하는 것을 권고드립니다.

API를 통한 출금 지원 시 트래블룰 준수를 위해서는 어떤 사항을 고려해야 하나요?

거래소에서 사용자 편의를 위해 API를 통한 출금을 지원하는 경우에도 트래블룰을 준수할 수 있도록 설계해야 합니다. 이 경우 고려해야 할 사항은 다음과 같습니다.

  • 수신인의 정보: 한글 성명(현지 이름)과 영문 성명을 모두 받아야 합니다.
  • 수신 지갑이 소속 거래소 정보: ‘entityId’와 매칭할 수 있는 정보를 받아야 합니다. 이 경우 CODE의 ‘VASP 목록 조회' API에서 반환된 목록을 게시해서 별도로 관리하거나, 조회하는 API를 만드는 것도 방법이 될 수 있습니다.
  • 트래블룰 준수 시스템 설계: API를 통한 출금시에도 출금시점에 CODE를 통해 송수신인 정보를 기록하고 보관할 수 있도록 합니다.

자세한 내용은 API 출금 시 트래블룰 페이지를 참고해 주세요.


'accountNumber'는 사용자 지갑과 거래소 출고 지갑 중 무엇을 입력해야 하나요?

'accountNumber'에는 사용자의 지갑 주소가 입력되어야 합니다. 송수신인 개인을 명확하게 구분할 수 있어야 트래블룰 데이터라 할 수 있으며, 사용자의 지갑 주소가 입력되어야 추후 거래가 취소되어도 이슈 없이 자산을 반환할 수 있습니다.

'currency'는 코인의 네트워크와 심볼(티커) 중 무엇을 입력해야 하나요?

'currency'에는 코인의 심볼(=코인 티커)을 입력해 주세요. 대소문자를 구분하지 않습니다.

'tradePrice'는 어떻게 계산하나요?

'tradePrice'는 법정 화폐로 환산한 가상자산의 금액입니다. 자체 시세 정보가 없는 경우에는 타 VASP의 시세 API를 사용하여 환산해야 하며, 계산하는 방법은 다음과 같습니다.

예를 들어 2 BTC를 이전하는 경우, 그 시점의 가격이 $42,708라고 한다면 총 가격은 42,708*2 = 85,416 달러 입니다. 이 경우 다음과 같이 입력해야 합니다. 'tradeCurrency'에는 ISO 4217 표준을 따르는 법정 화폐 코드를 입력합니다.

"tradePrice": "85416", 
"tradeCurrency": "USD",

'tradeCurrency'는 어떻게 입력하나요?

'tradeCurrency'는 ISO 4217 표준을 따르는 법정 화폐 코드로 입력합니다. 입력이 가능한 통화는 아래의 표를 참고 부탁드리며, 기타 다른 통화를 사용하게 되면 코드 팀에게 알려주세요!

CountryCurrency
🇺🇸 United States (USA)USD
🇰🇷 South Korea (KOR)KRW
🇪🇺 European Union (EU)EUR
🇯🇵 Japna (JPN)JPY
🇨🇳 China (CHN)CNY
🇬🇧 United Kingdom (GBR)GBP
🇨🇦 Canada (CAN)CAD
🇦🇺 Australia (AUS)AUD
🇭🇰 Hong Kong (HKG)HKD
🇸🇬 Singapre (SGP)SGD

IVMS101 필수값이 무엇인가요?

IVMS101 필수값은 송신인이 개인인지 법인인지, 수신인이 개인인지 법인인지에 따라 크게 4가지 경우의 수로 나뉘고, 그 안에서 한국어 이름과 영문 이름 정보를 어떻게 가지고 있는지에 따라 또 달라집니다. 뿐만 아니라 내부 정책에 영향을 받을 수도 있기 때문에 '필수값'이 시나리오에 따라 유동적으로 달라집니다. 어렵게 느껴질 수 있지만 일단 규칙만 이해하고 나면 어렵지 않을거예요!

코드가 제공하는 암호화 모듈 Cipher를 사용하지 않고 직접 암복호화 한다면 IVMS101 필수 값페이지를 참고해서 봐주세요.

Cipher를 사용한다면 Cipher가 경우의 수에 따른 필수값을 검증해 줍니다. 예제에 있는 파라미터를 사이퍼에 모두 입력해보고, 하나씩 제거하면서 테스트 해보는 방식을 추천드립니다. ('legalPerson' 파라미터 존재 여부로 법인과 개인을 구분합니다.) 아래 첨부된 샘플은 수많은 경우의 수 중 가장 많이 사용하는 두 가지 대표 케이스의 예시 코드입니다.

{
    "allianceName": "CODE",
    "remotePublicKey": "8DJomhrvr0zD11+m3nwG3ZeO9OsSY8uLHdA7WgoaX0g=",
    "apiType": "TRANSFER_AUTHORIZATION",
    "request": {
        "amount": "0.00001",
        "tradePrice": "55555",
        "transferId": "qwewq51312",
        "tradeCurrency": "KRW",
        "historicalCost": "",
        "currency": "BTC",
        "originatingVasp": {},
        "isExceedingThreshold": true,
      
        // optional for GTR,Sygna
        "address": "",
        "tag":"",
        "network":"",
      
        // originator
        "originatorNaturalPersonLastName": "Barnes",
        "originatorNaturalPersonFirstName": "Robert",
        "originatorNaturalPersonLocalLastName": "반스",
        "originatorNaturalPersonLocalFirstName": "로버트",
        "originatorNaturalPersonDob": "1990-01-01", 
        "originatorNaturalPersonPob": "Seoul", 
      
        "originatorLegalName": "(주)코인원",
        "originatorLegalPersonList" : [
          {
            "firstName": "Minsu",
            "lastName": "Kim",
            "localFirstName":"민수",
            "localLastName":"김"
          },
          {
            "firstName": "Soonhee",
            "lastName": "Lee",
            "localFirstName":"순희",
            "localLastName":"이"}
        ],
        "nameIdentifierType": "LEGL",
        "customerIdentification": "3213213qweqwe213312",
        "originatorWalletAddress": "012345678900",
      
        // originatingVasp
        "originatingVaspCountryOfRegistration": "KR",
        "originatingVaspLegalName": "Korbit Inc.",
        "originatingVaspNameIdentifierType" : "LEGL",
        "originatingVaspAddressType": "GEOG",
        "originatingVaspTownName": "Seoul",
        "originatingVaspAddressLine": [
            "14 Teheran-ro 4-gil, Gangnam-gu",
            "4th floor"
        ],
        "originatingVaspCountry": "KR",
        "originatingVaspNationalIdentifier": "1234567890",
        "originatingVaspNationalIdentifierType": "RAID",
        "originatingVaspRegistrationAuthority": "RA000657",
        // beneficiary
        "beneficiaryWalletAddress": "012345678901",
        "beneficiaryNameIdentifierType": "LEGL",
        "beneficiaryCustomerIdentification": "3213213qweqwe213312",
        "beneficiaryNaturalPersonLastName": "스미스",
        "beneficiaryNaturalPersonFirstName": "앨리스",
        "beneficiaryNaturalPersonLocalLastName": "Smith",
        "beneficiaryNaturalPersonLocalFirstName": "Alice",,
        "beneficiaryNaturalPersonDob": "1990-01-01", 
        "beneficiaryNaturalPersonPob": "Seoul", 
        
        "beneficiaryLegalName": "(주)코인원",
        "beneficiaryLegalPersonList" : [
          {
            "firstName": "Minsu",
            "lastName": "Kim",
            "localFirstName":"민수",
            "localLastName":"김"
          },
          {
            "firstName": "Soonhee",
            "lastName": "Lee",
            "localFirstName":"순희",
            "localLastName":"이"}
        ]
    }
}
{
    "allianceName": "CODE",
    "remotePublicKey": "8DJomhrvr0zD11+m3nwG3ZeO9OsSY8uLHdA7WgoaX0g=",
    "apiType": "TRANSFER_AUTHORIZATION",
    "request": {
        "amount": "0.00001",
        "tradePrice": "55555",
        "transferId": "qwewq51312",
        "tradeCurrency": "KRW",
        "historicalCost": "",
        "currency": "BTC",
        "originatingVasp": {},
        "isExceedingThreshold": true,
      
        "address": "",
        "tag":"",
        "network":"",
      
        // originator
        "originatorNaturalPersonLastName": "Barnes",
        "originatorNaturalPersonFirstName": "Robert",

        "originatorNaturalPersonDob": "1990-01-01", 
        "originatorNaturalPersonPob": "Seoul", 
      
        "nameIdentifierType": "LEGL",
        "customerIdentification": "3213213qweqwe213312",
        "originatorWalletAddress": "012345678900",
      
        // originatingVasp
        "originatingVaspCountryOfRegistration": "KR",
        "originatingVaspLegalName": "Korbit Inc.",
        "originatingVaspNameIdentifierType" : "LEGL",
        "originatingVaspAddressType": "GEOG",
        "originatingVaspTownName": "Seoul",
        "originatingVaspAddressLine": [
            "14 Teheran-ro 4-gil, Gangnam-gu",
            "4th floor"
        ],
        "originatingVaspCountry": "KR",
        "originatingVaspNationalIdentifier": "1234567890",
        "originatingVaspNationalIdentifierType": "RAID",
        "originatingVaspRegistrationAuthority": "RA000657",

        // beneficiary
        "beneficiaryWalletAddress": "012345678901",
        "beneficiaryNameIdentifierType": "LEGL",
        
        "beneficiaryNaturalPersonLastName": "Smith",
        "beneficiaryNaturalPersonFirstName": "Hello"
        
        
    }
}
{
    "allianceName": "CODE",
    "remotePublicKey": "8DJomhrvr0zD11+m3nwG3ZeO9OsSY8uLHdA7WgoaX0g=",
    "apiType": "TRANSFER_AUTHORIZATION",
    "request": {
        "amount": "0.00001",
        "tradePrice": "55555",
        "transferId": "qwewq51312",
        "tradeCurrency": "KRW",
        "historicalCost": "",
        "currency": "BTC",
        "originatingVasp": {},
        "isExceedingThreshold": true,
      
        "address": "",
        "tag":"",
        "network":"",
      
        // originator
        "originatorNaturalPersonLastName": "Barnes",
        "originatorNaturalPersonFirstName": "Robert",

        "originatorNaturalPersonDob": "1990-01-01", 
        "originatorNaturalPersonPob": "Seoul", 
      
        "nameIdentifierType": "LEGL",
        "customerIdentification": "3213213qweqwe213312",
        "originatorWalletAddress": "012345678900",
      
        // originatingVasp
        "originatingVaspCountryOfRegistration": "KR",
        "originatingVaspLegalName": "Korbit Inc.",
        "originatingVaspNameIdentifierType" : "LEGL",
        "originatingVaspAddressType": "GEOG",
        "originatingVaspTownName": "Seoul",
        "originatingVaspAddressLine": [
            "14 Teheran-ro 4-gil, Gangnam-gu",
            "4th floor"
        ],
        "originatingVaspCountry": "KR",
        "originatingVaspNationalIdentifier": "1234567890",
        "originatingVaspNationalIdentifierType": "RAID",
        "originatingVaspRegistrationAuthority": "RA000657",

        // beneficiary
        "beneficiaryWalletAddress": "012345678901",
        "beneficiaryNameIdentifierType": "LEGL",
        
        "beneficiaryNaturalPersonLastName": "",
        "beneficiaryNaturalPersonFirstName": "",
        "beneficiaryNaturalPersonLocalLastName": "성",
        "beneficiaryNaturalPersonLocalFirstName": "이름"
        
        
    }
}