동아리, 스터디, 교육/블록체인

[20.07.20] 3주차 블록체인 - 솔리디티(Solidity)

pxatd 2020. 7. 23. 14:49
728x90

안녕하세요 제가 이번 블록체인 3주차에서 발표할 내용은 솔리디티입니다. 저는 이번 주차를 공부하면서 스마트 컨트랙트를 작성할 수 있는 프로그래밍 언어인 솔리디티에 흥미를 느꼈고, 솔리디티에 관련된 교육용 게임을 하면서 이 언어에 대한 기본문법을 익힐 수 있었습니다. 제가 한 게임을 여러분에게도 소개해 드리고 싶어서 이 주제를 고르게 되었습니다.

DApp(Decentralized application)

DApp은 블록체인 위에서 돌아가는 애플리케이션입니다. 아이폰과 구글이 각각의 OS로 플랫폼을 만들고 그 위에 앱들을 만들 수 있는 생태계를 제공한 것처럼, 블록체인 플랫폼 역시 그 위에 애플리케이션을 만들고 운영할 수 있습니다.

 

그렇다면 일반 애플리케이션과 DApp의 차이가 뭐야? 라는 의문이 드실텐데요. 완벽히 탈중앙화된 애플리케이션은 다음과 같은 특성을 가지고 있습니다:

 

-오픈 소스 기반이며 자율적으로 운영됨 (블록체인으로 운영하는 서비스는 서비스가 중단되거나 사라진다고 하더라도, 한 번 배포하면 영원하기 때문에 계속해서 사용이 가능)

-퍼블릭 블록체인 위에 데이터를 저장 (한번 블록체인 위에 올라가면 데이터를 다시 되돌리거나 변형 불가능)

-암호화폐에 가치를 부여함

-알고리즘 기반에 의한 토큰 생성

 

위와 같은 특징때문에 데이터 조작으로 부터 안전하며, 민주적으로 애플리케이션을 운영할 수 있습니다.

 

크립토키티(Cryptokitties)

DApp 의 가장 유명한 예시로는 크립토키티(Cryptokitties)가 있습니다. 크립토키티는 DApp으로 구현된 최초의 게임입니다. 고양이를 수집, 교배하는데, 고양이는 가상 화폐로 거래할 수 있습니다. 한때 이더리움 메인넷을 마비시킬 정도로 인기를 끌었던 앱이기도 하며, 얼마전엔 큰 투자 유치까지 완료했습니다.

 

크립토키티는 새로 태어나는 고양이가 얼마나 예쁘고 매력적인가에 따라 값어치가 달라집니다. 새로 태어나는 고양이들은 랜덤으로 속성을 타고 나는데, 그 속성에 따라 새로운 특성의 고양이가 나타나게 됩니다. 신기한 점은 크립토키티의 고양이는 단 한 마리도 똑같은 고양이가 나오지 않는다는 점입니다.

 

그 이유는 크립토키티는 일반적인 이더리움과 달리 ERC-721 표준을 따르고 있기 때문입니다. ERC-721크립토키티를 개발한 액시엄(Axiom Zen)아키텍트인 디어터 셜리가 구현한 기술인데요. 기존에 ERC-20로 발행되는 토큰은 1000짜리 지폐처럼 대체가 가능합니다. 이에 반해 ERC-721로 발행되는 토큰은 지폐를 구입할 때마다 고유한 서명을 포함하므로 대체 불가능합니다.

 

이로 인해 크립토키티에서는 전 세계에 단 하나 밖에 없는 고유한 수집품을 가질 수 있죠. 디지털 정보에 불과한 고양이가 118000달러(한화 12000만 원)에 팔릴 정도로 마니아들의 새로운 수집품이 됐습니다.

솔리디티(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://medium.com/@weekly.teckle/%EC%B4%88%EB%B3%B4%EC%9E%90%EB%93%A4%EC%9D%84-%EC%9C%84%ED%95%9C-%EC%9D%B4%EB%8D%94%EB%A6%AC%EC%9B%80-dapp-%EB%A7%8C%EB%93%A4%EA%B8%B0-c6ddb0c6651d

 

크립토좀비->https://cryptozombies.io/ko/course

크립토키티->https://www.cryptokitties.co/

디앱->https://www.stateofthedapps.com/ko

 

728x90