티스토리 뷰

이더리움은 단순히 데이터를 저장하는 용도를 가진 비트코인의 블록체인을 넘어 동작하는 프로그램을 담을 수 있는 2세대 블록체인 입니다. 이더리움에 담겨진 프로그램은 마치 계약서와 같다고 하여 스마트 컨트랙트라고 합니다. 이더리움을 활용한 응용 프로그램(dapp)을 개발하기 위해서는 스마트 컨트랙트를 거의 필수적으로 개발해야 하는데요, 앞으로 여러 포스팅에 거쳐 이러한 스마트 컨트랙트를 작성하는 방법에 대해 알아보도록 하겠습니다.


스마트 컨트랙트 개요

스마트 컨트랙트는 이더리움이 최초가 아닌 1994년에 처음으로 제안된 개념입니다. 현실의 계약서는 글로 작성되어있어 실제 사람이 계약을 이행해야 했습니다. 하지만 디지털 명령어로 계약을 작성한다면, 해당 명령어에 따라 자동으로 계약을 이행할 수 있다는 개념 입니다.


이렇게 디지털로 작성된 계약은 일정한 로직으로 작동하기 때문에 조건에 따른 계약 결과가 명확하고, 계약을 즉각 이행할 수 있다는 장점이 있습니다. 하지만 디지털 계약서는 복제와 조작이 쉽다는 문제점이 있어 실제로 사용되지는 않고 개념에만 머무르게 됩니다.



하지만 조작, 변조가 어렵다는 특징을 가진 블록체인 기술이 등잠함으로써 스마트 컨트랙트라는 개념이 떠오르기 시작했습니다. 한 번 올라간 데이터는 수정하기가 어려운 블록체인 네트워크에 스마트 컨트랙트를 올리는 아이디어를 가지고 이더리움이 탄생하게 되었습니다.


솔리디티

솔리디티는 이더리움의 스마트 컨트랙트를 작성하는 대표적인 언어입니다. 이더리움 dapp을 개발하기 위한 여러가지 언어들이 있지만 이더리움에서 가장 권장하는 언어는 솔리디티 입니다. 따라서 이번 포스트는 아래 솔리디티로 작성된 스마트 컨트랙트 예제에 대해서 설명하도록 하겠습니다.


contract는 contract 키워드 를 통해 컨트랙트를 선언하는 것 이 첫번째 입니다. 마치 객체지향 프로그래밍에서 클래스를 선언하는 것과 비슷하다고 할 수 있습니다. 그 뒤로는 컨트랙트 내에 변수와 함수, 함수 변경자 등을 선언, 구현하게 됩니다. 객체지향 프로그래밍과 거의 유사하다고 생각됩니다.


데이터

위의 예제에서는 두 개의 상태변수를 선언하였습니다. data는 uint 형식의 데이터를 저장하고, owner는 소유자의 이더리움 주소(컨트랙트가 배포된 주소)를 저장합니다.



기존에 배웠던 모든 프로그래밍 언어는 변수(데이터) 값을 메모리에 저장하였습니다. 하지만 솔리디티에서는 변수가 컨텍스트에 따라 메모리 또는 파일시스템에 저장됩니다.


 - 복합 데이터 유형(문자열, 배열, 구조체 등) : 이더 스토리지 또는 메모리를 유형에 추가하여 재정의 가능

 - 함수의 매개변수(및 리턴 매개변수) : 기본으로 메모리에 저장

 - 로컬변수 : 기본으로 스토리지에 저장

 - 상태변수 : 무조건 스토리지에 저장


이벤트

이벤트는 event 키워드로 선언할 수 있습니다. 이벤트는 클라이언트에 무언가를 알려주기 위해 사용됩니다. data가 변경될 때마다 이 이벤트가 트리거되며 모든 이벤트는 블록체인 내에 보관됩니다.


함수 변경자

함수 변경자는 modifier 키워드로 선언할 수 있습니다. 이 함수 변경자는 특정 함수 실행 전에 자동으로 조건을 검사하기 위해서 사용됩니다. 위의 예제에서 onlyOwner 함수 변경자를 선언하고 아래의 함수 setData에 사용하였습니다. setData 함수를 호출하기 전에 onlyOwner 함수 변경자를 통해 조건을 검사 해야만 합니다. 컨트랙트의 소유자가 해당 컨트랙트를 호출했는지를 검사합니다. 그렇지 않으면 예외를 발생시킵니다.



 컨트랙트 생성자와 함수

컨트랙트 생성자와 함수는 객체지향 프로그래밍을 이해하고 있다면 새롭게 이해할 필요가 없는 문법들 입니다. 컨트랙트 생성자는 컨트랙트가 블록체인 네트워크에 배포될 때, 즉 컨트랙트가 생성될 때 호출되며 보통 컨트랙트의 상태변수를 초기할 때 사용됩니다.

함수는 컨트랙트내에서 여러가지 작업들을 하기 위해 사용되는 것이며 사용자가 임의로 호출하여 사용하는 형태 입니다.



스마트 컨트랙트를 간단하게 살펴보았는데요, 전체적인 틀과 느낌은 객체지향 프로그래밍과 매우 유사하다를 넘어 동일하다고 볼 수 있습니다. 앞으로 다루게 될 내용들은 스마트 컨트랙트에 대한 기초적인 문법 중 특별한 부분들에 대해서만 다루도록 하겠습니다.

댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함