# 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개와 스크립트 원문을 제출합니다.

---
출처: https://achivx.kr/glossary/p2sh-output-p2sh-%EC%B6%9C%EB%A0%A5/ · ACHIVX 용어 사전 · 수정일 2026-10-20
