[Blockchain] 스마트 컨트랙트 - 비트코인

yooni·2022년 3월 10일
0

Blockchain

목록 보기
24/36
post-thumbnail
post-custom-banner

❓ 스마트 컨트랙트의 시작

2015년 이더리움이 개발되면서부터 스마트 컨트랙트가 구현되었다고 알려져 있다. 하지만 엄밀하게 (제한적인 형태의) 스마트 컨트랙트가 이미 비트코인에서 낮은 수준으로 구현되어 있다고 볼 수 있다.

비트코인 거래 장부를 하나의 상태 변환 시스템(state transition system)으로 보면, 비트코인 시스템은 모든 비트코인의 소유권 현황으로 이루어진 하나의 상태(state)와 이 현재 상태 및 트랜잭션을 받아 그 결과로 새로운 상태를 출력해주는 상태 변환 함수(state transision function)로 구성되어있다고 볼 수 있다.



1. UTXO

UTXO (Unspent Transaction Outputs)
미사용 트랜잭션 출력값, 미지출 거래 출력

쉽게 말해 쓰여지지 않은 비트코인 뭉치이다. 비트코인의 경우 누군가로부터 받은 금액을 UTXO로 저장한다. 트랜잭션이란 비트코인의 소유권을 이전하는 것이며 이 과정은 송신자의 비트코인 뭉치를 조합하여 이 새로운 비트코인 뭉치를 수신자의 것으로 전환시키는 것이다.

더욱 상세하게 말하자면 A가 B에게 비트코인을 전송하고자 할 때,

A의 공개키로 암호화 되어있는 UTXO를 A의 개인키로 소유권을 풀고 B의 공개키를 이용하여 다시 암호화하여 소유권을 넘겨주는 것이다. 넘겨진 UTXO는 B의 개인키로만 사용이 가능하다.

이러한 소유권 이정 과정은 트랜잭션의 입력값(Input)출력값(Output) 그리고 스크립트를 통해 이루어진다.



2. 비트코인 트랜잭션 구조

2-1. 트랜잭션 구조

  • 버전 (Version)
    어떤 버전의 비트코인 소프트웨어를 사용하였는지, 트랜잭션 유형을 표기한 것이다. 모든 거래가 같은 버전에서 체결되지 않으므로 버전에 다양한 값이 들어갈 수 있다. 버전별로 구조와 규칙이 조금씩 다르다.

  • 입력 카운터, 출력 카운터
    입력값(Inputs)과 출력값(Outputs)의 갯수를 표시한다.

  • 입력 (Inputs), 출력 (Outputs)
    입력은 연결된 과거의 출력을 가리키는 포인터와 해제 키를 가지고 있으며 출력은 잠금과 값을 가지고 있다.

  • 잠금 시간 (Lock Time)
    블록체인에 거래가 담기기 전 일정 시간 잠궈두는 것으로, 트랜잭션을 언제 블록체인에 포함시킬지를 지정한다.


2-2. 입력값과 출력값 상세

모든 트랜잭션은 UTXO를 소비하는 입력값과, UTXO를 생성하는 출력값으로 구성되어 있다.

입력값과 출력값은 비트코인 UTXO의 소유권을 이전하기 위한 준비물과 결과물이다. 각 거래는 하나 이상의 입력값과 출력값으로 구성된다. 출력값의 총합은 입력값의 총합보다 약간 작아야 하며, 이 갭은 거래 수수료가 되어 채굴자에게 보상으로 지급된다.

트랜잭션을 통해 입력값에서 출력값으로 가치가 이동한다. 입력값은 이전 거래의 출력값이다. 즉 트랜잭션은 이전 출력을 해제하고 새로운 출력을 만드는 과정이다. 이렇게 입력에 의해 생성된 후 다른 입력에 의해 해제되지 않은 트랜잭션 출력이 UTXO이다.


