스마트 컨트랙트 또는 스마트 계약은 계약 당사자가 사전에 협의한 내용을 미리 프로그래밍하여 전자 계약서 문서 안에 넣어두고 특정 조건이 모두 충족되면 자동으로 계약 내용이 이행되도록 하는 시스템입니다.
기존의 블록체인 기술이 과거에 일어났던 일을 기록한다고 하면, 스마트 계약을 구현한 블록체인 기술은 미래에 일어날 일을 미리 기록할 수 있습니다.
스마트 계약은 제3의 보증기관을 끼우지 않고 개인 간의 (P2P) 계약을 체결할 수 있도록 하는 기능입니다.
스마트 컨트랙트는 1994년 닉 재보가 처음 제안하였으나 실제로 구현하지는 못하였습니다. 그는 스마트 컨트랙트는 프로토콜 및 사용자 인터페이스를 사용하여 계약 프로세스의 모든 단계를 용이하게 한다며, 이것은 기존 서면 계약 방식보다 훨씬 기능적인 디지털 계약을 사용할 수 있는 새로운 방법을 제공한다고 주장하였습니다.
2013년 비탈릭 부테린은 스마트 계약 플랫폼인 이더리움을 개발할 것을 제안하였고, 2015년 개발에 성공하여 서비스를 시작하였습니다.
이때 스마트 컨트랙트라는 개념을 이더리움 블록체인에 도입하였고, 실제로 구현함으로써 본격적으로 스마트 계약이 사용되기 시작하였습니다.
닉 재보가 처음 고안한 개념인 스마트 계약은 계약에 필요한 요소를 코드를 통하여 스스로 실행되게 하는 전산화된 거래의 약속이라고 정의하였습니다.
또한 스마트 계약이 자동판매기와 비슷하다고 하였습니다.
미리 정해진 액수 이상의 돈을 투입한 후 자동으로 원하는 상품을 구매할 수 있듯 스마트 계약 또한 일정한 조건이 충족되면 자동으로 계약이 실행되도록 한다는 것입니다.
닉 재보는 스마트 컨트랙트 설계의 기본원칙으로 4가지를 제시하였습니다.
- 관측 가능성(observability): 스마트 계약은 서로의 계약 이행 가능성을 관찰하거나 성과를 입증할 수 있어야 합니다.
- 검증 가능성(verifiability): 계약을 이행 또는 위반했을 때 이를 알 수 있어야 합니다.
- 사생활 보호(privacy): 계약 내용은 계약에 관련된 당사자들에게만 알려져야 합니다.
- 강제 가능성(enforceability): 계약을 강제로 이행할 수 있는 구속력이 있어야 합니다. 단, 강제 가능성은 최소화해야 합니다.
초기 닉 재보는 스마트 컨트랙트를 위하여 비트골드라는 화폐를 고안하였지만, 당시의 기술적인 한계로 개발에 실패하였습니다.
2009년 사토시나카모토가 비트코인을 개발하고, 비트코인의 기술인 블록체인이 등장하자 스마트 컨트랙트가 다시 부상하였습니다.
기존 디지털 프로토콜의 낮은 신뢰성과 위변조 문제로 인하여 실제 구현되기 어려웠던 스마트 계약이 블록체인 기술을 통하여 무결성을 보장하고, 조작 방지가 가능한 블록체인 기반으로 개발될 수 있게 되었습니다.
최초의 블록체인 기반 스마트 컨트랙트는 비트코인입니다.
비트코인의 결제 시스템인 UTXO 는 간단한 스택 기반 프로그래밍 언어로 표현된 복잡한 스크립트에 의해서도 작동합니다.
UTXO 는 'Unspent Transaction Outputs'의 약자로서, '미사용 트랜잭션 출력값' 또는 '미지출 거래 출력'이라고 합니다.
이더리움은 비트코인 스크립트의 튜링 불완전성이라는 한계를 극복하고자 나왔습니다.
비탈리크 부테린이 창시한 이더리움의 경우 블록에 데이터뿐만 아니라 조건문, 반복문 등의 실행 코드를 포함해 로직의 실행을 자동화할 수 있습니다.
스마트 컨트랙트를 구현하기 위한 컨트랙트 코드는 이더리움 가상머신(EVM) 이라는 독립된 실행환경에서 실행합니다.
여기에 실행 할 때마다 수수료인 가스를 발생시키고 네트워크상에 수수료 한계를 설정하여 무한루프를 막았습니다.
무한히 반복되는 조건을 만들어 스마트 컨트랙트를 실행시키면 중간에 수수료 한계점에 도달하게 되는데 이때 중단됩니다.
이더리움에서 스마트 컨트랙트는 솔리디티 언어로 프로그래밍 됩니다.
스마트 컨트랙트로 구현하고자 하는 내용을 솔리디티로 구현합니다.
솔리디티 언어로 프로그래밍이 된 스마트 컨트랙트를 컴파일하여 네트워크에 배포할 수 있는 Bytecode를 생성합니다.
Transaction에 Bytecode를 담고, 마이너가 해당 Transaction이 담긴 블록을 채굴합니다. 이와 동시에 해당 Transaction은 블록체인 네트워크에 기록됩니다.
유저는 ABI를 통해 배포된 스마트 컨트랙트 코드에 정의된 함수를 호출하는 Bytecode를 생성하고, Transaction에 담아 블록체인 네트워크에 전달합니다.
채굴자는 유저로부터 받은 Bytecode를 배포된 스마트 컨트랙트 코드에 따라 이더리움 가상머신 (EVM : Ethereum Virtual Machine) 위에서 실행합니다.
이때, 가스 수수료가 계산되면서 블록에 추가되고, 실행 결과가 유효한 경우 실행 결과가 State에 반영됩니다.
이더리움 스마트 컨트랙트의 바이트 코드를 실행하는 32바이트 스택 기반의 실행 환경입니다.
스마트 컨트랙트의 작동을 Bytecode로 변환할때 ABI (Application Binary Interface)를 같이 전달해줍니다.
계약자는 컴퓨터와 직접적으로 통신하지 않습니다.
키보드, 모니터, 마우와 같은 입출력 장치를 통하여 상호작용하기 때문에 사람이 이해할 수 있는 화면으로 구성하여야 합니다.
ABI 인터페이스를 이용하면 작업이 좀 더 수월 할 수 있습니다.
스마트 컨트랙트와의 상호작용을 위하여 대표적으로 Web3.js 라는 라이브러리라 제공됩니다.
'블록체인 개발할뻔' 카테고리의 다른 글
스마트 컨트랙트의 문제점 (0) | 2022.07.20 |
---|---|
스마트 컨트랙트의 작동 원리 (0) | 2022.07.13 |
클레이튼의 계정 유형 알아보기 (0) | 2022.07.08 |
클레이튼 시작하기 앞서 KCT 알아보기 (1) | 2022.07.06 |
ERC20 장단점, 선택적규칙 다른 이더리움 표준 (0) | 2022.07.05 |
댓글