이미지 출처 : https://blockgeni.com/how-to-write-your-first-smart-contract/
이 포스트는 스마트 콘트랙트란 무엇인가요? ,
Why are "Smart Contracts" such a big deal? ,
스마트컨트랙트(Smart Contract), 글 한 편으로 제대로 이해하기 ,
스마트 컨트랙트란 무엇인가?를 요약해서 작성했습니다.
제3의 인증기관 없이 개인 간 계약이 이루어질 수 있게 하는 기술.
계약상의 급부와 반대급부를 프로토콜화해서 소프트웨어 및 하드웨어에 미리 저장하고,
조건 충족 여부
판단을 인간이 아닌 컴퓨터가 대신 실행함으로써
제 3의 인증기관이 필요없도록 하는 것.
신뢰가 필요 없는 프로토콜을 생성할 수 있다는 것이 핵심
스마트 컨트랙트를 활용하면 두 당사자가 서로를 모르더라도 계약을 체결할 수 있다.
특정 조건이 충족되지 않으면, 해당 계약은 실행되지 않기 때문에
중개인 없이도 계약을 이행할 수 있다는 것이 스마트 컨트랙트의 가장 큰 특징.
스마트 컨트랙트는 현재 이더리움 뿐 아니라, 많은 블록체인 플랫폼 위에서 구현되어 있다.
블록체인은 많은 감시자(witness) 를 가지고 있고, 입력을 기반한 결과를 도출하는 플랫폼 이기 때문에 스마트 컨트랙트 개념을 도입하기에 최적.
스마트 컨트랙을 지원하는 블록체인은 매우 많다.
가장 유명한 이더리움, Kusama, Polkadot, Cardano, Cosmos 등등...
이미지 출처 - Why are "Smart Contracts" such a big deal? 영상 캡처
쉽게 말해 스마트 컨트랙은 내가 정한 규칙을 모두가 공유, 검증, 실행하지만 수정은 할 수 없는 백엔드(블록체인) 에 올리는 것이라고 할 수 있다.
그 덕에 중개인(에어비앤비 등)이 필요없어진다.
규칙을 빠짐없이 실행할 스마트 컨트랙을 만들고, 정부나 단체에 조종당할 염려 없이 네트워크에 의해 빈틈없이 실행된다.
스마트 컨트랙트
개념은 블록체인이 1세대에서 2세대로 넘어갈 수 있게 된 가장 중요한 계기 중 하나이다.
비트코인으로는 단순 코인을 주고받는 것 이상으로 사람과 소통할 수 없었지만,
스마트 컨트랙을 통하면 다른사람과 교류할 수 있고 코드로 소통할 수 있다.
세대별 암호화폐 특징은 블록체인(Block Chain) - 암호화폐의 문제점과 단점 참조
블록체인 1세대인 비트코인
네트워크.
블록체인상에 단순히 비트코인의 입출금내역(UTXO : Unspent Transaction Outputs)
만을 기록할 수 있었으므로, 디지털자산 거래
이상의 동작을 블록체인 상에서 구현하는 것은 불가능했다.
입출금내역(UTXO) 관련 내용은 블록체인(Block Chain) - 트랜잭션(Transaction) 참고
대표적인 블록체인 2세대 이더리움
네트워크.
스마트 컨트랙트
개념을 반영해서
NFT, token, ICO(Initial Coin Offering), DEX(Decentralized exchanges)와 같은 것들이 가능하다.
간단한 예시
1. 방 주인과 나는, 에어비앤비 대신 스마트 컨트랙을 통해 계약을 이행한다.
우리의 코드를탈중앙화된 네트워크
에 올릴 수 있고, 아무도 수정을 할 수 없다.
2. 내 앱을 아마존 서버에 올렸는데, 아마존 서버가 터지면 내 앱도 사라진다.
하지만 이Smart contract platform 공유 네트워크
에 올리면, 이곳에 영원히 남는다.
3. 테슬라를 렌트할 수 있다.
자율주행이 가능한 테슬라를 스마트 컨트랙과 연결하고 사용자가 스마트 컨트랙으로 렌트비를 지불하면? 해당 사용자가 있는 곳으로 이동한다.
4. 와이파이를 대여할 수 있다.
외부에 있을 때 이웃이 잠깐 와이파이가 필요하다면? 스마트 컨트랙으로 사용비를 지불하면 해당 시간동안 사용하게 할 수 있다.
공개된 블록체인 네트워크상에서 모든 계약에 대한 합의를 소스 코드를 통해 수행하고,
특정 조건이 충족되었을 때 해당 계약이 이행되게 하는 스크립트.
따라서 위/변조가 불가능
하고, 상대방에 대한 신뢰와 상관 없이 투명한 거래가 가능
하다.
스마트 컨트랙트 개념을 최초로 제시한 닉 자보는
스마트 컨트랙틀를 계약 코드를 통해 스스로 실행되는 전산화 계약이라고 정의했다.
관측 가능성(Observability)
검증 가능성(Verifiablity)
프라이버시(Privacy)
강제 가능성(Enforceablilty)
요약
: 서면으로 이루어지던 계약을 코드로 구현 하고,특정 조건이 충족
되었을 때 해당 계약이 이행되게 하는 script
스마트 컨트랙트는 결정론적
프로그램으로 작동한다.
특정 조건이 충족될 때 특정한 일을 수행한다
( if -then - 방식으로 작동 )
법적 계약도, 스마트한 계약도 아닌 단지 분산화된 시스템(블록체인)에서 작동하는 코드의 일부이다.
블록체인 기반 스마트 컨트랙트는 기본적으로
모든 트랜잭션 로그
가 저장된 블록체인 데이터베이스와
스마트 컨트랙트의 상태
를 저장하는 데이터베이스, 두 가지가 존재한다.
여기서의 스마트 컨트랙트는 상태를 변경할 수 있는 애플리케이션이라고 할 수 있고,
스마트 컨트랙트의 상태는 해당 애플리케이션에서 사용하는 변수라고 할 수 있으며,
이를 변경하기 위한 입력값은 트랜잭션에 포함되어 있다.
스마트 컨트랙트는 트랜잭션(transaction)
과 쿼리(query)
총 두 가지 인터페이스를 공개하고 있다.
트랜잭션
을 통한 인터페이스는 트랜잭션 데이터베이스
에 저장되고,
스마트 컨트랙트의 상태를 변경시키는 접근방법이다.
트랜잭션은 쓰기
, 삭제
, 수정
을 실행한다.
(Http method의 post, delete, put과 비슷하다고 생각할 수 있겠다)
web3.js
에서 제공하는 컨트랙트 함수를 호출하는 method 중send()
가 여기에 해당한다.
세상을 바꿀 Web 3.0 - Web3.js 예제로 실습하기(1) 참조
쿼리
는 트랜잭션 데이터베이스에 기록이 남지 않으면서 스마트 컨트랙트의 상태를 읽는
작업이다.
쿼리는 읽기
를 통한 조회만을 실행한다.
(Http method의 get과 비슷하다고 생각할 수 있겠다)
web3.js
에서 제공하는 컨트랙트 함수를 호출하는 method 중call()
가 여기에 해당한다.
세상을 바꿀 Web 3.0 - Web3.js 예제로 실습하기(1) 참조
예를 들어, 상품 거래
는 스마트 컨트랙트 시스템에서 이렇게 작동한다.
기록 저장
판매자가 "상품을 올리겠다"는 내용을 코딩하여 트랜잭션을 만든 후 블록체인에 전송한다.
상품 등록 트랜잭션이 발생하면, 네트워크의 모든 노드는 상품 등록 트랜잭션을 공유하고 블록을 생성한 후 블록을 브로드캐스팅(전파) 한다.
트랜잭션을 발생시키는 것이기 때문에 트랜잭션(Transaction) 인터페이스에 해당하고, web3.js method 사용 시에는
send()
를 사용할 것이다.
상품 조회
구매자가 블록체인 네트워크에서 상품을 조회한다.
블록체인의 어떤 데이터도 변경하지 않고 스마트 컨트랙트 데이터베이스 내 저장된 상태 값만 조회
하면 되기 때문에, 이 쿼리 정보는 블록체인이 동기화할 필요가 없다.
단순히 조회
하는 것은 트랜잭션을 발생시키지 않는다.
트랜잭션을 발생시키지 않기 때문에 쿼리(Query) 인터페이스에 해당하고, web3.js method 사용 시에는
call()
를 사용할 것이다.
계약 이행
구매자가 "상품 구매" 트랜잭션을 보내면 트랜잭션을 공유하고 블록체인 네트워크에 동기화된다. 모든 노드의 스마트 컨트랙트 데이터베이스에 상품 구매자를 등록하고 돈을 판매자에게 전송한다. 그럼 등록된 콘텐츠의 소유권이 구매자에게 이동한다.
트랜잭션을 발생시키는 것이기 때문에 트랜잭션(Transaction) 인터페이스에 해당하고, web3.js method 사용 시에는
send()
를 사용할 것이다.
브로드캐스팅
이란?
: 승인된 블록을 전파하는 것을 뜻함.
P2P 네트워크로 거래 기록을 받은 모든 참가자들은 거래 기록을 승인하는 작업을 수행한다. 승인한 사람은 기존 블록체인에 새로운 블록을 추가하고, 이 블록을 P2P 네트워크를 통해 참가자 전원에게브로드캐스팅(전파)
한다.
금융
비트코인
이 지불 수단 중심으로 중개기관 없이 순수 자금의 이동·전환·처리에 중점을 두었다면, 이더리움
은 자금 이동을 포함하여 관련된 계약의 내용을 포괄하는 사전·사후 업무처리 범위로 관련 업무 영역이 확산되었다.
일정한 형식의 반복적인 계약
이 많은 분야, 예를 들어 보험업에서 특정 조건을 만족시키면 계약 보상금이 지급되도록 스마트 컨트랙트를 작성함으로써, 조건 충족
시 보험금이 자동으로 지불
되도록 할 수 있다.
저작권
저작물 구입 관련 거래 정보를 투명하게 공유한다.
지적재산권에 대한 권리
를 스마트 계약으로 등록하여 사용자 대금 지급에 따라 실시간 대금 수령이 이루어지도록 구현하면, 불필요한 중개자가 제거되고 프로세스는 단축되어 보다 효율적인 거래가 가능해질 수 있다.
공유경제
집 또는 자동차를 공유하기 위해 계약 조건
을 정하고 이에 따라 금전 지급 및 서비스 제공
이 이루어지도록 스마트 계약을 실행하면, 중개업체를 거치지 않는 사용자 간 직접 거래가 실현될 수 있다.
미국 GM과 승차공유기업 리프트는 사물인터넷(IoT)
기반으로 차량을 등록하고, 스마트 계약을 통해 차량 유치권, 이전, 압류 담보관리 등의 추적을 자동화하는 작업을 진행하고 있다.
물류유통
제품의 유통 추적
이 필요한 분야인 전 세계 식품 유통에서, 참여자 모두 블록체인 상에서 식품 오염 이력
을 확인하고 이에 따른 대금 지불이 가능하다.
미국 IBM은 블록체인 기반 식품 원산지 조회 서비스인 푸드트러스트(Food Trust)를 운영한다. 오염된 식품이 발견될 경우, 예전에는 어떤 농장에서 생산됐는지 확인하는 데 6일 이상 걸려 모든 식품을 폐기해야 했는데, 블록체인 기술을 적용한 이후 2.2초로 단축되었다.
스마트 컨트랙트는 블록체인의 활용 범위를 일상생활의 여러 분야로 확장시켜 '블록체인 2.0'이 가능하게 했으나, 다양한 기술적·정책적 문제점을 가지고 있다.
타이머
나 이벤트
를 통해 실행할 수 없다.
자기 자신의 개인키(private key)
가 없으면 스스로 어떠한 트랜잭션을 발생시킬 수 없기 때문에.
특정 시간에 특정 주소로 자동 송금하는 자동이체
프로세스 등을 구현불가.
업그레이드
나 버그 패치
, 보안 취약점 수정
이 어렵다.
한 번 배포되어 블록으로 생성된 스마트 계약은 수정할 수 없기 때문에.
솔리디티 언어
는 신생언어라 업그레이드가 느리고 지원이 부족하다.
다양한 보안 취약점 또한 존재한다. 솔리디티의 6대 보안 취약점
을 노린 해킹 공격이 존재할 정도.
비싼 가스 수수료 문제
스마트 컨트랙트를 이용하여 상태값을 변경하려면 수수료인 가스(gas) 가 필요하다.
따라서 가스 수수료 때문에 무료로 사용할 수 있는 서비스를 구현하기가 어렵다.
오라클 문제(oracle problem)
블록체인 밖에 있는 데이터를 블록체인 안으로 가져올 때 발생하는 문제를 말한다. 데이터가 블록체인 안으로 들어와야 블록체인으로 관리할 수 있다. 데이터가 블록체인 안으로 들어오지 않거나, 혹은 블록체인 안으로 들어오는 과정에서 위변조가 발생한다면, 설령 그 데이터가 블록체인으로 관리된다고 할지라도 신뢰하기 어렵다.
예를 들어 날씨를 계약의 조건으로 하는 스마트 컨트랙은, 외부에서 날씨 데이터를 가져오는 과정에서의 위변조 위험성이 있다.