안녕하세요 제가 이번 블록체인 3주차에서 발표할 내용은 솔리디티입니다. 저는 이번 주차를 공부하면서 스마트 컨트랙트를 작성할 수 있는 프로그래밍 언어인 솔리디티에 흥미를 느꼈고, 솔리디티에 관련된 교육용 게임을 하면서 이 언어에 대한 기본문법을 익힐 수 있었습니다. 제가 한 게임을 여러분에게도 소개해 드리고 싶어서 이 주제를 고르게 되었습니다.
DApp(Decentralized application)
DApp은 블록체인 위에서 돌아가는 애플리케이션입니다. 아이폰과 구글이 각각의 OS로 플랫폼을 만들고 그 위에 앱들을 만들 수 있는 생태계를 제공한 것처럼, 블록체인 플랫폼 역시 그 위에 애플리케이션을 만들고 운영할 수 있습니다.
그렇다면 일반 애플리케이션과 DApp의 차이가 뭐야? 라는 의문이 드실텐데요. 완벽히 탈중앙화된 애플리케이션은 다음과 같은 특성을 가지고 있습니다:
-오픈 소스 기반이며 자율적으로 운영됨 (블록체인으로 운영하는 서비스는 서비스가 중단되거나 사라진다고 하더라도, 한 번 배포하면 영원하기 때문에 계속해서 사용이 가능)
-퍼블릭 블록체인 위에 데이터를 저장 (한번 블록체인 위에 올라가면 데이터를 다시 되돌리거나 변형 불가능)
-암호화폐에 가치를 부여함
-알고리즘 기반에 의한 토큰 생성
위와 같은 특징때문에 데이터 조작으로 부터 안전하며, 민주적으로 애플리케이션을 운영할 수 있습니다.
크립토키티(Cryptokitties)
DApp 의 가장 유명한 예시로는 크립토키티(Cryptokitties)가 있습니다. 크립토키티는 DApp으로 구현된 최초의 게임입니다. 고양이를 수집, 교배하는데, 고양이는 가상 화폐로 거래할 수 있습니다. 한때 이더리움 메인넷을 마비시킬 정도로 인기를 끌었던 앱이기도 하며, 얼마전엔 큰 투자 유치까지 완료했습니다.
크립토키티는 새로 태어나는 고양이가 얼마나 예쁘고 매력적인가에 따라 값어치가 달라집니다. 새로 태어나는 고양이들은 랜덤으로 속성을 타고 나는데, 그 속성에 따라 새로운 특성의 고양이가 나타나게 됩니다. 신기한 점은 크립토키티의 고양이는 단 한 마리도 똑같은 고양이가 나오지 않는다는 점입니다.
그 이유는 크립토키티는 일반적인 이더리움과 달리 ERC-721 표준을 따르고 있기 때문입니다. ERC-721은 크립토키티를 개발한 액시엄 젠(Axiom Zen)의 아키텍트인 디어터 셜리가 구현한 기술인데요. 기존에 ERC-20로 발행되는 토큰은 1000원 짜리 지폐처럼 대체가 가능합니다. 이에 반해 ERC-721로 발행되는 토큰은 지폐를 구입할 때마다 고유한 서명을 포함하므로 대체 불가능합니다.
이로 인해 크립토키티에서는 전 세계에 단 하나 밖에 없는 고유한 수집품을 가질 수 있죠. 디지털 정보에 불과한 고양이가 11만 8000달러(한화 1억 2000만 원)에 팔릴 정도로 마니아들의 새로운 수집품이 됐습니다.
솔리디티(Solidity)
Solidity란 이더리움 기반의 스마트 컨트랙트를 작성할 수 있는 객체지향형 프로그래밍 언어입니다. C++, Python, 그리고 자바스크립트에 영향을 많이 받았으며, 짜여진 스마트 컨트랙트는 이더리움 가상 머신인 EVM(Ethereum Virtual Machine)에서 실행됩니다.
위 문장에 나와있듯이 솔리디티는 정적 타입의 언어이며, 상속과 라이브러리, 사용자 정의 타입을 지원하는 등 여러 특징이 있습니다.
물론 솔리디티 이외에도 이더리움 기반의 DApp을 만들 수 있는 언어들이 있습니다. 하지만 솔리디티가 가장 널리 쓰이고 있습니다. 가장 많이 쓰여지는 언어이다 보니 지원도 많이 되고, 문서화가 잘 되어 있습니다.
솔리디티를 사용하면, 투표를 위한 DApp부터, 크라우드 펀딩 서비스, 경매 시스템, 다중 지갑 등의 서비스들을 구현할 수 있습니다.
솔리디티라는 언어를 처음 접해보는 사람들에게는 CryptoZombies라는 게임을 추천합니다. 게임을 만들면서 스마트 컨트랙트에 대한 개념과 작성 방법을 쉽게 배울 수 있습니다. (앞에서 설명했던 크립토키티와 매우 비슷한 게임으로 솔리디티 언어를 이용해 코딩을 쉽게 해울 수 있도록 하는 교육용 게임입니다.)
저도 이 게임을 통해 솔리디티라는 언어를 다뤄보았는데 이런식으로 왼쪽에 스토리텔링과 문제가, 오른쪽에 코딩할 수 있는 쉘이 있습니다. 문제를 해결하기 위한 개념이 잘 적혀있어 완전 처음 다루어보는 언어인데도 재밌게 실습할 수 있었습니다.
솔리티디 언어는 블록체인 개발을 위해 특화된 언어로써 다른 프로그래밍 언어와 어떤 차이점이 존재하는지 알아보겠습니다. 제가 가져온 부분은 특히 솔리티디 언어에서만 이용할 수 있는 기능을 가져온 것입니다.
주소 : 주소는 20바이트 값을 가지며, 이 값은 이더리움 주소의 크기를 가진다.
주소 멤버 : balance 와 transfer라는 두 멤버를 사용하면 계정의 잔액을 확인하거나, 계정으로 이더를 전송할 수 있다.
주소 연관 키워드 : 키워드는 솔리디티 언어와 함께 제공되며 일종의 메소드로써, 미리 정해진 방법으로 언어를 사용하는 방법이다. 코드에서 키워드를 사용하면 스마트 계약에 필요한 공통적인 작업을 수행할 수 있다.
-<address>.balance(uint256) : <>안에 있는 주소의 잔액을 wei 단위로 반환
-<address>.send (uint256 amount) returns (bool) : uint256형으로 주어진 양의 wei를 <>의 주소로 보내고, 실패 시 false를 반환
-this(현재 계약 유형) : 계약을 명시적으로 주소로 반환
-selfdestruct(주소 수신자) : 현재 계약을 파기하고 지정된 주소로 계약 계정의 잔액을 전송
참고
크립토좀비->https://cryptozombies.io/ko/course
크립토키티->https://www.cryptokitties.co/
디앱->https://www.stateofthedapps.com/ko
'동아리, 스터디, 교육 > 블록체인' 카테고리의 다른 글
[20.08.10] 6주차 블록체인 - EVM storage에는 변수가 어떻게 저장될까? (0) | 2020.08.11 |
---|---|
[20.08.03] 5주차 블록체인 - The DAO의 해킹과 DAO의 한계점 (0) | 2020.08.03 |
[20.07.27] 4주차 블록체인 - 토큰 발행 실습 (0) | 2020.08.03 |
[20.07.15] 2주차 블록체인 - 외부 소유 어카운트(EOA), 컨트랙트 어카운트(CA) (0) | 2020.07.16 |
[20.07.08] 1주차 블록체인 - 스마트 컨트랙트(smart contract) (0) | 2020.07.15 |