용어집 / 트랜잭션과 수수료
SIGHASH_ANYONECANPAY
- SIGHASH_ANYONECANPAY란 무엇입니까?
- SIGHASH_ANYONECANPAY는 다이제스트에서 다른 모든 입력을 제거하는 수정자로, 서명이 지출하는 코인 하나만을 대상으로 하며 다른 사람들이 자유롭게 트랜잭션에 참여할 수 있게 합니다.
이것은 그 자체로 하나의 모드가 아닙니다. 이 플래그는 값 128을 가지며 세 가지 기본 모드 중 하나에 더해져 129, 130, 131을 만들어 내고, 각 조합은 서명자가 낯선 사람이 무엇을 바꾸도록 허용할 것인지에 대한 서로 다른 질문에 답합니다. 크라우드펀딩과 오디널스 마켓플레이스는 이 플래그가 제 역할을 하는 두 곳입니다.
작동 방식
이 수정자를 설정하면 다이제스트의 입력 쪽이 하나의 항목으로 줄어듭니다. 지출되는 아웃포인트, 그 시퀀스 번호, 그리고 그것이 잠금 해제하는 스크립트입니다.
다른 모든 입력은 계산에서 사라집니다. 이 규칙 아래에서 서명하는 사람은 다른 사람들이 코인을 몇 개나 기여했는지, 어떤 순서로 했는지, 또는 이후에 더 들어올지에 대해 알지도 관심도 두지 않으며, 나중에 입력을 추가해도 앞서 이루어진 서명을 무효화할 수 없습니다. 그 속성이 이 기능의 전부이며, 서명을 모을 수 있게 해 주는 것이 바로 이것입니다. 여러 사람이 서로 다른 시각에, 서로 다른 기기에서 따로따로 서명할 수 있고, 누군가가 그 조각들을 모아 하나의 유효한 트랜잭션으로 만들 수 있습니다.
출력 쪽은 여전히 기본 모드가 좌우하며, 세 조합은 매우 다르게 작동합니다.
- 129, 즉 모든 출력 규칙과 결합된 수정자는 "내 코인이 들어가고 지급은 정확히 이 목록이어야 한다"는 뜻입니다. 입력은 추가될 수 있지만 출력은 추가될 수 없습니다.
- 130, 즉 출력 없음 규칙과 결합된 수정자는 프로토콜이 허용하는 가장 약한 서명입니다. 코인 하나가 들어가고, 무엇이 어디로 가는지에 대한 진술이 전혀 없습니다.
- 131, 즉 단일 출력 규칙과 결합된 수정자는 "내 코인이 들어가고 나는 내 인덱스의 출력을 받아야 한다"는 뜻입니다. 그 밖의 모든 것은 열려 있습니다.
이 플래그를 볼 수 있는 곳
두 가지 구성이 이것을 본격적으로 사용하며, 둘 모두 낯선 사람들이 이미 서명된 내용을 깨뜨리지 않고 자금을 추가할 수 있다는 점에 의존합니다.
첫째는 어슈어런스 계약(assurance contract)으로, 비트코인판 크라우드펀딩 서약입니다. 각 후원자는 프로젝트의 지급액을 담은 고정된 출력 목록에 대해 값 129로 서명하고, 각 서약은 하나의 입력이 됩니다. 서약된 입력이 출력을 충당해야만 트랜잭션이 유효해지므로, 모금 목표는 에스크로 대리인이 아니라 산술로 스스로를 강제하며, 목표에 못 미친 캠페인은 그저 유효한 트랜잭션을 만들어 내지 못할 뿐입니다. 코인이 움직이지 않기 때문에 서약하는 데도 비용이 들지 않고 철회하는 데도 비용이 들지 않습니다.
둘째는 사전 서명된 마켓플레이스 제안입니다. 판매자는 자신의 인스크립션 또는 룬 출력과 원하는 가격에 대해 값 131로 서명하고, 그 결과를 부분 서명된 트랜잭션으로 공개하며, 어떤 구매자든 자신의 입력, 자신의 잔돈, 그리고 수수료로 그것을 완성합니다. 등록 계약도, 수탁자도, 결제 자체를 위해 신뢰할 상대방도 없습니다.
경고가 따라붙습니다. 공개 멤풀에 놓인 값 130은 먼저 집어 가는 사람에게는 공짜 돈이며, 안전한 조합과는 단 1비트 차이입니다. 서명 코드를 검토한다면 기본 모드가 하드코딩된 상수인지, 그리고 변할 수 있는 부분이 수정자뿐인지 확인하십시오.
플래그 바이트 읽기
sighash 플래그 바이트를 두 부분으로 나누면 더 이상 난해하지 않습니다. 하위 비트가 기본 모드를 나타냅니다. 1은 모든 출력, 2는 없음, 3은 일치하는 단일 출력입니다. 값이 128인 상위 비트가 수정자입니다. 따라서 81로 끝나는 서명은 다른 입력을 제외한 모든 것을 대상으로 하고, 83은 마켓플레이스 규칙이며, 수정자 없는 평범한 01은 여러분이 지출할 때마다 여러분의 지갑이 만들어 내는 보통의 결제입니다.