출력값 (Output)

  • Amount
    잠겨있는 비트코인의 양이며 기본 단위는 '사토시'이다.
  • Locking-Script(ScriptPubKey)
    출력값을 소비하는데 필요한 조건을 결정하는 암호화 퍼즐이다. 이 키의 소유자만이 다음 거래의 입력값이 될 ScriptSig를 만들 수 있다.

입력값 (Input)

  • Transaction Hash
    사용할 UTXO의 출처인 이전 거래의 해시값이다. 결과물로 UTXO가 하나만 생성되지 않을 수 있기에 거래의 고유값인 거래 해시를 표기하여 어떤 거래의 출력 UTXO인지 지칭한다.
  • Output Index
    해당 거래의 출력값 UTXO가 둘 이상일 경우 어떤 UTXO인지 가리키는 역할을 한다.
  • Unlocking-Script(ScriptSig)
    UTXO를 사용하기 위한 조건을 충족하는 유일한 스크립트이다. 즉, 다른 사람으로부터 받은 UTXO를 잠금 해제하는 스크립트이다.

입력값에는 비트코인의 양과 해제해고자 하는 이전 출력을 가리키는 포인터, 그리고 잠겨 있는 이전 출력을 해제하기 위한 ScriptSig 키가 들어있다.



3. 비트코인 스크립트

스택 기반 튜링 불완전 언어
비트코인 스크립트는 입력값의 해제 스크립트와 출력값의 잠금 스크립트로 작동된다.

UTXO를 소비하려고 할 때 먼저 소유권을 해제해야 하는데 이를 위해 입력값에 Unlocking-Script(해제 스크립트)가 들어간다. 반대로 UTXO를 받는 상대방의 소유로 잠그기 위해 출력값에는 LockingScript(잠금 스크립트)가 들어간다. 해제 스크립트 데이터 값이 복사되어 잠금 스크립트와 함께 연산되어 실행됐을 때 그 결과가 TRUE가 나오면 그 입력값은 유효한 것이며 UTXO를 소비할 수 있게 된다.


3-1. 스크립트 언어 작동 방식

스크립트는 스택(stack) 데이터 구조를 사용하는 잠금-해제 매커니즘으로 동작한다. 트랜잭션의 유효성을 검사할 때 각 입력의 해제 스크립트는 해당 잠금 스크립트와 함께 실행되어 지출 조건을 충족시키는지 확인한다.

노드가 네트워크로부터 새로운 트랜잭션을 받으면, ScriptSig와 ScriptPubKey 필드를 추출, 연결하여 ScriptSig -> ScriptPubKey 순서로 스크립트를 나열한다. 노드는 이 스크립트와 빈 스택 하나를 이용해 스크립트를 실행한다.

스크립트 프로그램은 Opcode와 데이터, 두 종류의 객체를 가지고 있으며 스크립트는 Opcode와 데이터를 일렬로 늘어놓은 것이다. 포인터가 이 객체들을 순서대로 하나씩 가리키며 스크립트를 실행한다. 스크립트 실행 후 스택의 최상위 상단이 1인 경우(TRUE) 유효한 트랜잭션으로 간주하고 주변 노드들에게 전파한다.

Opcode
명령 또는 함수라고 하는 연산 작업 등의 모든 스크립트 단어의 목록이다. 비트코인 스크립트는 Opcode 명령으로 구성된 가능한 작은 범위의 작업만 허용하는 기본 언어이다.

UTXO의 ScriptPubKey는 수학적 퍼즐의 형태로, 올바른 ScriptSig를 추가하여 이 퍼즐을 풀 수 있다. UTXO는 유효한 해제 조건이 주어져야만 송금이 가능해지는 일종의 계약이다. 따라서 비트코인 스크립트를 스마트 컨트랙트로 볼 수 있는 것이다.


3-2. 비트코인 스크립트 종류

Pay To PubKey (P2PK)

간단하고 직관적인 방법이다. 이 방법으로 전송받고자 한다면, 전송자에게 공개키를 제공해야 한다. 이 방법은 초창기 비트코인에서 많이 사용되었고, 공개키 노출로 인한 보안 문제로 현재는 P2PKH로 거의 대체되었다. 2009년 사토시 나카모토와 할 핀니 사이에서 이뤄진 최초의 트랜잭션이 P2PK 방식으로 진행되었다.


