본문으로 건너뛰기
buybitcoinsmart

용어집 / 주소와 키

BIP-49 파생

BIP-49 파생이란 무엇입니까?
BIP-49 파생은 중첩 SegWit 계정을 m/49'/0'/0'의 별도 브랜치에 두므로, 이를 읽지 못하는 지갑은 잘못된 잔액 대신 아무것도 표시하지 않습니다.

BIP-49에 명시되어 있습니다.

BIP-49는 키 트리의 첫 번째 하드닝 레벨인 49'를 주소가 P2SH 안에 P2WPKH를 감싼 형태인 계정에 배정합니다. 이 제안은 2016년 5월 19일에 지정되었고, 이후 자체 확장 키 버전 바이트를 갖게 되었는데, ypub에는 0x049d7cb2, yprv에는 0x049d7878입니다. 지갑이 ypub으로 시작하는 계정 키를 내보낸다면, 복구 시 살펴봐야 할 브랜치가 바로 그것입니다.

작동 방식

BIP-49는 두 가지 질문을 정리합니다. BIP-32 트리의 어느 브랜치에 감싼 SegWit 키가 있는지, 그리고 그 브랜치의 키로 주소가 어떻게 만들어지는지입니다.

이 브랜치는 BIP-44가 이미 사용하던 5단계 템플릿 m / purpose' / coin_type' / account' / change / address_index를 그대로 빌려 오고, 숫자 하나만 바꿉니다. 목적(purpose)은 44' 대신 49'가 됩니다. 코인 유형, 계정, 체인, 인덱스는 BIP-44가 부여한 의미를 그대로 유지합니다.

주소 부분은 기계적입니다. 압축된 공개 키를 해시하고, 20바이트 결과를 22바이트 리딤 스크립트로 감싼 뒤, 그 스크립트를 다시 해시하여 출력이 커밋하는 값을 얻습니다. 명세는 이 두 조각을 scriptSig: 0x160014{20-byte-key-hash}와 scriptPubKey: 0xA914{20-byte-script-hash}87로 씁니다.

흥미로운 점은 작성자가 거부한 선택지입니다. Weigl은 두 가지 접근법을 나열합니다. 이미 가진 계정을 유지하고 같은 공개 키에서 감싼 SegWit 주소를 매다는 방법, 또는 새로운 목적 아래 전용 계정을 만드는 방법입니다. 첫 번째는 무언가 잘못되기 전까지는 더 편리하고, 그다음에는 명세의 표현대로 그 계정이 "might show up but also it might miss some UTXOs"(나타날 수도 있지만 일부 UTXO를 놓칠 수도 있습니다) 상태가 됩니다. BIP-49가 전용 계정을 선택한 것은 바로 그 선택지가 "fails in a more visible way"(더 눈에 띄는 방식으로 실패한다)는 점 때문입니다. 빈 화면이 그럴듯한 잘못된 숫자보다 나은 오류 메시지입니다.

직렬화도 결국 같은 대우를 받았습니다. 이 브랜치의 확장 공개 키는 버전 바이트 0x049d7cb2를 사용하며 base58로 인코딩하면 ypub 접두사가 되고, yprv에는 0x049d7878을, 테스트넷에서는 upub과 uprv를 사용합니다.

확인할 수 있는 곳

BIP-49는 xpub 대신 ypub으로 시작하는 확장 키로 나타나며, 지갑이 네이티브 계정 옆에 나열하는 감싼 SegWit 계정으로도 나타납니다. 이 사이트의 순위에서 3.7로 평가한 Mycelium은 네이티브와 감싼 SegWit 계정을 한 앱에서 제공하며, 두 방식은 SLIP-0132가 zpub과 ypub으로 등록합니다.

ypub 접두사는 나중에 덧붙인 것이며, 그 이력은 지금도 드러납니다. 2014년에 목적 레벨을 도입한 BIP-43은 구현자들에게 모든 목적에 대해 0x0488B21E와 xpub 접두사를 유지하라고 지시했습니다. BIP-49는 처음에 그렇게 출시되었고, 2018년 2월 8일에 버전 바이트를 제대로 등록하기 위해 만들어진 SLIP-0132는 그 결과를 노골적으로 설명합니다. 접두사를 바꾸지 않은 탓에 "unsustainable user confusion"(지속 불가능한 사용자 혼란)이 생겼는데, 사용자가 어떤 브랜치의 xpub인지 기억해야 하거나 받는 도구가 두 주소 공간을 모두 스캔해야 했기 때문입니다. 접두사는 힌트일 뿐 보장이 아닙니다. 확장 키를 블록 탐색기에 붙여 넣었을 때 탐색기가 1로 시작하는 주소를 파생하는데 지갑은 3으로 시작하는 주소를 표시한다면, 여러분이 가진 것은 옛 접두사를 쓴 BIP-49 키이며, 도구에 경로를 직접 알려 주어야 합니다.

명세에는 도구를 검증해 볼 만한 테스트넷 벡터가 있습니다. abandon이라는 단어를 열한 번 반복한 뒤 about이 오는 문구, 계정 루트 m/49'/1'/0', 첫 수신 주소 2Mww8dCYPUpKHofjgcXcBCEGmniw9CoaiD2입니다.

BIP-49 파생 vs 중첩 SegWit

BIP-49 파생은 키에 관한 규칙이고, 중첩 SegWit은 체인이 보는 패턴입니다. 둘은 보통 함께 다니지만 어느 쪽도 다른 쪽을 함의하지 않습니다. 출력이 중첩 SegWit인 것은 그 출력이 커밋하는 스크립트 때문이며, 그 안에 어떤 경로가 키를 만들었는지는 기록되지 않습니다. 지갑은 가져온 개인 키로 이런 출력을 만들 수 있고, BIP-49가 거부한 접근법으로도 만들 수 있는데, 후자는 이미 BIP-44 계정에 있는 공개 키에서 두 번째 P2SH 주소를 파생하는 방식입니다. 따라서 코인이 3으로 시작하는 주소에 있다는 사실만으로는 어디에서 복구해야 하는지 알 수 없으며, 그래서 계정 경로를 시드 백업 옆에 메모로 남겨야 합니다.

혼동하기 쉬운 용어

자주 묻는 질문

제 확장 공개 키는 왜 xpub이 아니라 ypub으로 시작합니까?

BIP-49가 이 브랜치에 배정한 버전 바이트 0x049d7cb2로 직렬화되었고, 이것이 base58로 인코딩되면 ypub이 되기 때문입니다. 이 접두사는 파생 방식의 표지일 뿐 다른 종류의 키가 아니며, SLIP-0132가 xpub, zpub과 함께 등록합니다.

BIP-49는 더 이상 사용되지 않습니까?

아닙니다. 해당 BIP의 헤더 자체는 여전히 Deployed로 되어 있고, 49' 브랜치에 계정을 만든 지갑은 계속 정상적으로 파생합니다. 명세에서 그 브랜치를 철회한 부분은 없으며, 그 아래에 있는 코인을 구출할 필요도 없습니다.

주소만 보고 BIP-49에서 나왔는지 알 수 있습니까?

아닙니다. P2SH 출력은 커밋하는 스크립트 해시만 기록하므로, 3으로 시작하는 주소는 그 뒤의 경로에 대해 아무것도 드러내지 않습니다. 나중에 추론하려 하지 말고 계정 경로를 백업과 함께 적어 두십시오.

다음에 읽을 글

관련 용어

주소와 키 분야의 다른 용어

이 페이지를 영어로 읽기