지갑 주소 검증하기

다양한 지갑 주소의 검증 방법에 대해 설명합니다.

가상자산의 지갑 주소는 지갑 주소와 Tag 혹은 Memo, 그리고 이 둘을 구분하기 위한 구분자 등을 조합하여 다양한 형식으로 만들어 집니다. 주의해야 할 점은, 이렇게 다양한 형태로 존재하는 지갑 주소를 IVMS101 프로토콜 상에서는 하나의 문자열(string)로 다룬다는 점입니다.
따라서 이론적으로 가상자산의 지갑 주소는 다음과 같은 4가지의 형태가 존재할 수 있습니다.

번호설명예시 자산주소 형식
1주소 단순 문자열로 이루어진 경우BTC , ETH…address
2주소 문자열에 Tag나 Memo가 추가되는 경우EOS, XRP…address:memo or tag
3주소가 ‘:’을 포함BCH, Kaspa…currency:address
4주소가 ‘:’을 포함고 Tag나 Memo가 추가현재는 없으나 미래에 존재 가능currency:address:memo or tag

이때, 송신하는 측(Originator VASP)에서는 는 메모나 태그가 있는 지갑 주소를 ‘:’으로 연결해서 하나로 만들어 보내기로 약속되어 있습니다. 그렇기 때문에 수신하는 측(Beneficiary VASP)에서 예외 케이스 없이 잘 처리하기 위해서는, 다양한 지갑 주소의 경우를 고려하여 주소를 검증하는 흐름을 아래와 같이 잘 설계해야 합니다.


주소 먼저 검증

  1. 받은 그대로의 문자열로 주소가 존재하는지를 검증합니다.
  2. 검증에 실패했다면, 주소에 ‘:’이 있는지를 확인하고, 있다면 맨 우측 ‘:’을 기준으로 문자열을 분할합니다.
  3. 분할한 첫 번째 문자열로 주소가 존재하는지를 다시 검증합니다.

🚧

주의사항

  • 문자열 분할 시, ‘:’의 개수와 무관하게 반드시 맨 우측의 것을 기준으로 해야 합니다.
  • ‘:’의 존재 여부와 관계없이 전체 스트링 주소 검증은 우선적으로 진행합니다.

':' 유무 먼저 검증

  1. ‘:’이 없으면 바로 주소를 검증합니다.
  2. ‘:’이 있으면 맨 우측 ‘:’을 기준으로 문자를 분할하여 첫 번째 문자열로 주소를 검증합니다.
  3. 실패했다면 받은 그대로의 문자열로(‘:’을 포함하는) 주소 존재 여부를 검증합니다.