P2SH 출력 (P2SH Output)

고급블록체인수정일

P2SH(Pay to Script Hash) 출력은 공개 키 대신 스크립트(상환 스크립트)의 해시에 비트코인을 잠그는 출력 유형으로, 사용할 때 원래 스크립트와 그 조건을 충족하는 데이터를 함께 제시해야 합니다.

자세히 알아보기

일반적인 P2PKH 출력은 "이 공개 키 해시의 주인이 서명하면 쓸 수 있다"는 조건으로 코인을 잠급니다. 그런데 멀티시그처럼 조건이 복잡하면 잠금 스크립트가 길어지고, 보내는 사람이 그 긴 스크립트를 직접 만들어 수수료까지 부담해야 했습니다.

P2SH(BIP16, 2012년 도입)는 이 부담을 받는 사람에게 넘깁니다. 출력의 잠금 스크립트(scriptPubKey)는 항상 다음처럼 짧은 형태입니다.

OP_HASH160 <20바이트 스크립트 해시> OP_EQUAL

여기서 해시는 받는 사람이 정한 상환 스크립트(redeem script)를 SHA-256 후 RIPEMD-160으로 해시한 값입니다. 코인을 쓸 때는 입력의 scriptSig에 ① 조건을 만족하는 데이터(예: 서명들)와 ② 상환 스크립트 원문을 넣습니다. 노드는 먼저 원문의 해시가 출력에 적힌 해시와 같은지 확인하고, 그다음 상환 스크립트를 실행해 서명 조건을 검증합니다. 상환 스크립트는 최대 520바이트로 제한됩니다.

블록체인·암호화폐에서는

P2SH 출력에 대응하는 주소는 Base58Check로 인코딩되며 메인넷에서 3으로 시작합니다. 대표 용도는 2-of-3 같은 멀티시그 지갑, 시간 잠금 조건, 그리고 세그윗 초기의 호환 형식인 P2SH로 감싼 세그윗(P2SH-P2WPKH)입니다. 보내는 쪽은 상대 조건을 몰라도 3 주소로 일반 송금처럼 보낼 수 있습니다. 상환 스크립트는 코인을 쓰는 순간에야 블록체인에 공개되므로, 그 전까지는 어떤 조건으로 잠겼는지 외부에서 알 수 없습니다. 오늘날 새 지갑은 수수료가 더 저렴한 네이티브 세그윗(P2WSH, bc1q)이나 탭루트(bc1p)를 주로 씁니다.

장점과 주의점

P2SH 덕분에 지갑은 상대방의 보관 방식(단일 키인지 멀티시그인지)을 몰라도 같은 방법으로 송금할 수 있게 되었고, 복잡한 스크립트의 데이터 비용은 그 스크립트를 쓰는 사람이 부담하게 되었습니다. 주의할 점은 상환 스크립트를 잃어버리면 키가 있어도 코인을 쓸 수 없다는 것입니다. 해시만 블록체인에 남아 있으므로, 멀티시그 지갑을 만들 때는 각 공개 키와 스크립트 구성(몇 개 중 몇 개 서명인지)을 함께 백업해야 합니다.

쉽게 말하면

택배 상자에 "열쇠 설명서의 지문"만 붙여 두고, 상자를 열 사람은 그 설명서 원본과 설명서가 요구하는 열쇠들을 함께 가져와야 열 수 있게 한 것입니다.

예시

2-of-3 멀티시그 상환 스크립트: OP_2 <공개키A> <공개키B> <공개키C> OP_3 OP_CHECKMULTISIG → 이 스크립트의 HASH160 값이 P2SH 출력에 들어가고, 사용 시 서명 2개와 스크립트 원문을 제출합니다.

이 글은 학습을 위한 일반 정보이며 투자 권유나 법률 자문이 아닙니다. 가상자산은 가격 변동이 크고 원금 손실 위험이 있습니다.