솔리디티 프로그래밍 시작하기
가입 인사를 쓴 어제부터 하루동안 무엇을 써야 할지 고민을 했습니다. 첫 글이니 멋드러지게 쓰고 싶은 마음도 많았고, 처음에는 단순한 글들부터 쓰면서 페이스 조절을 해야 겠다는 생각도 들었습니다. 고민 끝에 내린 결정은, 제가 알고 있는 것인 솔리디티 프로그래밍에 대한 지식을 나누는 것부터 시작하는 것이 제일 낫겠다는 것이였습니다 ㅋㅋ
솔리디티란 무엇일까요? 스팀잇에 계신 분들 중 많은 분들은 이더리움이 무엇인지 알고 계실겁니다. 혹시 모르시는 분들을 위해 간단히 설명해 드리자면, 이더리움은
- 암호화폐입니다.
- 그냥 암호화폐가 아니라, 다른 암호화폐나 분산 어플리케이션(dapp)이 그 위에서 구동될 수 있는 하나의 플랫폼입니다.
- 플랫폼으로서의 특성 때문에 크라우드펀딩(특히 ico 형태), DAO, 심지어는 탈중앙화된 거래소 등을 돌릴 수 있습니다.
여기서 dapp을 프로그래밍 하는 언어가 바로 솔리디티입니다.
그래서 솔리디티를 배우면 뭘 할 수 있다는 건가요?
dapp을 만들 수 있습니다. 백문이 불여일견, dapp의 예시 몇가지를 보여드릴게요.
Token
이더리움 튜토리얼에 나오는 것 중 하나로, 이전에는 암호화폐를 만들려면 소스코드 전체를 밑바닥에서부터 짜야 했던 것 과는 달리 이더리움 위에서 돌아가는 토큰의 형태로 암호화폐를 만들게 하는 예시입니다. 100줄 미만의 코드로 간단한 전송이 가능한 토큰을 구현합니다!
EtherDelta
이더델타는 이더리움 네트워크 위에서 구동되는 탈중앙화된 거래소입니다. 비트쉐어로 대표되는 탈중앙 거래소 모델은 해킹이나 거래소 먹튀 등의 문제를 원천적으로 해결한다는 면에서 주목을 받고 있죠. 한편, 이더리움 네트워크의 한계 때문에 이더델타는 거래 데이터만 이더리움에 보관하고 호가창 데이터는 별도 데이터베이스(gitter...)에 보관하고 있습니다(0x 프로토콜에서 사용하고 있는 방식입니다).
Augur
어거는 이더리움 위에서 돌아가는 예측 시장입니다. 예측 시장은 여러 주체가 미래 사건에 대해 돈을 걸고, 올바른 예측을 했을 경우에는 보상을 받게 하는 미래 예측 모델입니다. 이 과정에서 형성되는 채권의 가격이 미래의 사건에 대한 확률을 나타내기 때문에, 예측 시장은 집단 지성에 기반해 때로는 전문가들보다도 더 효과적으로 미래를 예측할 수 있습니다. 참고로 어거는 솔리디티가 아닌 Serpent라는 또 다른 이더리움 프로그래밍 언어로 작성되어 있습니다.
솔리디티 프로그래밍을 시작하는 방법
이더리움 초창기에는 솔리디티로 프로그래밍을 하고 컨트랙(이더리움 위에서 돌아가는 자동화된 계정 소유자들, dapp을 포함하는 개념이라고 보면 편합니다)을 배포하려면 일주일 넘게 전체 블록체인 데이터베이스를 다운받아야 했습니다. 다행히도, 지금은 MEW나 Remix등 쉽고 편한 환경이 구축되어있으므로, 우리는 그것들을 사용할게요.
1. Remix에 들어갑니다
Remix는 온라인 상에서 솔리디티 코드를 작성하고 컴파일 할 수 있는 사이트입니다. 우리는 아직 프로그래밍을 직접 배우진 않을 것이고, 전체 작업 흐름을 맛보기만 할 것이기 때문에 소스코드는 이걸 복붙해 주세요.
pragma solidity ^0.4.0;
contract SimpleStorage {
uint storedData;
function set(uint x) {
storedData = x;
}
function get() constant returns (uint) {
return storedData;
}
}
원본: https://solidity.readthedocs.io/en/develop/introduction-to-smart-contracts.html
간단히 설명하면 이 코드는 이더리움 블록체인 안에 숫자 하나(storedData
)를 저장(set
)하고 불러올(get
) 수 있게 해 줍니다.
2. 컨트랙을 배포합니다.
기본적으로 리믹스는 오토 컴파일을 시행하기 때문에 붙여넣고 나면 조금 렉이 걸리다가 컴파일이 완료될 것입니다. 이, 오른쪽 밑에 보이는 create
버튼을 눌러 컨트랙을 배포하세요.
원래대로라면 컨트랙을 배포하는 것도 이더를 지불해야 하는데, Remix에서는 여러분을 위해 일종의 작은 이더리움(Javascript VM)을 만들어서 그 내부에서 코드가 실행되게 만듭니다. 때문에 실제로 웹과 상호작용을 하게 될때는 이 방식을 쓸 수 없고, MEW를 사용해야 해요.
3. 디버깅을 시작합니다.
create
를 누르면 이 컨트랙과 상호작용 할 수 있는 버튼들이 나타납니다.
보시면 get
밑에는 uint256: 0
이라는 말이, set
옆에는 빈 칸이 있는걸 볼 수 있습니다. 아까 이 컨트랙은 숫자 하나를 저장하는 기능을 한다고 말씀드렸죠. uint256: 0
은 현재 저장된 값이 0이라는 뜻입니다. 이더리움은 초기값을 모두 0으로 설정하기 때문입니다.
이제 저장된 값을 바꿔봅시다. 빈칸에 숫자 3(또는 2^256을 넘지 않는 다른 숫자)를 넣고 set
버튼을 클릭합시다.
트랜잭션에 41662가스가, 실행에 20158 가스가 소모되었다고 뜹니다. 이더리움은 모든 배포, 계산 등의 명령 실행에 가스를 요구합니다. 다시 말해, 복잡한 계산을 블록체인에 요구할 수록 사용자는 더 많은 이더를 내야 합니다. 일종의 사용료죠. 여기서 우리는 우리만의 작은 이더리움을 사용하기 때문에 실제로 소모된 이더는 없습니다 ㅋㅋ
이후 get
버튼을 눌러 다시 저장된 값을 확인하면,
정상적으로 3이 나오는 것을 볼 수 있습니다.
전반적으로 어떻게 솔리디티 프로그래밍을 하는지 살펴봤습니다. 아마 많은 분들이 이더리움과 솔리디티에는 관심이 있었지만 설치도 복잡하고, 강좌는 다 영어고, 그래서 못 시작했을 거라고 생각해서 구체적인 코드 설명보다는 일단 코드를 실행시키는 것을 목표로 써 봤어요. 혹시 수정할 부분이나 궁금한 점 있으시면 언제나 댓글로 알려주세요. 스팀 활용법에 대해서도 조언주실 점 있으면 부탁드립니다 ㅋㅋ
기계의 시인
참 멋진 말이군요.
제블로그에 이글을 공유하겠습니다^^
dapp 말로만 들어봤는데 솔로디티 프로그래밍으로 만들어지다니.. 세상은 모르는 것들이 너무나 많네요 ㅎㅎ 앞으로 이런 강좌들 좀 부탁드려도 될까요? 하나씩 보고 따라해 보고 싶은데 아직도 진입장벽이 조금 높네요 ㅠㅠ
쉽게 쓰려고 하는데 마음처럼 잘 되지는 않네요 ㅋㅋ 배우는 족족 조금씩 써 내려나갈 생각입니다. 언제든지 물어보실 것 있으면 댓글 달아주세요!
알기 어렵지만 도움이 되는 중요한 정보같아요~~ 감사합니다! 저는 시를 쓰고있습니다 가끔 들려주세요^^
최초의 프로그래머인 에이다 러브레이스를 사람들은 기계의 시인이라고 불렀다고 합니다. 자주 들를게요!
감사해요^^ 에이다 러브레이스/ 기계의 시인 참 멋진 말이네요
리믹스가 참 좋네요 좋은 정보 감사합니다
훌륭합니다. 한 수 배웠네요. ^^ 스친 추가 했습니다. 고맙습니다. ㅎㅎ