지갑 주소 검증하기

암호화폐의 지갑 주소는 지갑 주소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. 실패했다면 받은 그대로의 문자열로(‘:’을 포함하는) 주소 존재 여부를 검증합니다.

Last updated