본문으로 건너뛰기
buybitcoinsmart

용어집 / 개발자 참고 자료

Bitcoin URI

별칭은 BIP21입니다.

Bitcoin URI란 무엇입니까?
Bitcoin URI는 결제 정보를 bitcoin:로 시작하는 하나의 클릭 가능한 문자열에 담으며, 주소와 금액, 레이블을 포함할 수 있습니다.

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

비트코인 URI는 링크이며, 클릭하면 결제 정보가 이미 채워진 상태로 지갑이 열립니다. BIP21은 2012년 1월 29일에 형식을 확정했습니다. 스킴 bitcoin:, 주소, 그다음 물음표 뒤에 선택적 매개변수가 옵니다. 맨 주소 대신 URI를 받으면 정확히 복사해야 하는 항목 목록에서 금액이 빠집니다.

작동 방식

BIP21의 문법은 의도적으로 작습니다. 이것이 이 형식이 10년 넘게 변경 없이 유지된 주된 이유입니다.

완전한 URI는 bitcoin:bc1q...w5mdq?amount=0.00042&label=Coffee%20Shop&message=Order%20118과 같이 씁니다. 콜론과 물음표 사이의 모든 것은 목적지 주소입니다. 그 뒤의 모든 것은 앰퍼샌드로 연결된 name=value 쌍의 집합이며, BIP21이 정의하는 것은 세 가지뿐입니다.

  • amount은 비트코인의 소수 단위 숫자이며, 사토시가 아니고, 마침표로 쓰고 쉼표나 통화 기호를 쓰지 않습니다. amount=0.01은 비트코인의 100분의 1을 뜻하며, 1,000,000 사토시입니다.
  • label은 상점이나 개인처럼 대금을 받는 쪽의 이름을 지정합니다.
  • message는 결제 목적을 나타냅니다.

두 텍스트 필드는 모두 퍼센트 인코딩된 UTF-8이므로, 공백은 %20이 되고 레이블 안의 앰퍼샌드는 %26이 됩니다.

두 가지 규칙이 이 형식을 확장 가능하게 유지합니다. 알 수 없는 매개변수는 무시되므로, 오래된 지갑이 새 URI를 문제없이 읽을 수 있습니다. req- 접두사가 붙은 매개변수는 예외입니다. 이를 이해하지 못하는 지갑은 무엇을 하려는 것인지 추측하지 말고 URI 전체를 거부해야 합니다. 이 단 하나의 규칙이 업그레이드 메커니즘의 전부이며, 이후의 모든 확장을 오래된 소프트웨어를 깨뜨리지 않고 흡수해 왔습니다.

확장은 오늘날 이 형식이 실제로 존재하는 곳입니다.

  • BIP72가 추가한 r=은 BIP70 결제 요청을 가리켰습니다. 그 경로는 더 이상 쓰이지 않습니다.
  • BIP78의 pj=은 PayJoin 엔드포인트를 지정하여 지불인과 수취인이 함께 협력 트랜잭션을 구성할 수 있게 합니다.
  • lightning=은 온체인 주소와 함께 BOLT11 인보이스를 담습니다. 이를 이해하는 지갑은 라이트닝 네트워크로 결제하고, 이해하지 못하는 지갑은 주소로 대체하며, 판매자 결제 화면은 그 결과를 하나의 통합 QR 코드로 출력합니다.
  • BIP353은 _bitcoin-payment 레이블 아래 DNSSEC로 서명된 TXT 레코드 안에 URI 전체를 게시하므로, 사람이 읽을 수 있는 이름이 결제 지침으로 확인됩니다.

주소 자체는 선택 사항입니다. BIP21의 문법은 주소 문자 0개를 허용하며, bitcoin:?r=...가 그렇게 작동했고 오늘날 제안만 담은 URI도 그렇게 작동합니다.

비트코인을 구매할 때 이것이 중요한 이유

비트코인 URI가 가장 중요한 순간은 출금 시점입니다. 본인이 통제하지 않는 거래소에서 코인이 나와 본인이 통제하는 곳에 도착할 때입니다.

이 사이트에 등재된 거의 모든 거래소가, Kraken과 River부터 Relai와 Bitpanda에 이르기까지, 목적지 주소를 위한 일반 텍스트 상자를 제공합니다. 그 상자는 주소를 원하며 URI를 원하지 않습니다. bitcoin:bc1q...을 그 상자에 붙여 넣으면 보통 검증 오류가 나고, 때때로 필드가 조용히 잘려 출금이 실패합니다. 콜론과 물음표 사이에 있는 것만 가져다 붙여 넣으십시오.

