용어집 / 트랜잭션과 수수료
SIGHASH_NONE
- SIGHASH_NONE란 무엇입니까?
- SIGHASH_NONE는 트랜잭션의 입력에 서명하면서 출력에는 전혀 커밋하지 않는 플래그이며, 이 때문에 자금의 목적지가 이를 다루는 누구에게나 열려 있게 됩니다.
백지수표로 생각하시면 됩니다. SIGHASH_NONE 입력은 지출을 승인할 뿐 누가 지급받는지에 대해서는 아무것도 말하지 않으므로, 채굴업자나 트랜잭션을 중계하는 노드는 트랜잭션이 확정되기 전에 모든 출력을 다시 작성할 수 있습니다. 이 플래그의 값은 2이며, 소비자용 지갑은 이를 제공하지 않고, 본인의 트랜잭션에서 이를 본다면 무언가 잘못된 것입니다.
작동 방식
이 다이제스트를 구성한다는 것은 해싱 전에 출력 목록을 완전히 버린다는 뜻입니다.
남는 부분은 여전히 상당합니다: 트랜잭션 버전, 서명하는 입력의 아웃포인트, 그 입력 자체의 시퀀스 번호, 지출하는 스크립트, 그리고 록타임입니다. 다른 모든 입력의 시퀀스 번호는 0으로 설정되며, 이는 두 번째 자유입니다. 이 서명이 이미 존재하는 상태에서 공동 서명자가 자신의 상대적 타임록을 조정할 수 있게 하기 때문입니다.
남지 않는 부분이 핵심입니다. 확약되는 출력이 없으므로, 서명은 이 코인이 이 버전의 트랜잭션에서 이 시점 이후에 지출될 수 있다는 것만 말합니다. 절반만 만들어진 트랜잭션을 가진 사람이 가치의 목적지를 정하며, 확정되지 않은 트랜잭션은 브로드캐스트되는 순간부터 공개되므로 네트워크에서 이를 보는 누구도 여기에 포함됩니다.
ANYONECANPAY 수정자를 추가하면 바이트는 0x82가 되며, 이는 비트코인이 만들 수 있는 가장 약한 서명입니다: 입력 1개만 포함하고 그 밖의 것은 전혀 포함하지 않습니다.
이 플래그는 2009년 1월의 첫 릴리스부터 존재해 왔고 한 번도 제거되지 않았습니다. 제거하면 아무도 그 결과를 생각하기 전에 잠긴 코인이 고립되기 때문입니다. BIP143과 BIP341은 모두 segwit과 Taproot를 위해 이를 조용히 버리지 않고 충실히 다시 구현했습니다.
발견되는 곳
SIGHASH_NONE는 거의 어디에서도 나타나지 않으며, 이는 정확히 예상할 수 있는 결과입니다.
이론상의 용도는 한 당사자가 자금을 제공하고 상대방이 목적지를 선택하되, 그 상대방이 서명 외의 무언가에 구속되는 프로토콜입니다. 널리 사용되는 비트코인 애플리케이션은 그런 방식으로 작동하지 않습니다. 유연한 입력이 필요한 구성은 대신 ANYONECANPAY를 사용하고, 유연한 출력이 필요한 구성은 가능한 목적지가 미리 고정된 사전 서명 방식의 대안을 사용합니다.
따라서 실제로 발견되는 SIGHASH_NONE 서명은 버그이거나 진행 중인 절도입니다. 멤풀은 지출 가능한 이상 항목을 찾아 스캔하는 봇에 의해 지속적으로 감시되며, 이를 담은 트랜잭션은 오래 눈에 띄지 않고 머물지 않습니다. 서명 코드를 작성하는 사람은 이 플래그를 절대 전달하지 않는 정수로 취급해야 하고, 수탁 시스템을 감사하는 사람은 이 플래그가 호출자가 제공하는 매개변수가 아니라 상수임을 확인해야 합니다.
비트코인을 구매해 보유하는 사람에게 요점은 짧습니다: 이런 상황을 마주치지 않을 것이고, 지갑이 이를 제공하지 않으며, 이 플래그로 서명하라고 요구하는 소프트웨어는 떠나야 할 소프트웨어입니다.
SIGHASH_NONE vs SIGHASH_SINGLE
SIGHASH_NONE는 출력이 하나도 없는 것에 확약합니다. SIGHASH_SINGLE는 정확히 1개, 즉 서명하는 입력과 같은 인덱스에 있는 출력에 확약합니다. 그 확약된 출력 1개가 서명의 성격을 완전히 바꿉니다. SIGHASH_SINGLE에서는 서명자가 자신의 지급을 보장하면서 트랜잭션의 나머지를 열어 둘 수 있으며, 이는 스왑과 마켓플레이스를 위한 쓸 만한 구성 요소입니다. SIGHASH_NONE는 서명자에게 아무것도 보장하지 않으며, 그래서 하나는 실제 용도가 있고 다른 하나는 주로 사고 보고서에 등장합니다.