Pay To PubKey Hash (P2PKH)

현재 가장 일반적으로 쓰이는 방법이다. 매커니즘 자체는 P2PK와 거의 동일하지만, P2PKH에서는 ScriptPubKey가 공개키 자체가 아닌 공개키의 해시값(주소)을 가지고 있다는 점이다. 따라서 UTXO 수신자는 공개키를 공개할 필요가 없는 우회적인 방식으로 보안성을 높일 수 있다.

P2PK에서는 비트코인을 받는 시점에 공개키가 드러나게 된다. 반면 P2PKH의 ScriptPubKey에는 공개키의 해시값만 있고, ScriptSig를 제시할 때 수신자가 공개키를 직접 제공해야 한다.



4. 비트코인 스마트 컨트랙트 한계

비트코인은 보안성이 뛰어나다. 블록체인 중 50% 공격에 대한 보안성이 가장 높다. 높은 보안성과 안정적인 네트워크가 비트코인의 가장 큰 장점이라고 할 수 있다. 하지만 근본적으로 범용성이 낮다는 단점이 있다.
비트코인 스크립트는 튜링 불완전 언어이며 확장성과 성능 문제로 스마트 컨트랙트를 수행하기에는 한계가 있다. 확장성 및 성능 문제를 해결하기 위해 다중 서명 및 시간 잠금 계약이 적용된 라이트닝 네트워크를 이용할 수 있다.


루트스탁 (Rootstock)

비트코인의 단점인 비싼 수수료를 보완하고, 스마트 컨트랙트 기능을 추가하기 위해 만들어진 사이드체인 암호화폐이다. 화폐 단위는 RSK이다. 비트코인은 튜링 불완전한 언어인 스크립트를 사용해 스마트 컨트랙트 기능이 부족했지만 루트스탁은 2way peg를 통해 이를 극복했고, 머지 마이닝(merge-mining)을 이용해 채굴자에게 보상하고 있다.

  • 2way peg
    비트코인을 스마트 비트코인으로 혹은 그 반대로 전송하는 방식이다. 이를 통해 비트코인에 튜링 완전한 스마트 컨트랙트를 지원하는 루트스탁 블록체인을 쌍방향으로 연결한다. 실제로 서로간 암호화폐가 전송되지는 않고, 사용자가 BTC를 SBTC로 변환하고자 한다면 일부 BTC가 비트코인에 잠기고 동일한 양의 SBT가 RSK에서 잠금 해제되는 방식이다.

  • 머지 마이닝 (Merge-mining)
    비트코인의 보안성을 이용하기 위해 비트코인 채굴자들이 비트코인을 채굴함과 동시에 루트스탁도 함께 채굴하도록 만들어야 했다. 이를 머지 마이닝(병합 채굴)이라고 하는데 동일한 알고리즘을 기반으로 서로 다른 암호화폐를 동시에 채굴할 수 있게 하는 프로세스이다. 루트스탁은 비트코인의 사이드체인이다. 비트코인 가격에 고정된 코인 RBTC를 유통한다. 루트스탁에 해시파워를 제공하는 채굴자들에게 보상을 RBTC가 제공된다.
    루트스탁은 머지 마이닝으로 보안성을 확보하고 스마트 컨트랙트 기능을 제공할 수 있게 되었다. 비트코인 네트워크에 새로운 dApp을 개발할 수 있고 이더리움 기반 dApp과의 호환도 가능하다.



📌 Reference
https://brunch.co.kr/@skkrypto/13
https://steemit.com/kr/@feyee95/7-1
https://steemit.com/kr/@easyblockchain/5y38ab
https://academy.binance.com/ko/articles/an-introduction-to-bitcoin-script
https://learnmeabitcoin.com/technical/p2pkh

profile
멋쟁이 코린이
post-custom-banner

0개의 댓글