본문으로 건너뛰기
buybitcoinsmart

용어집 / 트랜잭션과 수수료

잠금 시각(Locktime)

별칭은 잠금 시각입니다.

잠금 시각(Locktime)란 무엇입니까?
잠금 시각(Locktime)은 트랜잭션의 마지막 4바이트로, 네트워크가 해당 트랜잭션을 블록에 받아들일 수 있는 가장 이른 블록 높이 또는 시계 시각을 정합니다.

잠금 시각은 프로토콜에 적어 넣은 선일자 수표라고 생각하시면 됩니다. 필드 하나에 두 가지 의미가 있고, 기준값 하나가 어느 쪽인지를 정합니다. 500,000,000 미만의 값은 블록 수를 세고, 그 이상의 값은 1970년부터 흐른 초를 셉니다. 여러분이 보내는 대부분의 트랜잭션에는 잠금 시각이 붙으며, 그 잠금 시각은 채굴업자의 교묘한 수법에서 여러분을 보호하는 것 외에는 아무 일도 하지 않습니다.

작동 방식

잠금 시각은 직렬화된 트랜잭션의 맨 끝에 자리하며, 지출에 관한 다른 어떤 것보다 먼저 검사됩니다.

기준값 규칙 덕분에 필드 하나가 두 가지 일을 합니다. 잠금 시각이 900,000이면 그 트랜잭션은 높이 900,000 미만의 블록에는 들어갈 수 없습니다. 잠금 시각 1,800,000,000은 유닉스 타임스탬프이며, 앞선 11개 블록의 중앙 시각이 그 시점을 지나기 전까지는 트랜잭션이 들어갈 수 없다는 뜻입니다. 경계값 500,000,000은 1985년 11월 5일에 해당하는데, 이는 비트코인이 존재하기 전이면서 그럴듯한 어떤 블록 높이보다도 충분히 높은 값입니다. 필드는 4바이트이므로 표현할 수 있는 최대 시각은 2106년 2월 7일입니다.

스위치가 하나 있습니다. 잠금 시각은 입력 가운데 적어도 하나의 시퀀스 번호가 0xffffffff 미만일 때만 적용됩니다. 모든 입력을 0xffffffff로 두면 이 필드는 완전히 무시되며, 지갑이 이 필드의 용도를 찾아내기 전 여러 해 동안 트랜잭션은 이렇게 동작했습니다.

그 용도는 수수료 스나이핑 방지입니다. 수수료가 높을 때 블록 경쟁에서 진 채굴업자는 앞으로 블록을 쌓는 대신 이전 블록을 다시 채굴해 그 수수료를 가로챌 유인이 있습니다. 지갑이 모든 트랜잭션의 잠금 시각을 현재 체인 끝으로 정하면 그 트랜잭션들은 그보다 앞선 어떤 블록에서도 무효가 되어, 획득물과 유인의 상당 부분이 사라집니다. Bitcoin Core는 일반적인 지출에서 이렇게 하며, 약 열 번에 한 번은 이전 100개 블록 가운데에서 높이를 균등하게 골라서 서로 다른 지갑 소프트웨어의 트랜잭션이 서로 눈에 띄지 않게 합니다.

확인할 수 있는 곳

블록 탐색기에서 최근 트랜잭션을 아무거나 열어 보면 잠금 시각 필드에는 보통 그 트랜잭션이 채굴된 높이에 가까운 숫자가 들어 있습니다.

이것이 수수료 스나이핑 방지 동작이며, 이를 보는 것은 그 결제를 만든 소프트웨어의 가벼운 지문입니다. 이 필드를 0으로 남겨 두는 지갑도 무언가를 드러내고 있습니다. 체인 분석 업체가 이 필드를 읽는 이유는 바로 이 필드를 생각하는 사용자가 거의 없기 때문입니다.

의도적인 용도는 더 좁습니다. 미래의 잠금 시각은 지금 서명해 넘겨 줄 수 있지만 나중까지 전파할 수 없는 트랜잭션을 만들며, 이것이 단순한 상속 설계와 환불 경로의 바탕입니다. 라이트닝 네트워크의 강제 종료 트랜잭션과 서브마린 스왑은 타임락을 사용해, 사라진 상대방이 여러분의 자금을 영원히 묶어 둘 수 없게 합니다. 이런 것을 만드는 사람은 뚜렷한 약점을 염두에 두어야 합니다. 잠긴 트랜잭션은 그 뒤에 있는 코인만큼만 가치가 있으며, 보낸 사람이 그 입력을 먼저 다른 방식으로 지출하면 선일자 트랜잭션은 가치가 없어집니다.

잠금 시각 vs OP_CHECKLOCKTIMEVERIFY

잠금 시각은 트랜잭션을 제한하고, OP_CHECKLOCKTIMEVERIFY는 코인을 제한합니다. 서명하는 사람 외의 누군가를 구속하는 것은 둘 중 하나뿐이므로 이 차이는 중요합니다.

잠금 시각은 트랜잭션을 만드는 사람이 고르므로 아무도 보호하지 못합니다. 보낸 사람은 잠금 시각 없이 다른 트랜잭션을 만들면 그만입니다. BIP65에 정의되어 있고 2015년 12월 14일 블록 388,381부터 네트워크에서 활성화된 OP_CHECKLOCKTIMEVERIFY는 그 조건을 출력 자체의 스크립트에 넣습니다. 그 코인을 앞으로 지출하려면 그 지출 자체가 명시된 시점 이상의 잠금 시각을 지녀야 하며, 어떤 서명으로도 이를 우회할 수 없습니다. 이것이 타임락을 의도에서 규칙으로 바꾸며, 금고, 에스크로, 상속 설계가 이 필드가 아니라 이 오피코드로 작성되는 이유입니다.

혼동하기 쉬운 용어

자주 묻는 질문

제 트랜잭션에 왜 현재 블록 높이에 가까운 잠금 시각이 표시됩니까?

그것은 수수료 스나이핑 방지이며 의도된 것입니다. 잠금 시각을 체인 끝으로 정하면 그 트랜잭션은 그보다 앞선 어떤 블록에서도 무효가 되고, 이는 채굴업자가 이전 블록을 다시 채굴해 수수료를 얻으려는 유인을 없앱니다. 확정 속도에는 영향을 주지 않습니다.

잠금 시각을 써서 미래 날짜로 결제를 예약할 수 있습니까?

만들 수는 있지만 신뢰할 수 있는 예약은 아닙니다. 여러분이나 보낸 사람이 같은 입력을 먼저 다른 트랜잭션에서 지출하는 것을 막을 방법이 없고, 그러면 선일자 트랜잭션은 무효가 됩니다. 계약 설계는 대신 출력 스크립트에 OP_CHECKLOCKTIMEVERIFY를 사용합니다.

관련 용어

트랜잭션과 수수료 분야의 다른 용어

이 페이지를 영어로 읽기