흐름은 반대 방향으로도 갑니다. 본인의 하드웨어 지갑 수신 화면, 판매자 결제 화면, 개인 간 거래는 모두 맨 주소가 아니라 URI를 건넵니다. URI는 정확히 한 가지 점에서 더 안전합니다. 금액이 함께 다니므로 총액을 잘못 입력할 수 없습니다. 가장 중요한 점에서는 더 안전하지 않습니다. URI 안의 어떤 것도 서명되지 않습니다. label 필드는 그 문자열을 만든 사람이 고른 자유 텍스트이므로, 피싱 페이지가 label=Kraken%20Withdrawal을 써 넣으면 지갑은 아무 설명 없이 그 단어들을 표시합니다.

그래서 중요한 통제 수단은 하드웨어 지갑 화면입니다. URI가 무엇을 주장하든, 서명 장치는 지금 결제하려는 주소를 클립보드 악성코드가 다시 쓸 수 없는 화면에 표시합니다. 링크를 만든 브라우저 탭이 아니라 장치에서, 앞부분과 뒷부분의 문자를 비교하십시오.

실제 예시: 커피숍 인보이스 결제

계산대가 QR 코드를 출력했고 휴대전화가 bitcoin:bc1q...w5mdq?amount=0.00042&label=Kaffeehaus&message=Table%207을 읽었다고 가정합니다.

지갑은 그로부터 세 가지 사실을 해석합니다. 0.00042 비트코인을 결제하고, 그 주소로 보내고, 확인 화면에 Kaffeehaus와 Table 7이라는 단어를 표시합니다. 그다음 URI가 요청하지 않은 여러 일을 합니다. 보유한 미사용 출력 중 무엇을 쓸지 고르고, 자체적인 멤풀 관점에서 수수료율을 추정하고, 잔돈 출력을 추가하고, 승인을 기다립니다.

하지 않는 일은 수취인에 관한 어떤 것도 검증하지 않는 것입니다. 상점이 그 주소를 통제하는지, 0.00042 비트코인이 합의된 가격인지, 레이블이 정직한지 확인하지 않았습니다. 그 확인은 본인의 몫입니다. 커피 한 잔이라면 잃는 것은 커피 한 잔입니다. 다섯 자리 금액 이체라면 승인하기 전에 서명 장치에서 주소를 네 글자씩 끊어 읽어 볼 가치가 있습니다.

비트코인 URI vs 주소

주소는 안내 없이 목적지만 있는 것입니다. 현대적인 bech32 주소는 단일 키 segwit 출력의 경우 42자, taproot 출력의 경우 62자에 이르며, 얼마를 누구에게 보낼지에 관해서는 아무것도 말하지 않습니다. URI는 컨테이너입니다. 주소에 선택적인 금액, 레이블, 메시지를 더한 것입니다. URI에서 스킴과 첫 물음표 사이의 텍스트를 읽으면 주소를 언제든 복구할 수 있습니다. 반대 방향으로는 갈 수 없습니다. 주소는 애초에 금액을 담은 적이 없기 때문입니다.

비트코인 URI vs BOLT11 인보이스

BOLT11 인보이스는 라이트닝 네트워크의 대응물이며, 중요한 세 가지 점에서 다르게 작동합니다. 일회용이고, 주소가 아니라 결제 해시에 확정되며, 만료되는데 판매자가 값을 설정하지 않으면 기본값이 3,600초입니다. 비트코인 URI는 만료되지 않고 두 번 결제될 수 있으며, 이는 기부 페이지에서는 장점이고 인보이스에서는 위험입니다. 통합 QR 코드는 일반 URI의 lightning= 매개변수 안에 BOLT11 문자열을 넣어 선택을 피하며, 각 지갑이 지원하는 경로를 택하게 합니다.

혼동하기 쉬운 용어

자주 묻는 질문

거래소의 출금 입력란에 bitcoin: URI를 붙여 넣을 수 있습니까?

일반적으로는 아닙니다. 대부분의 출금 양식은 주소만 입력받도록 되어 있어 bitcoin: 접두사가 붙은 텍스트는 거부하거나 잘라냅니다. 콜론과 첫 물음표 사이의 텍스트만 복사한 뒤 지갑의 수신 화면과 대조해 확인하십시오.

bitcoin: URI의 금액은 비트코인 단위입니까, 사토시 단위입니까?

비트코인입니다. BIP21은 비트코인의 소수를 지정하므로 amount=0.01은 비트코인의 100분의 1, 즉 1,000,000 사토시입니다. 결제 프로토콜 필드와 라이트닝 인보이스는 대신 사토시와 밀리사토시를 사용하며, 이는 단위 오류의 흔한 원인입니다.

bitcoin: URI는 제가 누구에게 지급하는지 증명합니까?

아닙니다. BIP21 URI 안의 어떤 내용도 서명되거나 검증되지 않으며, 레이블은 링크를 만든 사람이 제공한 자유 텍스트입니다. 승인하기 전에 하드웨어 지갑 자체의 화면에서 수신 주소를 확인하십시오.

다음에 읽을 글

관련 용어

개발자 참고 자료 분야의 다른 용어

이 페이지를 영어로 읽기