스마트 컨트랙트란 무엇인가?
스마트 컨트랙트란?
스마트 컨트랙트는 블록체인에 등록되어 작동하는 프로그램으로서, 특정한 기능들의 실행을 가능하게 해 줍니다.
복잡한 계산은 물론, 데이터의 기록과 변경, 가치의 전송 등 목적에 맞는 알고리즘을 프로그래밍할 수 있으며, 실행되는 모든 정보는 블록체인에 기록됩니다. 블록체인 상에서 작동되는 프로그램이므로, 중앙서버나 계약의 중재자가 없어도 실행되며, 블록체인의 장점인 안전성, 정확성, 투명성 등이 모두 보장됩니다. 즉 스마트 컨트랙트는 BlockChain 내에서 비트코인처럼 단순히 거래 내역인 트랜잭션만 기록하는 것이 아닌 계약내용 즉 개발자가 작성한 코드를 기록하여 자판기에서 음료를 뽑아 마시듯 필요한 정보 혹은 계약을 위해 조건을 만족시키면 자동으로 계약이 실행되도록 작성한 것을 스마트 컨트랙트라고 합니다. 스마트 컨트랙트를 구현하기 위한 컨트랙트 코드는 Solidity라는 언어로 작성이 되며 이더리움 가상머신 (EVM, Ethereum Virtual Machine)이라는 독립된 실행 환경에서 실행됩니다. 마치 Java가 JVM에서 실행되는 것과 비슷하다고 보시면 될 것 같습니다. 스마트 컨트랙트가 흥미로운 점은 블록체인 개발자 커뮤니티를 중심으로 개발 환경이 개선되고, 새로운 기능들이 추가되며 지금 이 순간에도 발전하고 있다는 것입니다.
스마트 컨트랙트의 장점
스마트 컨트랙트의 장점으로는 크게 4가지를 찾아볼 수 있습니다.
첫 번째 비용절감입니다. 제삼자를 거치지 않고 계약 혹은 거래가 진행되기에 중개비용이 따로 들지 않기에 이전까지의 거래보다 저렴하게 거래를 할 수 있다는 장점이 있습니다.
두 번째 자율성입니다. BlockChain 내에서 진행되기 때문에 공산력을 가진 제삼자, 혹은 기관이 필요하지 않습니다. 따라서 거래 당사자들이 계약에 대한 온전한 권한, 통제권을 갖게 됩니다.
세 번째 신뢰성입니다. BlockChain 내 스마트 컨트랙트에 의해 계약이 진행되기 때문에 위변조가 거의 불가능하여 신뢰성을 가집니다.
네 번째 보안성입니다. 신뢰성과 연결된 것으로 문서가 암호화되어 BlockChain 내 분산원장 기술에 의해 안전하게 보관되기에 보안성이 높습니다.
스마트 컨트랙트의 단점
한번 배포되어 Block으로 생성된 스마트 컨트랙트는 수정이 불가능합니다. 따라서 업그레이드나 버그 패치, 보안 취약점을 수정하는 것이 어렵습니다. 최근에 delegate call 기능을 이용하여 복수의 스마트 컨트랙트를 구성하여 새로 배포한 스마트 컨트랙트를 delegate call 하는 방식도 사용되고 있습니다. delegate call이란 컨트랙트 A를 통해 컨트랙트 B 호출 시 B의 내용이 변경되지 않고 B의 코드를 A에서 실행하는 것을 의미합니다. delegate call에 대해서는 추후에 자세히 다루도록 하겠습니다.
스마트 컨트랙트의 작동 방식
1. 스마트 컨트랙트 등록 방법
스마트 컨트랙트 개발자가 자신이 만든 스마트 컨트랙트를 BlockChain에 전송을 시작하면 EVM을 통하여 스마트 컨트랙트가 바이트 코드로 변경이 되고 변경된 바이트 코드가 이더리움 BlockChain에 등록됩니다. 스마트 컨트랙트가 등록되면 트랜잭션이 발생하게 되고 네트워크의 모든 노드는 스마트 컨트랙트를 정보를 받게 됩니다. 등록하는 과정은 web.js method 중에 send()를 사용하여 올리게 될 것입니다.
2. 스마트 컨트랙트 조회 방법
스마트 컨트랙트를 이용하고 싶은 사람은 상품을 조회하듯 블록체인의 어떠한 데이터도 변경하지 않고 스마트 컨트랙트 데이터베이스에 저장된 상태 값을 조회합니다. 단지 조회이기 때문에 블록체인이 동기화할 필요가 없으므로 트랜잭션을 발생시키지 않습니다. web.js method 중에 call()을 사용하여 조회하게 될 것입니다.
3. 계약 체결
스마트 컨트랙트를 채결하기 위하여 계약체결[행한 사람에게 전달합니다. web.js method 중에 send()를 사용하여 계약을 체결하게 될 것입니다.
자세한 내용은 추후에 Solidity에서 다루겠습니다.