스마트 컨트랙트는 Nick Szabo가 1994년 최초 제안한 개념입니다. 기존 계약서(Contract)는 서면으로 되어있어 계약 조건을 이행하려면 실제 사람이 계약서 대로 수행을 해야 하지만 디지털 명령어로 계약을 작성하면 조건에 따라 계약 내용을 자동으로 실행할 수 있다고 주장하였습니다.
디지털로 된 계약서는 조건에 따른 계약 결과가 명확하고, 계약 내용을 즉각 이행할 수 있습니다. 각자의 자산이 연결된 디지털로 양자 합의를 하고 계약서를 작성하고 실행하기로 한다면 계약을 이행하는데 복잡한 프로세스를 엄청나게 간소화 될 것 입니다. 또한 다양한 그러나 디지털로 된 자료들은 쉽게 복사되고 조작이 쉬워 1994년에 제안한 스마트 컨트랙트는 개념으로만 존재하고 구체적인 서비스에 이용될 수 없었습니다.
스마트 컨트랙트는 이러한 블록체인과 함께 급부상하게 됐습니다. 스마트 컨트랙트를 만들 수 있는 환경이 20여 년이 지나 구체화 된 것이죠. 최초의 블록체인 기반 스마트 컨트랙트는 비트코인 스크립트입니다. 비트코인 트랜잭션에 원시 언어인 OPCODE로 스크립트를 작성해서 보내면 조건에 따라 자동으로 거래를 수행합니다. 스크립트가 정상이면(기존에 보유한 비트코인의 잔액이 정확하고 거래를 보낸 사람의 서명이 정확한지 보는 것이 가장 기본적인 스크립트) 거래를 정상으로 본다는 일종의 계약(Contract) 개념이 있으므로 Contract Code로 불리기도 합니다.
하지만 비트코인 스크립트는 반복문을 사용할 수 없고, 비트코인 잔고 외의 다른 정보를 관리 할 수 없는 한계가 있습니다. 이는 블록체인의 특이한 구조 때문인데 비트코인 스크립트에서 반복문을 허용할 경우 만약 스크립트 조건 때문에 무한 루프가 발생할 경우 네트워크 전체가 멈출 수 있습니다. 사용자는 무한루프를 통해 쉽게 DoS(Denial of Service) 공격을 할 수 있습니다.
이더리움(Ethereum)은 이러한 비트코인 스크립팅 시스템의 한계를 극복하고자 나온 스마트 컨트랙트 특화 블록체인 플랫폼입니다. 사실 스마트 컨트랙트란 용어가 본격적으로 사용하기 시작한 것은 이더리움 이후라고 보면 됩니다. 이더리움은 비트코인 스크립팅 시스템의 한계인 다양한 상태 저장과 반복문을 허용한 스마트 컨트랙트를 만들었습니다. 여기에 각 라인을 실행할 때마다 수수료를 발생시키고 네트워크상에 수수료의 한계를 설정하여 무한루프를 막았습니다. 무한히 반복되는 조건을 만들어 스마트 컨트랙트를 실행시키면 돌다가 중간에 수수료 한계점에 도달하면 중단됩니다.
이는 기발하지만 뜻밖에 간단한 논리에 의해 구현되게 되었는데 블록체인을 통해 함수 내용과 함수의 입력을 공유하면서 무결성을 보장한다면, 함수의 결과는 별도로 공유하지 않더라도 그 무결성이 보장된다는 것이죠. 이더리움은 함수를 컴파일된 코드 형태로 거래에 포함하여 블록체인을 통해 동기화합니다. 이때 거래에 포함된 정보를 함수의 입력으로 하여 코드로 표현된 함수를 실행한 후 그 결과를 별도의 상태로 보관하는 방식으로 스마트 컨트랙트를 구현하게 되었습니다.
그리하여 독자 코인인 이더 외에 다른 디지털 객체의 상태를 저장하는 방식을 허용하여 다양한 재화를 이더리움 네트워크 위에 만들고 거래할 수 있게 되었습니다. 이더리움 상에서의 가장 유명한 스마트 컨트랙트의 예는 DAO(Decentralized Autonomous Organization)라고 불리는 탈중앙화된 자율 조직입니다. 이는 회사의 의결권을 토큰(DAO Token)으로 행사할 수 있도록 크라우드 펀딩을 통해 토큰을 이더로 구입할 수 있도록 판매하였고 그 과정에서 모인 약 2000억원 가량의 이더를 어떻게 사용할지 토큰을 기반으로 투표할 수 있도록 한 스마트 컨트랙트로서 특정 운영주체가 없이 참여자의 투표로 운영되도록 했습니다.
참고로 DAO는 DAO 스마트 컨트랙트 코드의 논리 오류 때문에 해커의 공격을 당해 엄청난 피해가 발생하게 되자 이더리움 전체를 Hard fork, 즉 롤백하는 등 우여곡절이 있었습니다.
비트코인의 경우 스마트 컨트랙트가 지원되지는 않지만, 비트코인이라는 자산이 이동되는 단 하나의 송금 어플리케이션이 블록체인에 올라간 서비스라고 볼 수 있습니다.
Ethereum 같은 스마트 컨트랙트 지원 블록체인의 경우 스마트 컨트랙트의 상태를 변경시키는 트랜잭션 보관 데이터베이스와 스마트 컨트랙트의 최신 상태를 보관하고 있는 스마트컨트랙트 데이터베이스를 가지고 있습니다.
여기서 스마트 컨트랙트는 상태를 변경할 수 있는 어플리케이션이라고 할 수 있고 스마트 컨트랙트의 상태는 해당 어플리케이션에서 사용하는 변수라고 할 수 있으며 이를 변경하기 위한 입력값은 트랜잭션에 포함되어 있다고 볼 수 있습니다.
스마트 컨트랙트 상태(State)를 저장하는 데이터베이스의 경우 Ethereum처럼 높은 압축률을 위해 트랜잭션을 저장하는 데이터베이스와 합쳐져 있는 경우도 있고 아니면 분산합의와 스마트 컨트랙트의 낮은 의존성을 달성하기 위해 완전히 분리된 경우도 있습니다.
출처 : https://blog.theloop.co.kr/2017/03/28/%EC%8A%A4%EB%A7%88%ED%8A%B8-%EC%BB%A8%ED%8A%B8%EB%9E%99%ED%8A%B8smart-contract-%EA%B0%9C%EC%9A%94-1/
https://blog.theloop.co.kr/2017/04/04/%EC%8A%A4%EB%A7%88%ED%8A%B8-%EC%BB%A8%ED%8A%B8%EB%9E%99%ED%8A%B8smart-contract-%EA%B0%9C%EC%9A%94-2/