비트코인 주소 형식
비트코인 메인넷 주소를 보면 숫자로 시작하는 것도 있고 bc1로 시작하는 것도 있습니다. 앞부분이 다르면 알트코인의 주소인지 걱정할 수 있지만, 여러 형식이 모두 비트코인을 받는 주소일 수 있습니다.
주소 형식은 거래 출력에 담긴 조건을 사람이 주고받기 쉬운 문자열로 표현하는 여러 방식입니다. 주소를 항상 단일 공개키를 가공한 값으로 설명할 수는 없습니다. 예를 들어 1 형식은 P2PKH, 3 형식은 P2SH 출력과 연결되며, bc1q와 bc1p는 각각 다른 세그윗 버전의 출력 조건을 나타냅니다. 비트코인 개발자 문서는 P2PKH와 P2SH의 차이를 설명합니다.
새로운 형식이 나와도 이전 형식이 즉시 사라지는 것은 아니므로, 현재는 여러 모양의 주소가 함께 사용됩니다.
여러 형식이 남아 있는 이유
비트코인 주소 규격은 처음부터 하나의 완성된 형태로 정해진 것이 아닙니다. 초기에는 숫자 1로 시작하는 P2PKH 형식이 사용되었고, 이후 숫자 3으로 시작하는 P2SH 형식이 등장했습니다. P2SH는 다중서명뿐 아니라 여러 스크립트 조건을 담을 수 있는 범용 형식입니다.
세그윗 v0 출력은 보통 bc1q로 시작하는 주소로 표현되고, 탭루트인 세그윗 v1 출력은 bc1p로 시작하는 주소로 표현됩니다. bc1q는 Bech32, bc1p는 Bech32m 인코딩을 사용합니다. Bech32m은 기존 Bech32와 구별되는 별도의 체크섬 규격이며, 모든 비트코인 주소가 Base58Check인 것은 아닙니다. 자세한 형식은 BIP173과 BIP350에서 확인할 수 있습니다.
새 주소 형식을 사용하려면 거래를 주고받는 서명 장치와 서비스가 그 형식을 지원해야 합니다. 서명 장치는 개인키로 거래에 서명하는 도구이며, 앱에 따라 주소 생성과 조회 기능도 제공합니다. 모든 사용자가 동시에 한 형식으로 강제 전환할 중앙 기관이 없기 때문에, 새 형식과 옛 형식이 나란히 남아 있습니다.
주소 형식별 특징
숫자 1로 시작하는 형식
숫자 1로 시작하는 주소는 일반적으로 P2PKH 출력을 가리키는 Base58Check 형식입니다. 호환성이 넓어 많은 앱과 서비스가 받아들이지만, 같은 조건을 다른 형식으로 표현한 거래보다 거래에서 더 많은 공간을 차지할 수 있습니다.
숫자 3으로 시작하는 형식
숫자 3으로 시작하는 주소는 P2SH 출력을 가리키는 Base58Check 형식입니다. 여러 명이 함께 서명하는 다중서명뿐 아니라 다른 스크립트 조건을 담을 수 있습니다. 세그윗 출력을 이전 형식의 겉모습으로 감싸는 방식인 P2SH-wrapped 세그윗에도 사용되었습니다.
겉으로는 옛 형식처럼 보이지만 안쪽 조건에 다른 방식이 들어갈 수 있습니다. 다만 사용 환경에 따라 수수료와 지원 범위가 달라질 수 있습니다.
bc1q로 시작하는 형식
bc1q로 시작하는 주소는 비트코인 세그윗 v0 출력에 사용되는 Bech32 형식입니다. 소문자와 숫자를 사용하고, 헷갈리기 쉬운 글자를 줄여 읽거나 옮겨 적기 쉽게 설계되었습니다.
세그윗의 공간 절감 효과는 주소 문자열의 길이만으로 결정되지 않습니다. 해당 출력을 나중에 소비하는 입력의 가상 크기와 거래의 전체 구성, 적용되는 수수료율에 따라 실제 수수료가 달라집니다.
bc1p로 시작하는 형식
bc1p로 시작하는 주소는 탭루트인 세그윗 v1 출력에 사용되는 Bech32m 형식입니다. 탭루트는 키 경로와 스크립트 경로 지출을 지원하며, 키 경로로 지출할 때는 스크립트 트리를 공개할 필요가 없습니다. 모든 거래소나 오래된 앱이 이 형식으로 보내는 기능을 지원하는 것은 아닙니다.
봉투의 규격에 비유하면
주소 형식은 편지를 담는 봉투의 규격과 비슷합니다. 긴 봉투와 넓적한 봉투가 모두 편지를 배달할 수 있지만, 거래에서 차지하는 공간과 필요한 처리 방식은 다를 수 있습니다.
거래 수수료는 주소 문자열의 길이나 받는 금액만으로 정해지지 않습니다. 거래의 입력과 출력 구성, 가상 크기, 수수료율에 따라 달라집니다. 따라서 주소 형식만 바꾸면 언제나 수수료가 줄어든다고 말할 수는 없지만, 세그윗 출력은 해당 출력을 소비할 때 입력 측면에서 공간을 줄이는 효과가 있을 수 있습니다.
옛 주소로 보낸 비트코인도 해당 주소와 그 출력 조건이 유효한 한 사용할 수 있습니다. 새 형식이 나왔다고 예전 주소가 자동으로 무효가 되는 것은 아닙니다.
호환성 때문에 생기는 차이
가장 새로운 형식이라도 모든 서비스가 지원하는 것은 아닙니다. 거래소나 오래된 앱에서 bc1p 주소로 보내지 못하는 경우가 있을 수 있습니다. 이때는 상대 서비스가 지원하는 주소 형식을 요청해야 합니다.
여러 주소 형식을 지원하는 서명 장치 앱에서는 필요한 형식을 선택할 수 있습니다. 일반적으로 앱이 기본으로 제공하는 주소를 사용하면 되며, 상대방이 보내지 못할 때만 호환되는 다른 형식을 선택하는 방식으로 대응할 수 있습니다.
주소를 확인하는 방법
앞뒤 몇 글자만 대조하는 것으로는 전체 주소와 수신처를 안전하게 검증할 수 없습니다. 특히 bc1q와 bc1p 같은 앞부분은 형식 식별자이므로 주소가 서로 다르다는 사실을 충분히 확인해 주지 않습니다.
송금할 때는 신뢰할 수 있는 경로로 받은 전체 주소와 실제 송금 대상 주소를 대조해야 합니다. QR 코드나 복사·붙여넣기는 손으로 옮겨 적는 실수를 줄일 수 있지만, 수신처가 믿을 만한지까지 보장하지는 않습니다. 하드웨어 서명 장치를 사용한다면 기기 화면에 표시된 주소도 확인하는 편이 좋습니다.
bc1 주소는 일반적으로 소문자로 적습니다. 대문자와 소문자를 섞어 쓰면 거부될 수 있으므로, 주소를 직접 입력하기보다 복사하거나 QR 코드로 전달하는 편이 안전합니다. 그래도 송금 전에는 전체 주소가 의도한 대상과 일치하는지 확인해야 합니다.
앞부분이 다르다고 해서 반드시 알트코인의 주소인 것은 아닙니다. 주소 인코딩에는 오류를 확인하기 위한 체크섬이 포함되어 있어 서명 장치나 서비스가 형식에 맞지 않는 입력을 대개 걸러 냅니다. 체크섬이 있다고 해서 잘못된 대상이나 사기성 주소까지 판별해 주는 것은 아니므로, 송금 전 확인은 별도로 필요합니다.
비트코인 주소 형식은 같은 비트코인을 받는 조건을 여러 방식으로 표기한 것입니다. 메인넷에서는 1·3·bc1q·bc1p처럼 앞부분이 다를 수 있습니다. 형식을 선택할 때는 수수료 구조와 오타 방지뿐 아니라 상대 서비스의 지원 여부, 그리고 실제 송금 대상과 전체 주소가 일치하는지도 함께 확인해야 합니다.