스마트 컨트랙트의 역사스마트 컨트랙트의 개념은 1994년 닉 재보(Nick Szabo)에 의해 만들어졌다. Show
비트코인 등장스마트 컨트랙트를 실제로 지원하기 시작한 첫 화폐는 2009년 출시된 비트코인이다. 비트코인이 스마트 컨트랙트를 지원할 수 있는 핵심적인 이유는 비트코인의 핵심 기술인 블록체인이 비트코인의 경우 오피코드(opcode)를 사용해 화폐 거래를 위한 제한적인 스크립트만을 작성할 수 이더리움 등장2015년에는 프로그래밍 가능한 스마트 컨트랙트를 위한 블록체인인 이더리움이 등장하였다. 이더리움에서는 솔리디티(Solidity)라는 언어를 통해 스마트 컨트랙트를 위한 코드를 작성하고, 스마트 컨트랙트의 장점
트랜잭션 구조
입력에 의해 생성된 후, 다른 입력에 의해 해제되지 않은 트랜잭션 출력을 UTXO라고 한다. 비트코인 스크립트비트코인에서는
스크립트(Script)라는 스크립터 언어를 사용해 스마트 컨트랙트를 구현한다. 이 스크립트 실행을 통해 비트코인의 송금이 이루어지고, 이러한 특징으로 인해 비트코인은 프로그래밍 스크립트 동작원리스크립트는 역폴란드 표기법(reverse polish notation)으로 작성된 스택 기반 튜링 불완전 언어이다.
노드가 네트워크로부터 새로운 트랜잭션을 받으면, ScriptSig와 ScriptPubkey 필드를 추출하여 연결하여 최종적으로
비트코인 스마트 컨트랙트의 한계비트코인은 확장성이나 성능 등의 한계가 존재했다. 라이트닝 네트워크(Lightning network)라이트닝 네트워크에서는 트랜잭션 내용은 블록체인 외부에 저장하고, 트랜잭션의 최종 결과만 블록체인에 올린다. 트랜잭션이 블록체인 바깥에서 이루어지기 대문에 트랜잭션이 처리되기까지 대기 시간이 필요하지 않아 즉시 처리된다. 루트스탁(Rootstock, RSK)루트스탁은 비트코인에 스마트 컨트랙트 기능을 탑재하는 사이드체인 프로젝트이다. 탭루트(TapRoot)탭루트는 2021년 11월 중으로 이루어질 비트코인 업그레이드를 의미한다. MAST와 슈노르 서명을 통해 스크립트 실행에 대한 효율성이 극도로 커지기 때문에, 이더리움 스마트 컨트랙트EVMEVM(Ethereum Virtual Machine)은 작성한 코드와 이더리움 블록체인 사이에 있는 가상 머신으로, 블록체인에서 코드가 실행될 수 있도록 한다. 이더리움 스마트 컨트랙트에 기반한 dApp은 솔리디티라는 언어로 작성된다. 우리는 솔리디티로 작성된 dApp을 이더리움 네트워크에 올려야 한다. 그런데, 솔리디티 언어는 고급 언어이기 때문에 EVM이 이해하기 어렵다. 솔리디티(Solidity)솔리디티는 스마트 컨트랙트를 실행하는 객체 지향(object-oriented), 정적 타입(static typed), 솔리디티는 컨트랙트 기반의 고급 프로그래밍 언어이다. C++과 파이썬, 자바스크립트를 기반으로 만들어졌으며, 이더리움 네트워크에서 스마트 컨트랙트를 생성할 수 있도록 설계되었다. 솔리디티는 정적 타입 스크립트 언어로, 런타임 언어와는 달리, 컴파일 시 제약 조건을 확인하고 적용한다. 역사솔리디티는 2014년 8월 컴퓨터 과학자 가빈 우드(Gavin Wood)가 처음 제안하였다. 우드는 이더리움에서 2년간 CTO로 재직했으며, 크리스찬 라이트와즈너(Christian Reitwiessner)가 솔리디티로 할 수 있는 일솔리디티는 이더리움 네트워크의 기반이다. 솔리디티가 없으면 이더리움도 존재할 수 없다. 이더리움 네트워크에서 언제든지 원하는 분산형 앱(dApp)을 사용할 수 있다. dApp을 올리기 위해서는 솔리디티로 프로그래밍을 해야 한다. 다만 앱스토어처럼 중앙기관에 심의를 받을 필요 없이 누구나 약간의 비용만 내면 이더리움 네트워크에 자신이 만든 dApp을 올릴 수 있다. 스마트 컨트랙트와 튜링 완전, 불완전성사토시 나카모토는 무한 반복 공격과 같은 보안상의 이슈를 고려해 의도적으로 반복문 opcode를 제외했다. 따라서 비트코인 스크립트를 두고 튜링 불완전하다고 말한다. 이더리움의 핵심은 이러한 비트코인의 튜링불완전성이라는 한계를 넘어, 개발자가 원하는 스마트 컨트랙트를 유연하게 구현할 수 있도록 튜링 완전을 제공하는 것이다. EVM은 반복문 opcode들을 지원하는 대표적인 튜링 완전 머신이며, 솔리디티는 튜링 완전 머신을 동작하게 하는 튜링 완전 언어이다. 솔리디티 개발 도구
스마트 컨트랙트 동작원리이더리움은 상태 머신이더리움은 거래에 기반을 둔 상태 머신(transaction-based state machine)이다. 이더리움이라는 상태 머신은 Genesis state에서 시작한다. 그리고 트랜잭션이 실행되면, 다음 상태로 블록은 직전에 만들어진 블록과 이어져 있다. EOA와 CA이더리움에는 EOA(External Owned Account)와 CA(Contract Account)라는 두 종류의 계정이 있다. EOA와 CA 모두 잔액(balance), 논스(nonce), 스토리지(stroage), 컨트랙트 코드(contract code)로 구성되어 있다. 전역 상태이더리움의 전역 상태는 계정 주소와 계정 상태를 매핑한 것으로 구성되어 있다. 이 매핑은 머클 패트리샤 트리(Merkle Patricia Tree) 형태로 저장되어 있다. 머클 트리(Merkle trie, Merkle tree)는 이진 트리의 한 종류로, 다음의 특징을 가지고 있다.
머클 패트리샤 트리에서 변조가 시도되면 그 즉시 발견되기 때문에, 루트 노드는 데이터에 대한 ID처럼 사용될 수 있다. 또한 블록 헤더는 상태, 트랜잭션, 영수증 트리의 루트 노드 값을 가지고 있기 때문에, 네트워크의 노드들은 모든 상태를 저장하고 있지 않더라도 이더리움의 상태 일부분을 검증할 수 있다. 트랜잭션과 메시지트랜잭션은 "메시지 호출(message call)"과 "컨트랙트 생성(contract creations)" 두 종류로 나뉜다. 이더리움의 모든 트랜잭션은 항상 EOA에서 만들어지고 블록체인에 올라간다. CA 생성
트랜잭션 실행 모델과 EVMEVM 구성 요소
EVM은 트랜잭션을 반복적으로 실행하며, 각 사이클에서 시스템 상태(이더리움의 전역 상태)와 머신 상태(machine state)를 계산합니다. 머신 상태의 구성
스마트 컨트랙트의 실행 비용이더리움에서
트랜잭션의 결과로 발생하는 모든 연산은 수수료를 요구한다. 가스는 트랜잭션 코드에 있는 모든 opcode를 실행하는데 필요한 수수료를 측정하는 데 사용하는 단위이다. Gas price은 가스 당 지불하려고 하는 이더의 양을 의미하며, Gwei라는 단위를 사용한다. 1 이더 = 10^18 wei 이며, 1 Gwei= 10^9 wei 트랜잭션 송신자는 gas limit과 gas price를 트랜잭션에 지정한다. 이 gas price와 gas limit은 송신자가 트랜잭션을 실행하는데 지불하고자 하는 Wei의 최대 양을 의미한다. 가스는 채굴자의 주소로 송금된다. 채굴자는 연산을 수행하고 트랜잭션을 검증하는 데에 자원을 소모하기 때문에 이에 대한 보상으로 가스 수수료를 받는다. 수수료 지불 이유이더리움은 튜링 완전
언어이기 때문에, 튜링 불완전한 비트코인 스크립트와는 달리 반복문을 지원한다. 만약 악의적인 사용자가 큰 자원을 소모하는 무한 루프 코드가 들어있는 트랜잭션을 실행시킨다면, 트랜잭션은 이더리움 네트워크의 엄청난 양의 자원을 소모하게 될 거고, 이더리움 네트워크의 전체가 멈출 수도 있다. 수술는 이러한 악의적인 공격으로부터 네트워크를 보호한다. 수수료를 부과하면 악의적인 사용자가 무한 루프를 쉽게 실행시킬 수 없으며, 실행 시키더라도 gas limit 설정으로 가스 소모 전에 실행을 멈출 수 있다. 프라이빗 블록체인에서의 스마트 컨트랙트프라이빗 블록체인의 특징
퍼블릿 브록체인과 프라이빗 블록체인의 차이대표적인 프라이빗 블록체인
하이퍼레저 패브릭과 체인코드하이퍼레저 패브릭은 분상 원장 솔루션을 제공하는 대표적인 프라이빗 블록체인 플랫폼이며 기밀성, 탄력성, 유연성 및 확장성을 제공한다. 하이퍼레이저 블록체인적 특징
하이퍼레이저 패브릭의 주요 개념
스마트 컨트랙트와 체인 코드일반적으로 스마트 컨트랙트와 체인코드라는 용어는 혼용되지만, 스마트 컨트랙트는 전역 상태에 포함된 비즈니스 객체의 상태를 변경시키는 트랜잭션 로직을 정의한다. 체인코드는 블록체인 네트워크에 배포하기 위해 패키징된 스마트 컨트랙트의 집합이다. 즉, 스마트 컨트랙트는 트랜잭션을 관리하며, 체인 코드는 스마트 컨트랙트를 배포하기 위해 패키징하여 관리합니다. 이더리움과 하이퍼레저 패브릭의 차이점
스마트 컨트랙트를 활용한 새로운 서비스들
스마트 컨트랙트 활용 사례
오라클 문제오라클이란?Web API나 마켓 데이터 피드와 같은 방식을 통해 블록체인과 스마트 컨트랙트용 외부 데이터를 검색하고 검증하는 것을 의미한다. 외부에서 오는 데이터는
블록체인이나 스마트 컨트랙트처럼 결정적(deterministic)이지 않다. 오라클 문제란?오라클 문제는 서드 파티 오라클과 스마트 컨트랙트의 무신뢰성 실행 간 보안, 인증, 신뢰 충돌 문제에 스마트 컨트랙트는 주어진 데이터에 따라 계약 이행 여부를 결정할 뿐이지, 데이터에 대한 자체적인 판단 능력은 가지고 있지 않다. |