타임락
타임락(TimeLock)이란 용어는 금고의 열쇠가 맞더라도 일정 시간이 지나야 열 수 있도록 고안된 은행 금고의 타임락(time lock)에서 사용되었던 것으로 비트코인과 같은 암호화폐 거래에서 특정 시간이 되거나 블록높이(block height)가 될 때까지 거래를 제한하는 원시적인 형태의 스마트 계약의 한 종류이다.
개요[편집]
타임락은 결제 채널과 해시타임락을 포함한 많은 비트코인 스마트 계약에서 사용된다. 또한 몇 달 또는 몇 년의 기간 동안 투자로 보유되는 비트코인을 잠그는데도 사용될 수 있다. 또한 수수료를 적게하며 신뢰할 수 없는 사전 합의된 수수료 가격 인상을 위해 사용된다.[1]
구성[편집]
- nLockTime
- 원래 비트코인 구현의 일부인 nLockTime은 유효한 블록에 트랜잭션을 추가할 수 있는 가장 이른 시간을 지정하는 필드이다. 또한 비트코인 소프트 포크(Soft fork)로 nLockTime은 유효한 블록에 트랜잭션을 추가할 수 있는 최저 블록 높이를 대신 지정할 수 있다. 모든 트랜잭션에는 nLockTime 필드가 포함되지만 최근까지도 모든 지갑은 nLockTime을 0으로 설정하여 모든 블록에서 거래가 유효했음을 알리며 비트코인 0.11.0부터 시작해 최근 블록 높이로 설정된 nLockTime을 포함해 자동으로 생성되는 모든 정상 거래는 가설이 된 수수료의 수익성을 떨어뜨리는 방법으로, 다른 지갑들도 같은 방법으로 하는 것이 좋다. 모든 비트코인 거래의 약 20%는 2011년 초 ~ 현재 nLockTime 값을 0과 다르게 설정했다.
- 소프트 포크(soft fork) = 블록체인을 업그레이드 하는 종류 중 하나로 업그레이드 이전의 블록체인과 호환이 가능한 업그레이드[2]
- 원래 비트코인 구현의 일부인 nLockTime은 유효한 블록에 트랜잭션을 추가할 수 있는 가장 이른 시간을 지정하는 필드이다. 또한 비트코인 소프트 포크(Soft fork)로 nLockTime은 유효한 블록에 트랜잭션을 추가할 수 있는 최저 블록 높이를 대신 지정할 수 있다. 모든 트랜잭션에는 nLockTime 필드가 포함되지만 최근까지도 모든 지갑은 nLockTime을 0으로 설정하여 모든 블록에서 거래가 유효했음을 알리며 비트코인 0.11.0부터 시작해 최근 블록 높이로 설정된 nLockTime을 포함해 자동으로 생성되는 모든 정상 거래는 가설이 된 수수료의 수익성을 떨어뜨리는 방법으로, 다른 지갑들도 같은 방법으로 하는 것이 좋다. 모든 비트코인 거래의 약 20%는 2011년 초 ~ 현재 nLockTime 값을 0과 다르게 설정했다.
- CheckLockTimeVerify
- 2015년 말, BIP67 소프트 포크(soft fork)는 NOP2 옵코드(OPcode)를 CheckLockTimeVerify(CLTV) 옵코드로 재정의하여(전체 트랜잭션이 아닌) 트랜적션 출력을 타임락으로 인코딩할 수 있도록 하였다. CLTV 옵코드가 호출되면 트랜잭션의 nLockTime이 CLTV 옵코드에 제공된 시간 매개 변수와 같거나 그 이상이 아니면 스크립트가 실패하게 된다. 거래는 nLockTime이 과거인 경우에만 유효한 블록에 포함되기 전에 CLTV 기반 타임락이 만료되었음을 보장한다. 또한 현재 CLTV는 스타일의 결제 채널에서 사용되고 있다.
- OP_CheckLockTimeVerify는 몇 세기 동안 동전을 잠금하는데 사용될 수 있다.[1]
- 2015년 말, BIP67 소프트 포크(soft fork)는 NOP2 옵코드(OPcode)를 CheckLockTimeVerify(CLTV) 옵코드로 재정의하여(전체 트랜잭션이 아닌) 트랜적션 출력을 타임락으로 인코딩할 수 있도록 하였다. CLTV 옵코드가 호출되면 트랜잭션의 nLockTime이 CLTV 옵코드에 제공된 시간 매개 변수와 같거나 그 이상이 아니면 스크립트가 실패하게 된다. 거래는 nLockTime이 과거인 경우에만 유효한 블록에 포함되기 전에 CLTV 기반 타임락이 만료되었음을 보장한다. 또한 현재 CLTV는 스타일의 결제 채널에서 사용되고 있다.
- 상대잠금시간(Relative locktime)
- 2010년 중반, BIP67/112/113 소프트 포크(soft fork)는 모든 트랜잭션 입력의 일부인 nSequence 필드의 일부 값에 합의한 의미를 부여하여 "상대적 잠금 시간(Relative locktime)"을 생성했다. 이를 통해 입력은 입력에 의해 소비되는 출력이 블록 체인의 블록에 포함되는 기간을 기준으로 블록에 추가할 수 있는 가장 이른 시간을 지정할 수 있었다.[1]
- CheckSequenceVerify
- BIP68/112/113 소프트 포크(soft fork)의 일부에는 CLTV가 제공하는 절대잠금시간(absolute locktime)과 동일한 기능을 하는 CheckSequenceVerify(CSV) 옵코드가 포함되어 있다. CSV 옵코드를 호출할 때 트랜잭션의 nSequence가 CSV 옵코드에 제공된 매개 변수보다 더 많은 상대잠금시간(Relative locktime)이 경과되었음을 나타내지 않으면 스크립트가 실패하게 된다. 입력은 상대잠금시간이 만료된 경우에만 유효한 블록에 포함될 수 있으므로, 이는 거래가 유효한 블록에 포함되기 전에 CSV 기반 타임락이 만료되었음을 보장한다.[1]
- OP_CheckSequenceVerify는 최대 65535 블록(약 455일) 또는 최대 65535*512초(약 388일)동안 잠금을 허용한다.
- BIP68/112/113 소프트 포크(soft fork)의 일부에는 CLTV가 제공하는 절대잠금시간(absolute locktime)과 동일한 기능을 하는 CheckSequenceVerify(CSV) 옵코드가 포함되어 있다. CSV 옵코드를 호출할 때 트랜잭션의 nSequence가 CSV 옵코드에 제공된 매개 변수보다 더 많은 상대잠금시간(Relative locktime)이 경과되었음을 나타내지 않으면 스크립트가 실패하게 된다. 입력은 상대잠금시간이 만료된 경우에만 유효한 블록에 포함될 수 있으므로, 이는 거래가 유효한 블록에 포함되기 전에 CSV 기반 타임락이 만료되었음을 보장한다.[1]
주의점[편집]
예로 비트코인은 비트코인 네트워크가 바뀔 위험이 있기 때문에 먼 미래를 바라보고 설정하는 것은 권장하지 않는다. 예를 들어, 타원곡선 디지털서명 알고리즘(ECDSA) 또는 RIPEMD-160 알고리즘이 사용이 불가능하여, CPU 시간이 몇 달이 걸려 복구하여 코인을 다시 사용할 수 있게 된 경우 네트워크는 일부 전환 후 사용하지 않는 오래된 코인이 이동하는 것을 금지할 필요가 있을 수 있지만, 긴 시간 잠금이 되어버린 코인은 전환을 할 수 없기 때문에 시간 설정에 유의해야 한다.[1]
각주[편집]
참고자료[편집]
- "Timelock", Bitcoing Wikit
- 홍티(hhk072811), 〈소프트포크와 하드포크〉, 《네이버 블로그》, 2018-11-21
같이 보기[편집]