Bitcoin Cash 주소 변환기란?
Bitcoin Cash 주소 변환기는 하나의 BCH 계정을 두 가지 표기 사이에서 변환합니다. 하나는 CashAddr 규격에 정의된 CashAddr 형식 bitcoincash:q… / p…이고, 다른 하나는 Bitcoin에서 물려받은 레거시 Base58Check 형식 1… / 3…입니다. 둘 다 같은 160비트 공개 키 해시(P2PKH) 또는 스크립트 해시(P2SH)를 담고 있으며, 인코딩과 체크섬만 다릅니다.
CashAddr 인코딩 방식
- 버전 바이트. 1바이트로, 상위 비트는 유형(0 = P2PKH, 1 = P2SH)을, 하위 3비트는 해시 크기(0 = 160비트, 3 = 256비트)를 나타냅니다.
- 5비트 재그룹화. 버전 바이트와 해시를 이어 붙인 뒤 bech32와 똑같이 0비트로 패딩하면서 5비트 그룹으로 다시 자릅니다.
- 체크섬. 확장된 접두사(각 문자의 하위 5비트, 그 뒤 0), 페이로드, 0 그룹 8개에 대해 생성 상수 0x98f2bc8e61, 0x79b76d99e2, 0xf33e5fb3c4, 0xae2eabe2a8, 0x1e4f43e470을 사용해 40비트 BCH 코드를 계산합니다. 체크섬 그룹 8개가 뒤에 붙습니다.
- 알파벳. 각 그룹은 32문자 집합
qpzry9x8gf2tvdw0s3jn54khce6mua7l로 표기하므로 문자열에 1, b, i, o는 절대 나타나지 않습니다.
예시
규격의 첫 번째 테스트 벡터는 1BpEi6DfDAUFd7GtittLSdBeYJvcoaVggu입니다. Base58Check로 디코딩하면 버전 0x00(P2PKH)과 hash160 76a04053bda0a88bda5177b86a15c3b29f559873이 나옵니다. 앞에 CashAddr 버전 바이트 0x00을 붙이고 5비트 값으로 재그룹화한 뒤 체크섬을 덧붙이면 bitcoincash:qpm2qsznhks23z7629mms6s4cwef74vcwvy22gdx6a가 됩니다. 같은 해시의 P2SH 변형은 레거시 형식에서는 3으로(3CWFddi6m4ndiGyKqzYvsFYagqDLPVMTzC), CashAddr에서는 p로(bitcoincash:ppm2qsznhks23z7629mms6s4cwef74vcwvn0h829pq) 시작합니다. 위에 아무거나 붙여넣으면 변환 과정을 바로 볼 수 있습니다.
형식 한눈에 보기
| 형식 | 예시 | 체크섬 | BTC와 구별 가능? |
|---|---|---|---|
| 레거시 P2PKH | 1…, 26–35자 | 4바이트 double-SHA-256 | 아니요 |
| 레거시 P2SH | 3…, 34자 | 4바이트 double-SHA-256 | 아니요 |
| CashAddr P2PKH | bitcoincash:q…, 접두사 뒤 42자 | 40비트 polymod | 예 |
| CashAddr P2SH | bitcoincash:p…, 42자 | 40비트 polymod | 예 |
| CashAddr P2SH-32 | bitcoincash:p…, 62자 | 40비트 polymod | 예, 레거시 형식 없음 |
| 테스트넷 | bchtest:q… 또는 m… / n… / 2… | 동일 | 접두사로만 |
레거시 경고가 중요한 이유
거래소는 아직도 BCH 입금에 레거시 주소를 보여 주고, 사용자는 여전히 Bitcoin 주소를 BCH 출금 폼에 붙여넣습니다. 바이트가 동일하기 때문에 Bitcoin 사용자의 1… 주소로 보낸 BCH 트랜잭션은 유효하며 Bitcoin Cash 체인에서 확정되지만, 수신자의 지갑은 그 체인을 보지 않습니다. 코인이 사라지는 것은 아니지만 해당 개인 키 보유자만 BCH 지갑으로 회수할 수 있고, 대부분의 수신자는 방법을 모릅니다. 보내기 전에 모든 주소를 CashAddr로 변환하면 이런 모호함이 사라집니다. bitcoincash:를 받아들이는 지갑은 BCH 지갑입니다.
일반적인 용도
- 오래된 거래소의 레거시 입금 주소를 최신 지갑과 결제 QR 생성기가 기대하는 CashAddr 형식으로 변환하기.
- 접두사 없이 붙여넣은
q…문자열이 메인넷인지bchtest인지 확인하기. - 스크립트를 만들거나 검증하기 위해, 또는 같은 주소의 두 표기를 비교하기 위해 hash160 추출하기.
Bitcoin 자체에는 비트코인 주소 검증기를, 일반 bech32 문자열에는 bech32 인코더 / 디코더를 사용하세요.