Payjoin은 수취인과 함께 Bitcoin 결제를 준비하는 방식입니다. 양측이 같은 거래에 자기 자금을 보태지만, 개인키는 각자 보관하고 자기 돈을 쓰는 것도 직접 승인합니다. 따라서 공개 체인만 보는 관찰자는 사용된 코인이 원래 누구 것이었는지 추정하기 어려워집니다. 별도 화폐가 생기는 것은 아니며 익명성을 보장하지도 않습니다.
앨리스가 밥에게 돈을 보냅니다. 지갑은 비트코인을 받고 보내는 앱이나 기기입니다. 앨리스의 지갑은 하나의 은행 계좌 잔액에서 돈을 빼는 대신, 이전 거래에서 만들어진 미사용 출력인 UTXO를 고릅니다. 각 출력에는 금액과 이를 사용할 수 있는 조건이 있습니다. 새 거래의 입력은 쓸 UTXO를 가리키고, 새 출력은 밥에게 줄 금액과 필요한 경우 앨리스에게 돌아갈 잔돈을 만듭니다. 일반 결제에서는 앨리스만 자금을 제공합니다. Payjoin에서는 밥도 자기 UTXO를 추가합니다. 밥은 약속된 돈을 받으면서 원래 갖고 있던 자금 일부도 옮깁니다. 두 지갑 모두 결과를 확인해야 합니다. 이후 각자는 디지털 서명으로 자기 입력을 쓰는 것을 승인하며, 개인키를 주고받지 않습니다. 개인키는 이러한 서명을 만드는 데 사용하는 비밀 숫자 값입니다. [1] [3] [8] [6]
분석가는 함께 쓰는 입력이 같은 지갑 소유라고 추정하곤 합니다. 이를 common-input-ownership heuristic이라고 합니다. Bitcoin 규칙이나 신원 증명이 아니라 흔한 사용 방식에 기댄 추정입니다. Payjoin은 이 추정이 틀리는 유효한 거래를 만듭니다. 따라서 관찰자는 모든 입력을 자동으로 앨리스 소유라고 볼 수 없습니다. 다만 다른 정보가 분석에 도움이 될 수는 있습니다. [1] [3]
금액은 비트코인의 가장 작은 단위인 sats로 표시하겠습니다. 이해를 위해 수수료는 잠시 빼겠습니다. 앨리스는 100,000 sats 입력으로 밥에게 20,000 sats를 지급하고 80,000 sats를 잔돈으로 받습니다. 밥이 자기 50,000 sats 입력을 추가하면 밥의 출력은 70,000 sats가 됩니다. 입력과 출력의 합계는 각각 여전히 150,000 sats입니다. 밥이 덤을 받은 것은 아닙니다. 50,000 sats는 원래 자기 돈이었고, 새로 받은 것은 약속한 20,000 sats뿐입니다. 실제 거래는 물론 수수료도 내야 합니다. [1] [6]
지갑이 협력하려면 공통 절차와 메시지 형식이 필요합니다. Nicolas Dorier의 기술 문서 BIP78은 2019년에 번호를 받았으며, PSBT — Partially Signed Bitcoin Transaction을 사용합니다. 이는 거래와 그 거래를 검토하고 서명하는 데 필요한 정보를 묶은 데이터이지, 이미 네트워크로 보낸 결제 자체는 아닙니다. 결제 요청의 pj 매개변수는 지갑이 연락할 서비스 주소를 알려 줍니다. 송금자는 먼저 원래 결제를 완전히 서명하고 최종 처리까지 마친 PSBT로 상대에게 보냅니다. 형식 이름에 “partially”가 들어 있어도 이 거래는 이미 전파할 수 있습니다. 수취인은 자기 입력과 그 서명을 추가한 수정안을 돌려보냅니다. 송금자는 이를 검토하고 자기 입력에 다시 서명한 뒤, 완성된 거래를 Bitcoin 네트워크에 전파합니다. 연결은 암호화되어야 하며 접속한 서비스를 인증해야 합니다. PSBT는 지갑 백업이 아닙니다. 키를 파생하는 바탕인 seed, 개인키, 불필요한 키 파생 정보는 보내지 않습니다. [1] [5]
송금자 지갑은 자기 입력과 보호 대상 출력이 그대로인지, 잔돈이 임의로 줄지 않았는지, 수수료 부담이 허용 한도를 넘지 않았는지 확인해야 합니다. 서명하는 것은 자기의 원래 입력뿐입니다. 프로토콜은 정확한 조건 아래 수취인 출력의 일부 변경을 허용하지만, 전체 결제를 마음대로 돌릴 권한을 주지 않습니다. 서명 장치에서는 표시된 금액을 이해해야 하며, 그저 다음 화면을 승인해서는 안 됩니다. [1] [5]
입력을 추가하면 공간이 늘어나 해당 결제의 수수료 총액이 커질 수 있습니다. 누가 얼마까지 부담할지는 지갑끼리 협의합니다. 대신 수취인이 자기 UTXO를 합치거나 원래 별도로 할 결제를 함께 넣을 수도 있습니다. 전체 절감액은 같은 작업들을 비교해 판단해야 하며, 모든 Payjoin이 더 싸다는 뜻은 아닙니다. 거래 크기가 커졌는데 수수료의 satoshi 액수가 같으면 수수료율은 낮아집니다. [1] [2]
BIP78에서는 수취인이 인터넷으로 접속 가능한 서비스를 제공해야 하며, 양측이 동시에 통신해야 합니다. 휴대전화 연결이 끊기면 불편합니다. 그래서 BIP77, 즉 Payjoin v2는 서버를 임시 우편함처럼 사용합니다. 한 지갑이 메시지를 두면 다른 지갑이 합의된 세션 기한 안에 나중에 가져갑니다. 이를 비동기 통신이라고 합니다. 결제 제안 자체는 종단간 암호화되어 참여 지갑만 읽을 수 있고, 우편함 운영자는 읽을 수 없습니다. OHTTP, Oblivious HTTP가 추가로 통신을 보호합니다. 요청이 별도의 중계자를 거치므로 우편함 서버는 보통 지갑의 네트워크 IP 주소를 보지 못합니다. IP 주소는 기기가 인터넷에서 통신할 때 사용하는 네트워크 주소입니다. 이 연결 관계를 숨기려면 중계자와 서버가 기록을 공유하지 않아야 합니다. 비트코인을 제어하는 개인키는 어느 쪽에도 보내지 않습니다. 그래도 서버는 메시지를 지연하거나 버릴 수 있습니다. 암호화만으로 전달까지 보장되지는 않습니다. [2] [4] [7]
Payjoin은 결제를 자동으로 익명으로 만들지 않습니다. 금액, 입력, 출력과 확정 시점은 체인에 계속 보입니다. 상대방은 협의 과정도 알고 있으며, 상점에는 이름이 적힌 주문서가 있을 수 있습니다. 공개 거래에 필수 Payjoin 표시는 없지만, 주소 재사용이나 지갑 특성이 또 다른 단서가 될 수 있습니다. 자동 수취 시스템은 끝내지 않을 요청으로 자기 UTXO를 알아내려는 시도에도 대응해야 합니다. [1] [2]
원래의 서명된 거래를 일반 대체 결제로 사용할 수 있습니다. 올바른 프로토콜에서는 이 거래와 Payjoin 제안이 같은 원래 입력을 쓰므로 최대 하나만 확정될 수 있습니다. 그렇다고 오류 뒤에 확인도 없이 별도의 독립 결제를 만들어도 되는 것은 아닙니다. 이미 전달한 서명으로 수취인이 원래 거래를 전파할 수 있습니다. 지갑은 Payjoin이 되었는지, 일반 대체 결제가 되었는지, 아직 아무것도 이루어지지 않았는지를 분명히 표시하고 체인 상태와 맞춰야 합니다. [1] [2]
Payjoin 송신과 수신은 서로 다른 기능이며 실제 지갑과 버전 조합이 호환되어야 합니다. 수취인의 입력을 추가하지 않은 채 요청만 처리하면 여기서 설명한 입력 소유권 추정에 대한 이점은 생기지 않습니다. 2026년 10월 17일 확인 시점에 BIP78은 Deployed, Dan Gould와 Yuval Kogman의 BIP77은 Draft 상태입니다. Payjoin은 일반 Bitcoin 거래를 이용해 애플리케이션끼리 협의합니다. Soft Fork를 기다리지 않으며 발행 규칙도 바꾸지 않습니다. [1] [2] [3]
더 정확히 이해하려면 이 항목과 함께 다음도 읽어 보세요 CoinJoin, Bitcoin 프라이버시, PSBT, 가명성, UTXO, Satoshi. 다음 항목에서도 이 글을 참조합니다 Change Address, Bitcoin 프라이버시, 가명성, Chain Surveillance.