인사이트
블록체인 스마트 컨트랙트 작동 방식과 활용 사례
2023년 01월 20일
첫 번째 아티클을 통해 스마트 컨트랙트의 개념과 등장 배경, 장점을 알아봤는데요. 이어 스마트 컨트랙트 작동 방식과 활용 사례를 더 설명해 드릴게요.
스마트 컨트랙트는 어떻게 작동할까요? 스마트 컨트랙트를 구현한 가장 대표적인 블록체인인 이더리움을 기준으로 설명해 보겠습니다.
예를 들어, 코드스테이츠 알럼나이 네트워킹 행사에 참여하는 모든 인원에게 CozNFT를 하나씩 선물한다고 가정해 볼게요.
스마트 컨트랙트를 사용하기 위해서는 먼저 스마트 컨트랙트를 블록체인 네트워크 상에 공유해야 합니다.
코드스테이츠에서는 먼저 NFT 콜렉션을 에어드랍하는 컨트랙트를 작성합니다.
이더리움에서는 솔리디티(Solidity)라는 프로그래밍 언어로 스마트 컨트랙트를 작성할 수 있는데요. 다음과 같이 CozNFT.sol
파일을 생성해 컨트랙트 코드를 작성합니다.
함수 transferFrom
은 NFT 콜렉션을 전송하며, 전송 조건이 맞는지 확인한 후, 조건이 올바르게 만족되었다면 NFT 전송을 실행합니다.
▪︎require
구문을 통해 해당 함수를 코드스테이츠에서 실행한 것이 맞는지, 올바른 주소로 전송하는 것인지 확인합니다.
▪︎이후 상태변수 _balances
와 _owners
를 업데이트하여 NFT를 전송합니다.
작성한 CozNFT.sol을 컴파일합니다.
💡 컴파일(Compile)이란? 우리가 프로그래밍을 할 때 작성한 코드는 사람은 이해하기 쉽지만, 기계인 컴퓨터가 이해하긴 어렵습니다. 따라서 작성한 코드를 기계가 이해하기 쉬운 언어로 바꾸어주는 것을 컴파일이라고 합니다. |
우리가 작성한 컨트랙트는 이더리움 노드의 EVM(Ethereum Virtual Machine)이 실행합니다. EVM은 이더리움 네트워크 노드들이 가지고 있는 가상의 실행환경으로, 컨트랙트 함수를 호출하여 그 결과를 확인할 수 있습니다.
EVM은 컴퓨터이기 때문에 우리가 작성한 솔리디티 코드를 이해할 수 없습니다. 따라서 EVM이 이해할 수 있도록 이를 바이트코드(bytecode) 형태로 변환해주어야 합니다.
그리고 바이트코드 형태만으로는 이 컨트랙트에 어떤 함수가 있는지 알기 어렵기 때문에 ABI(Application Binary Interface)도 함께 생성합니다. ABI는 이 컨트랙트에 어떤 함수가 있는지, 무슨 일을 하는 함수인지 등을 적어둔 인터페이스 객체의 집합입니다.
컴파일된 컨트랙트를 이더리움 네트워크 상에 브로드캐스팅합니다. 그리고 컨트랙트를 배포하는 트랜잭션을 생성해 이더리움 네트워크에 전파합니다.
이때 Geth나 Parity와 같은 이더리움 클라이언트를 사용해 직접 배포하거나, 메타마스크, Infura 같이 이더리움 네트워크에 접근할 수 있는 API를 제공하는 서비스를 사용해도 됩니다.
우리가 브로드캐스팅한 컨트랙트 배포 트랜잭션을 네트워크의 다른 채굴 블록이 자신의 블록에 담아 해당 블록이 배포되면, 블록체인에 CozNFT.sol 컨트랙트가 배포됩니다.
이제, 알럼나잇 행사에 참가자가 오면 우리가 작성한 CozNFT.sol에 있는 transferFrom 함수를 실행해 해당 참가자에게 NFT를 지급해주어야 합니다. 이는 아래와 같이 동작합니다.
CozNFT.sol의 transferFrom 함수를 실행한다는 트랜잭션을 생성합니다.
이때, 특정 컨트랙트의 함수를 실행하기 위해서는 컨트랙트의 주소값과 컨트랙트의 ABI를 알아야 합니다.
새로운 트랜잭션을 이더리움 네트워크에 브로드캐스팅합니다.
채굴 노드는 트랜잭션에 적혀있는대로 transferFrom을 실행합니다. 이 때, CozNFT 컨트랙트는 바이트 코드 형태이므로, 채굴 노드는 자신의 EVM에서 컨트랙트 코드를 실행할 수 있습니다.
EVM에서 컨트랙트 코드를 실행한 결과에 문제가 없으면, 채굴 노드는 자신이 만들려는 새 블록에 트랜잭션을 추가합니다.
트랜잭션이 담긴 블록이 브로드캐스팅되어 네트워크 내 모든 노드에게 전파됩니다. 각 노드는 블록과 블록에 든 트랜잭션이 유효한지 검증하고, 유효하다면 자신의 체인에 해당 블록을 추가합니다.
💡 트랜잭션이 블록에 담기고, 네트워크 내 모든 노드가 수용한다고 해서 트랜잭션 처리가 완료되는 것은 아닙니다. 체인에 추가된 블록 역시 이론적으로는 언제든지 취소될 수 있습니다. 더 궁금하시다면 ’블록 완결성(block finality)’ 키워드로 추가 학습 해보세요. 이 콘텐츠에서는 스마트 컨트랙트 동작 방식을 설명하기 위해 트랜잭션 처리를 간략하게 표현하였습니다. |
지금까지 스마트 컨트랙트에 어떤 장점이 있고, 어떻게 사용할 수 있는지 확인했습니다. 이를 통해 우리는 신뢰할 수 있는 제3자의 중개 없이도 계약을 할 수 있다는 것을 알게 되었는데요.
그렇다면 실생활에서 스마트 컨트랙트는 어떻게 적용되고 있을까요?
AXA에서는 fizzy라는 탈중앙화된 플랫폼을 통해, 비행기 연착 시 fizzy를 통해 비행기 일정 지연 대한 보상을 자동으로 지급하는 탈중앙화된 보험 서비스를 제공했습니다.
사용자는 fizzy에서 비행 지연 보험을 계약하는 경우, 이 보험 계약은 이더리움 스마트 컨트랙트로 저장됩니다. AXA에서 글로벌 항공 교통 데이터베이스를 통해 비행기 지연을 발견한 경우, 스마트 컨트랙트의 보험 이행 조건이 충족되면서 컨트랙트에 등록된 사용자의 이더리움 계정으로 보상을 즉시 지급하여 계약을 이행합니다.
기존에는 금융 상품을 구매하거나 파는 등 금융 거래를 하기 위해 은행과 각종 금융 관련 정부 기관들에게 수수료를 지불해야 했습니다. 이 수수료는 은행과 금융 기관이라는 신뢰할 수 있는 제삼자를 운영하고 유지하는 데 사용되며, 사용자는 자신의 개인정보를 제공하여 은행과 금융 기관을 신뢰할 때만 거래를 할 수 있습니다.
그러나 블록체인 스마트 컨트랙트의 등장으로 은행과 금융 기관 없이도 블록체인 네트워크 프로토콜 자체의 신뢰성을 기반으로 제3자 없이 직접 거래를 할 수 있게 되었습니다.
이렇게 거래소, 자산관리, 대출과 같은 전통적인 금융 서비스를 탈중앙화된 형태로 바꾸고 스마트 컨트랙트를 통해 새로운 형태의 금융 서비스를 만드는 것을 DeFi(Decentralized Finance)라고 부릅니다.
DeFi에는 다양한 종류가 있으며, 대표적으로는 아래와 같은 서비스들이 제공되고 있습니다.
▪︎ Aave: 무허가형 대출 서비스
▪︎ UniSwap: 탈중앙화된 형태의 토큰 거래소
▪︎ Compound Finance: 담보대출 서비스
▪︎ etc
대표적인 블록체인 스마트 컨트랙트 기반 게임에는 크립토키티(CryptoKitties)가 있습니다.
크립토키티는 고양이 캐릭터를 교배하고 육성하여 전투를 치르는 수집형 게임입니다. 사용자는 최대한 좋은 고양이 캐릭터를 육성해야 하는데, 이때 고양이 캐릭터는 단순히 데이터가 아니라 블록체인 상의 스마트 컨트랙트를 통해 등록된 NFT(Non-Fungible Token) 형태입니다.
따라서 사용자는 NFT를 게임 외부에서도 사고 팔 수 있으며, 언제 어디서든 자신이 보유한 고양이 NFT에 대한 소유권을 증명할 수 있습니다.
지금까지 스마트 컨트랙트의 개념과 장점, 그리고 스마트 컨트랙트 작동 방식과 활용 사례를 자세히 알아봤습니다. 하지만 스마트 컨트랙트 역시도 한계와 취약점을 갖고 있습니다. 이 부분은 다음 아티클 블록체인 스마트 컨트랙트 한계와 취약점 및 사건・사고 사례에서 더 알아보도록 하겠습니다.
글 이유진 R&D Blockchain Engineer
편집 최인성 Content Manager
🚀 블록체인 개발자 커리어의 시작,
블록체인 부트캠프가 더 궁금하다면?
목록 보기
추천글