SlideShare una empresa de Scribd logo
1 de 30
Solidity
introduce solidity language(1)
- Index -
1. Remix-Solidity IDE

2. How to Study

3. Q/A
What is Remix-Solidity IDE?
Remix-Solidity IDE
기존 IDE에서 사용가능한 플러그인 부터 브라우저를 기반으로 별도의 설치가 필요없는 개발 환
경이 나왔다. 그중에서 우리는 별도 설치가 필요없는 브라우저 기반을 사용할 것이다.
* Browser-Solidity(Remix)

Browser-Solidity는 Solidiy 언어 Contributor가 개발한 웹 브라우저 기반 IDE이다.
* Ethereum Studio

리눅스의 이더리움 클라이언트 쉘 접속 가능, cloud9 기반 웹 IDE.
* Intellij-Solidity

인텔리J IDE의 플러그인.
* VS Code Ethereum Solidity Extension

VS code 용 플러그인
* Vim Solidity

구문 강조를 지원하는 Vim 에디터 플러그인.
Remix-Solidity IDE
크롬 및 파이어폭스 브라우저를 사용하는 것을 권한다.
Remix 주소는 https://remix.ethereum.org/ 이다.
처음 나오는 ballot.sol 파일이 표시될텐데, 닫아도 상관없다.
Smart Contract
우선 왼쪽 메뉴 browser 에 새로운 파일을 만든다. 프로그래밍의 대명사 "helloworld.sol".
그리고 해당 파일에 다음 코드를 작성한다.
pragma solidity ^0.4.8;

contract HelloWorld {

string public greeting;

function HelloWorld(string _greeting){

greeting = _greeting;

}

function setGreeting(string _greeting){

greeting = _greeting;

}

function say() constant returns(string){

return greeting;

}

}
Smart Contract
그동안 콘솔(CMD)에서 만들었던 네트워크와 solidity 언어 버전을 설정해야한다.
따라서 1시 방향 "Settings"에 들어간다.
Solidity Version 에서 컴파일 버전을 0.4.8 버전으로 고친다.
Smart Contract
이제 Run 탭에 들어가서 Environment 에 들어가서, 우리가 만든 네트워크를 연결한다.
처음에는 Javascript VM 이라고 되어있는데, 이부분을 Web3 Provider로 변경한다.
그러면 alert창이 뜨는데 Ok를 누르면, Web3 Provider Endpoint를 작성하는 부분이 있다.
이제 콘솔을 열어서 실제 Endpoint에 해당하는 localhost를 열어줘야한다.
기존에 geth를 통해서 JSON-RPC에 접속했듯이 작업을 하면 된다.
geth --networkid 4649 --nodiscover --maxpeers 0 --datadir /PATH_TO/
test_data --mine --minerthreads 1 --rpc --rpcaddr "0.0.0.0" --rpcport
8545 --rpccorsdomain "*" --rpcapi
"admin,db,eth,debug,miner,net,shh,txpool,personal,web3" --unlock 0
2>> /PATH_TO/test_data/geth.log
Smart Contract
이전과 조금 다른 모양이 나온다. 왜냐하면, 명령어 중에 unlock 0 이라는 부분이 추가되었다.
이 부분은 시작 시, 보안 잠금을 해제한다는 뜻이다. 즉 eth.accounts[0] 의 잠금을 해제한다는
뜻으로 해석하면 된다. 잠금 해제하려면 해당 계정의 비밀번호를 입력하자.
물론 여러개의 계정을 잠금해제하려면, unlock 0,1,2,3 이런식으로 작성해주면 된다.
아무런 오류가 발생하지 않았다면, 다시 Remix로 돌아와서 연결해보자.
오류가 발생하는 경우가 있으니 천천히 진행한다.
Smart Contract
잘 연결이 되었다면, 다음과 같은 화면이 표시된다.
Environment 상에서는 Web3 Provider로 연결되어있고, 만들었던 계정들이 보일 것이다.
이제 본격적으로 스마트 계약을 위한 solidity를 공부해보자.
Smart Contract
앞서 작성한 코드들을 한 줄씩 살펴보자.
pragma solidity ^0.4.8;

contract HelloWorld {

string public greeting;

function HelloWorld(string _greeting){

greeting = _greeting;

}

function setGreeting(string _greeting){

greeting = _greeting;

}

function say() constant returns(string){

return greeting;

}

}
=> 버전 프라그마

컴파일러의 버전을 지정한다.
Smart Contract
앞서 작성한 코드들을 한 줄씩 살펴보자.
pragma solidity ^0.4.8;

contract HelloWorld {

string public greeting;

function HelloWorld(string _greeting){

greeting = _greeting;

}

function setGreeting(string _greeting){

greeting = _greeting;

}

function say() constant returns(string){

return greeting;

}

}
=> 계약 선언

contract로 계약을 선언한다.

(자바의 클래스와 매우 비슷하다.)
Smart Contract
앞서 작성한 코드들을 한 줄씩 살펴보자.
pragma solidity ^0.4.8;

contract HelloWorld {

string public greeting;

function HelloWorld(string _greeting){

greeting = _greeting;

}

function setGreeting(string _greeting){

greeting = _greeting;

}

function say() constant returns(string){

return greeting;

}

}
=> 계약 내부에서 유효한 변수를 선언한다.

여기서 public으로 선언 된 부분은,

해당 계약에 접근가능한 모든 사람이 볼 수 있다는

뜻이다. 물론 임의로 변경은 불가능하다.
Smart Contract
앞서 작성한 코드들을 한 줄씩 살펴보자.
pragma solidity ^0.4.8;

contract HelloWorld {

string public greeting;

function HelloWorld(string _greeting){

greeting = _greeting;

}

function setGreeting(string _greeting){

greeting = _greeting;

}

function say() constant returns(string){

return greeting;

}

}
=> 생성자

function으로 메서드를 만든다.

보통 생성자는 계약과 같은 이름을 가진 메서드로,

배포할 때만 실행가능한 메서드이다.

여기서 인자로 string 타입의 _greeting을 받는다.

Solidity에서는 관례적으로 메서드의 인수 샆에

언더 바 _ 를 붙인다.
Smart Contract
앞서 작성한 코드들을 한 줄씩 살펴보자.
pragma solidity ^0.4.8;

contract HelloWorld {

string public greeting;

function HelloWorld(string _greeting){

greeting = _greeting;

}

function setGreeting(string _greeting){

greeting = _greeting;

}

function say() constant returns(string){

return greeting;

}

}
=> 메서드 선언

반환값을 돌려주는 메서드를 선언 할 수 있다.

반환값을 돌려주는 경우 returns의 괄호 안에

반환값의 데이터 형을 선언한다.

여기서 블록체인에 저장된 데이터의 변경을

수반하지 않는 경우 constant를 붙인다.
Smart Contract
이제 Transaction 을 해보자.
Smart Contract
이제 Transaction 을 해보자.
1 pending transaction
=> Transaction이 1개 대기중이라는 뜻이다.

터미널에서 geth를 통해서 mine중이기 때문에

조금만 기다리면 pending이 사라질 것 이다.
Smart Contract
이제 Transaction 을 해보자.
pending이 끝나면, 

해당 블록이 나타난다.

=> 하늘색 부분은 입력한 계약주소이다.

나중에 해당 계약 내용을 확인할 수 있다.
Smart Contract
Transaction 결과는?
greeting을 클릭하고, say를 클릭해보자.

앞서 우리가 설정했던 텍스트가 나올 것이다.
Smart Contract
계약내용 확인하기
하늘색 부분의 아이콘을 클릭해 주소를 복사해보자.
Smart Contract
기
방금 복사한 주소를 At Address에 추가하고,

At Address를 클릭해보자.

방금 우리가 만든 계약에 대한 블록이 나온다.

앞서 했던 greeting과 say를 클릭해서

동일한 내용이 나오는지 확인해보자.
Smart Contract
Remix를 통해 계약을 만들고 실행도 해보았다. 이번에는 기존에 작성한 계약에 대해
geth에서도 확인해보자.
기존 계약에 접근하기 위해서는 

ABI와 계약주소가 필요하다.

* ABI(Application Binary Interface)

계약의 외부 사양을 말한다. 계약에 포함되는 메
서드와 인수, 반환값에 대한 정보로 계약에 접근
할 때 필요한 정보 중 하나다.

따라서 빨간 상자의 저장 버튼을 클릭하자.

새로운 scenario.json 파일이 생긴다.
Smart Contract
방금 새로 추가한 son 파일을 열어 맨 밑으로 내리면. "abis"라는 key로 데이터가 있다.
해당 부분을 복사하자.
새로 터미널을 열어 JSON-RPC 서버에 접속하자.
[{"constant": false,"inputs": [{"name": "_greeting","type": "string"}],"name":
"setGreeting","outputs":
[],"payable":false,"type":"function","stateMutability":"nonpayable"},{"inputs":
[{"name": "_greeting","type": "string"}],"payable": false,"type":
"constructor","stateMutability":"nonpayable"},{"constant": true,"inputs":
[],"name": "greeting","outputs": [{"name":
"","type":"string"}],"payable":false,"type":"function","stateMutability":"view"},
{"constant":true,"inputs": [],"name": "say","outputs": [{"name": "","type":
"string"}],"payable": false,"type": "function","stateMutability": "view"}]
geth attach rpc:http://localhost:8545
Smart Contract
새로운 터미널에서 JSON-RPC 서버에 접속 한뒤,
방금 복사해온 abi 정보를 abi 변수에 담아 string으로 저장하자.
> abi = '[{"constant": false,"inputs": [{"name": "_greeting","type": "string"}],"name":
"setGreeting","outputs":
[],"payable":false,"type":"function","stateMutability":"nonpayable"},{"inputs":
[{"name": "_greeting","type": "string"}],"payable": false,"type":
"constructor","stateMutability":"nonpayable"},{"constant": true,"inputs": [],"name":
"greeting","outputs": [{"name":
"","type":"string"}],"payable":false,"type":"function","stateMutability":"view"},
{"constant":true,"inputs": [],"name": "say","outputs": [{"name": "","type":
"string"}],"payable": false,"type": "function","stateMutability": "view"}]'
그리고 방금 Transaction을 해서 생성된 계약주소 또한 변수에 담아두자.
> add_contract = "9fds98rj3v89cx8z09sd98qdasda"
이제 기존 계약에 접근하기 위한, 모든 준비가 끝이 났다.
> contract = eth.contract(JSON.parse(abi)).at(add_contract)
> contract.say.call()
"Hello World!"
Smart Contract
* 여기서 call()은 블록체인에서 데이터를 얻을 때 사용된다. 블록을 생성하지 않아도 되기 때문
에 수수료는 발생하지 않는다.
기존계약에 접근을 했다면, 터미널에서도 계약을 진행할 수 있다는 뜻이다.
계약 객체.메서드.sendTransaction(인수, {from: 보내는 주소, gas:가스양})
블록체인은 상태를 변화시키기 위해 사용한다. 여기서 '상태를 변화시킨다’라는 뜻은 새롭게 데
이터를 쓰거나 기존의 데이터를 변경하는 것을 말한다.
이더리움에서는 수수료(Gas)가 발생한다.
Smart Contract
How to Study?
Solidity를 좀 더 쉽게 배울 수 있다.
본인은 공식 문서 및 구글링을 통해서 Solidity를 공부했다. ERC-20 토큰 개발을 위해 공부했지
만, 막상 공부하기에는 쉽지는 않다.
그나마 레퍼런스가 타 언어에 비해 많은 편이기 때문에 공부하기에는 엄청 어렵지는 않지만,
구조적으로 조금 복잡한 감이 어느정도 있다. 따라서 다음 사이트에서 조금 더 배우기 쉽고
일부 코스는 한글로 되어있어 좀 더 배우기 쉬울 것 이다.
Solidity Study
https://cryptozombies.io/ko/course
이더리움 관련 레퍼런스를 찾던 중, 코드카데미 사이트 처럼 실시간 디버깅으로 스스로 공부할
수 있게 해두었다. 레슨 4까지는 한글로 되어있긴하지만, 그 이후에는 아직 번역이 완벽하게 되
어있지 않다. 기초적인 공부하기에는 충분하니, 적극적으로 이용하면 된다.
Solidity Study
레슨이 끝날 때 마다 크립토좀비가 업그레이드(?)된다.
업그레이드 하는 재미도 있고 Solidity도 공부할 수 있으니
이용하면 좋을 듯 하다.
–CodeMath
Let’s study blockchain!
Q/A

Más contenido relacionado

La actualidad más candente

이더리움의 현황, 한계점 및 개선노력
이더리움의 현황, 한계점 및 개선노력 이더리움의 현황, 한계점 및 개선노력
이더리움의 현황, 한계점 및 개선노력 Younghoon Moon
 
Blockchain 1st bitcoin_core
Blockchain 1st bitcoin_coreBlockchain 1st bitcoin_core
Blockchain 1st bitcoin_coreihpark92
 
Blockchain 3rd smart contract programming
Blockchain 3rd smart contract programmingBlockchain 3rd smart contract programming
Blockchain 3rd smart contract programmingihpark92
 
세션4. 예제로 배우는 스마트 컨트랙트 프로그래밍
세션4. 예제로 배우는 스마트 컨트랙트 프로그래밍세션4. 예제로 배우는 스마트 컨트랙트 프로그래밍
세션4. 예제로 배우는 스마트 컨트랙트 프로그래밍Jay JH Park
 
세션2. 이더리움 합의 알고리즘과 마이닝
세션2. 이더리움 합의 알고리즘과 마이닝세션2. 이더리움 합의 알고리즘과 마이닝
세션2. 이더리움 합의 알고리즘과 마이닝Jay JH Park
 
Block chain introduction slideshare
Block chain introduction   slideshareBlock chain introduction   slideshare
Block chain introduction slidesharewonyong hwang
 
Dapp시연 150214
Dapp시연 150214Dapp시연 150214
Dapp시연 150214Jihong Shim
 
Blockchain Study(2) - POW&POS
Blockchain Study(2) - POW&POSBlockchain Study(2) - POW&POS
Blockchain Study(2) - POW&POSFermat Jade
 
예제로 배우는 이더리움 결제구현 (거래소 지갑 구현 예시)
예제로 배우는 이더리움 결제구현 (거래소 지갑 구현 예시)예제로 배우는 이더리움 결제구현 (거래소 지갑 구현 예시)
예제로 배우는 이더리움 결제구현 (거래소 지갑 구현 예시)Colin Chae
 
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with ExceptionGCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception상현 조
 
Ethereum Basics Part 2
Ethereum Basics Part 2Ethereum Basics Part 2
Ethereum Basics Part 2Soobok Jin
 
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing SystemGCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System상현 조
 
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - PerfornanceGCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance상현 조
 
GCGC- CGCII 서버 엔진에 적용된 기술 (6) - CGCII Server Sample
GCGC- CGCII 서버 엔진에 적용된 기술 (6) - CGCII Server SampleGCGC- CGCII 서버 엔진에 적용된 기술 (6) - CGCII Server Sample
GCGC- CGCII 서버 엔진에 적용된 기술 (6) - CGCII Server Sample상현 조
 
GCGC- CGCII 서버 엔진에 적용된 기술 (8) - Group System
GCGC- CGCII 서버 엔진에 적용된 기술 (8) - Group SystemGCGC- CGCII 서버 엔진에 적용된 기술 (8) - Group System
GCGC- CGCII 서버 엔진에 적용된 기술 (8) - Group System상현 조
 
11_웹서비스활용
11_웹서비스활용11_웹서비스활용
11_웹서비스활용noerror
 
GCGC- CGCII 서버 엔진에 적용된 기술 (1)
GCGC- CGCII 서버 엔진에 적용된 기술 (1)GCGC- CGCII 서버 엔진에 적용된 기술 (1)
GCGC- CGCII 서버 엔진에 적용된 기술 (1)상현 조
 
Mastering ethereum(smart contract)
Mastering ethereum(smart contract)Mastering ethereum(smart contract)
Mastering ethereum(smart contract)제호 송
 
Startup JavaScript 9 - Socket.IO 실시간 통신
Startup JavaScript 9 - Socket.IO 실시간 통신Startup JavaScript 9 - Socket.IO 실시간 통신
Startup JavaScript 9 - Socket.IO 실시간 통신Circulus
 
Ethereum 스마트 컨트랙트 보안
Ethereum 스마트 컨트랙트 보안Ethereum 스마트 컨트랙트 보안
Ethereum 스마트 컨트랙트 보안TIMEGATE
 

La actualidad más candente (20)

이더리움의 현황, 한계점 및 개선노력
이더리움의 현황, 한계점 및 개선노력 이더리움의 현황, 한계점 및 개선노력
이더리움의 현황, 한계점 및 개선노력
 
Blockchain 1st bitcoin_core
Blockchain 1st bitcoin_coreBlockchain 1st bitcoin_core
Blockchain 1st bitcoin_core
 
Blockchain 3rd smart contract programming
Blockchain 3rd smart contract programmingBlockchain 3rd smart contract programming
Blockchain 3rd smart contract programming
 
세션4. 예제로 배우는 스마트 컨트랙트 프로그래밍
세션4. 예제로 배우는 스마트 컨트랙트 프로그래밍세션4. 예제로 배우는 스마트 컨트랙트 프로그래밍
세션4. 예제로 배우는 스마트 컨트랙트 프로그래밍
 
세션2. 이더리움 합의 알고리즘과 마이닝
세션2. 이더리움 합의 알고리즘과 마이닝세션2. 이더리움 합의 알고리즘과 마이닝
세션2. 이더리움 합의 알고리즘과 마이닝
 
Block chain introduction slideshare
Block chain introduction   slideshareBlock chain introduction   slideshare
Block chain introduction slideshare
 
Dapp시연 150214
Dapp시연 150214Dapp시연 150214
Dapp시연 150214
 
Blockchain Study(2) - POW&POS
Blockchain Study(2) - POW&POSBlockchain Study(2) - POW&POS
Blockchain Study(2) - POW&POS
 
예제로 배우는 이더리움 결제구현 (거래소 지갑 구현 예시)
예제로 배우는 이더리움 결제구현 (거래소 지갑 구현 예시)예제로 배우는 이더리움 결제구현 (거래소 지갑 구현 예시)
예제로 배우는 이더리움 결제구현 (거래소 지갑 구현 예시)
 
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with ExceptionGCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception
 
Ethereum Basics Part 2
Ethereum Basics Part 2Ethereum Basics Part 2
Ethereum Basics Part 2
 
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing SystemGCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System
 
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - PerfornanceGCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
 
GCGC- CGCII 서버 엔진에 적용된 기술 (6) - CGCII Server Sample
GCGC- CGCII 서버 엔진에 적용된 기술 (6) - CGCII Server SampleGCGC- CGCII 서버 엔진에 적용된 기술 (6) - CGCII Server Sample
GCGC- CGCII 서버 엔진에 적용된 기술 (6) - CGCII Server Sample
 
GCGC- CGCII 서버 엔진에 적용된 기술 (8) - Group System
GCGC- CGCII 서버 엔진에 적용된 기술 (8) - Group SystemGCGC- CGCII 서버 엔진에 적용된 기술 (8) - Group System
GCGC- CGCII 서버 엔진에 적용된 기술 (8) - Group System
 
11_웹서비스활용
11_웹서비스활용11_웹서비스활용
11_웹서비스활용
 
GCGC- CGCII 서버 엔진에 적용된 기술 (1)
GCGC- CGCII 서버 엔진에 적용된 기술 (1)GCGC- CGCII 서버 엔진에 적용된 기술 (1)
GCGC- CGCII 서버 엔진에 적용된 기술 (1)
 
Mastering ethereum(smart contract)
Mastering ethereum(smart contract)Mastering ethereum(smart contract)
Mastering ethereum(smart contract)
 
Startup JavaScript 9 - Socket.IO 실시간 통신
Startup JavaScript 9 - Socket.IO 실시간 통신Startup JavaScript 9 - Socket.IO 실시간 통신
Startup JavaScript 9 - Socket.IO 실시간 통신
 
Ethereum 스마트 컨트랙트 보안
Ethereum 스마트 컨트랙트 보안Ethereum 스마트 컨트랙트 보안
Ethereum 스마트 컨트랙트 보안
 

Similar a Blockchain Study(5) - Smart Contract(스마트 계약)

AWS 기반 블록체인 (2부) - 블록체인 서비스 개발하기 (김준형 & 박천구, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
AWS 기반 블록체인 (2부) - 블록체인 서비스 개발하기 (김준형 & 박천구, AWS 솔루션즈 아키텍트) :: AWS DevDay2018AWS 기반 블록체인 (2부) - 블록체인 서비스 개발하기 (김준형 & 박천구, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
AWS 기반 블록체인 (2부) - 블록체인 서비스 개발하기 (김준형 & 박천구, AWS 솔루션즈 아키텍트) :: AWS DevDay2018Amazon Web Services Korea
 
카사 공개세미나1회 W.E.L.C.
카사 공개세미나1회  W.E.L.C.카사 공개세미나1회  W.E.L.C.
카사 공개세미나1회 W.E.L.C.Ryan Park
 
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기Kiyoung Moon
 
Tech Update - The Future of .NET Framework (김명신 부장)
Tech Update - The Future of .NET Framework (김명신 부장)Tech Update - The Future of .NET Framework (김명신 부장)
Tech Update - The Future of .NET Framework (김명신 부장)Eunbee Song
 
안드로이드 개발자를 위한 스위프트
안드로이드 개발자를 위한 스위프트안드로이드 개발자를 위한 스위프트
안드로이드 개발자를 위한 스위프트병한 유
 
Python으로 채팅 구현하기
Python으로 채팅 구현하기Python으로 채팅 구현하기
Python으로 채팅 구현하기Tae Young Lee
 
구글 기술을 이용한 모바일 클라우드 애플리케이션 개발
 구글 기술을 이용한 모바일 클라우드 애플리케이션 개발 구글 기술을 이용한 모바일 클라우드 애플리케이션 개발
구글 기술을 이용한 모바일 클라우드 애플리케이션 개발LGU+
 
[Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)
[Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)[Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)
[Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)Sang Don Kim
 
About Visual C++ 10
About  Visual C++ 10About  Visual C++ 10
About Visual C++ 10흥배 최
 
이더리움 스마트계약 보안지침 가이드 2. 솔리디티 권고안
이더리움 스마트계약 보안지침 가이드 2. 솔리디티 권고안이더리움 스마트계약 보안지침 가이드 2. 솔리디티 권고안
이더리움 스마트계약 보안지침 가이드 2. 솔리디티 권고안상욱 송
 
Create-React-App으로 SSR을 구현하며 배운 점 (feat. TypeScript)
Create-React-App으로 SSR을 구현하며 배운 점 (feat. TypeScript)Create-React-App으로 SSR을 구현하며 배운 점 (feat. TypeScript)
Create-React-App으로 SSR을 구현하며 배운 점 (feat. TypeScript)LanarkSeung
 
[2017 Gaming on AWS] GameLift를 통한 실전 DevOps: 세션형 멀티플레이어 게임의 구현부터 운영까지 Step by...
[2017 Gaming on AWS] GameLift를 통한 실전 DevOps: 세션형 멀티플레이어 게임의 구현부터 운영까지 Step by...[2017 Gaming on AWS] GameLift를 통한 실전 DevOps: 세션형 멀티플레이어 게임의 구현부터 운영까지 Step by...
[2017 Gaming on AWS] GameLift를 통한 실전 DevOps: 세션형 멀티플레이어 게임의 구현부터 운영까지 Step by...Amazon Web Services Korea
 
20201121 코드 삼분지계
20201121 코드 삼분지계20201121 코드 삼분지계
20201121 코드 삼분지계Chiwon Song
 
파이썬+네트워크 20160210
파이썬+네트워크 20160210파이썬+네트워크 20160210
파이썬+네트워크 20160210Yong Joon Moon
 
Klaytn Developer Meetup_20191022
Klaytn Developer Meetup_20191022Klaytn Developer Meetup_20191022
Klaytn Developer Meetup_20191022Klaytn
 
Tensorflow service & Machine Learning
Tensorflow service & Machine LearningTensorflow service & Machine Learning
Tensorflow service & Machine LearningJEEHYUN PAIK
 
안드로이드 개발자에 필요한 오픈소스이야기
안드로이드 개발자에 필요한 오픈소스이야기안드로이드 개발자에 필요한 오픈소스이야기
안드로이드 개발자에 필요한 오픈소스이야기YoungSu Son
 
C#을 사용한 빠른 툴 개발
C#을 사용한 빠른 툴 개발C#을 사용한 빠른 툴 개발
C#을 사용한 빠른 툴 개발흥배 최
 
코틀린 멀티플랫폼, 미지와의 조우
코틀린 멀티플랫폼, 미지와의 조우코틀린 멀티플랫폼, 미지와의 조우
코틀린 멀티플랫폼, 미지와의 조우Arawn Park
 
파이썬 웹 프로그래밍 2탄
파이썬 웹 프로그래밍 2탄 파이썬 웹 프로그래밍 2탄
파이썬 웹 프로그래밍 2탄 SeongHyun Ahn
 

Similar a Blockchain Study(5) - Smart Contract(스마트 계약) (20)

AWS 기반 블록체인 (2부) - 블록체인 서비스 개발하기 (김준형 & 박천구, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
AWS 기반 블록체인 (2부) - 블록체인 서비스 개발하기 (김준형 & 박천구, AWS 솔루션즈 아키텍트) :: AWS DevDay2018AWS 기반 블록체인 (2부) - 블록체인 서비스 개발하기 (김준형 & 박천구, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
AWS 기반 블록체인 (2부) - 블록체인 서비스 개발하기 (김준형 & 박천구, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
 
카사 공개세미나1회 W.E.L.C.
카사 공개세미나1회  W.E.L.C.카사 공개세미나1회  W.E.L.C.
카사 공개세미나1회 W.E.L.C.
 
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기
 
Tech Update - The Future of .NET Framework (김명신 부장)
Tech Update - The Future of .NET Framework (김명신 부장)Tech Update - The Future of .NET Framework (김명신 부장)
Tech Update - The Future of .NET Framework (김명신 부장)
 
안드로이드 개발자를 위한 스위프트
안드로이드 개발자를 위한 스위프트안드로이드 개발자를 위한 스위프트
안드로이드 개발자를 위한 스위프트
 
Python으로 채팅 구현하기
Python으로 채팅 구현하기Python으로 채팅 구현하기
Python으로 채팅 구현하기
 
구글 기술을 이용한 모바일 클라우드 애플리케이션 개발
 구글 기술을 이용한 모바일 클라우드 애플리케이션 개발 구글 기술을 이용한 모바일 클라우드 애플리케이션 개발
구글 기술을 이용한 모바일 클라우드 애플리케이션 개발
 
[Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)
[Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)[Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)
[Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)
 
About Visual C++ 10
About  Visual C++ 10About  Visual C++ 10
About Visual C++ 10
 
이더리움 스마트계약 보안지침 가이드 2. 솔리디티 권고안
이더리움 스마트계약 보안지침 가이드 2. 솔리디티 권고안이더리움 스마트계약 보안지침 가이드 2. 솔리디티 권고안
이더리움 스마트계약 보안지침 가이드 2. 솔리디티 권고안
 
Create-React-App으로 SSR을 구현하며 배운 점 (feat. TypeScript)
Create-React-App으로 SSR을 구현하며 배운 점 (feat. TypeScript)Create-React-App으로 SSR을 구현하며 배운 점 (feat. TypeScript)
Create-React-App으로 SSR을 구현하며 배운 점 (feat. TypeScript)
 
[2017 Gaming on AWS] GameLift를 통한 실전 DevOps: 세션형 멀티플레이어 게임의 구현부터 운영까지 Step by...
[2017 Gaming on AWS] GameLift를 통한 실전 DevOps: 세션형 멀티플레이어 게임의 구현부터 운영까지 Step by...[2017 Gaming on AWS] GameLift를 통한 실전 DevOps: 세션형 멀티플레이어 게임의 구현부터 운영까지 Step by...
[2017 Gaming on AWS] GameLift를 통한 실전 DevOps: 세션형 멀티플레이어 게임의 구현부터 운영까지 Step by...
 
20201121 코드 삼분지계
20201121 코드 삼분지계20201121 코드 삼분지계
20201121 코드 삼분지계
 
파이썬+네트워크 20160210
파이썬+네트워크 20160210파이썬+네트워크 20160210
파이썬+네트워크 20160210
 
Klaytn Developer Meetup_20191022
Klaytn Developer Meetup_20191022Klaytn Developer Meetup_20191022
Klaytn Developer Meetup_20191022
 
Tensorflow service & Machine Learning
Tensorflow service & Machine LearningTensorflow service & Machine Learning
Tensorflow service & Machine Learning
 
안드로이드 개발자에 필요한 오픈소스이야기
안드로이드 개발자에 필요한 오픈소스이야기안드로이드 개발자에 필요한 오픈소스이야기
안드로이드 개발자에 필요한 오픈소스이야기
 
C#을 사용한 빠른 툴 개발
C#을 사용한 빠른 툴 개발C#을 사용한 빠른 툴 개발
C#을 사용한 빠른 툴 개발
 
코틀린 멀티플랫폼, 미지와의 조우
코틀린 멀티플랫폼, 미지와의 조우코틀린 멀티플랫폼, 미지와의 조우
코틀린 멀티플랫폼, 미지와의 조우
 
파이썬 웹 프로그래밍 2탄
파이썬 웹 프로그래밍 2탄 파이썬 웹 프로그래밍 2탄
파이썬 웹 프로그래밍 2탄
 

Blockchain Study(5) - Smart Contract(스마트 계약)

  • 2. - Index - 1. Remix-Solidity IDE 2. How to Study 3. Q/A
  • 4. Remix-Solidity IDE 기존 IDE에서 사용가능한 플러그인 부터 브라우저를 기반으로 별도의 설치가 필요없는 개발 환 경이 나왔다. 그중에서 우리는 별도 설치가 필요없는 브라우저 기반을 사용할 것이다. * Browser-Solidity(Remix)
 Browser-Solidity는 Solidiy 언어 Contributor가 개발한 웹 브라우저 기반 IDE이다. * Ethereum Studio
 리눅스의 이더리움 클라이언트 쉘 접속 가능, cloud9 기반 웹 IDE. * Intellij-Solidity
 인텔리J IDE의 플러그인. * VS Code Ethereum Solidity Extension
 VS code 용 플러그인 * Vim Solidity
 구문 강조를 지원하는 Vim 에디터 플러그인.
  • 5. Remix-Solidity IDE 크롬 및 파이어폭스 브라우저를 사용하는 것을 권한다. Remix 주소는 https://remix.ethereum.org/ 이다. 처음 나오는 ballot.sol 파일이 표시될텐데, 닫아도 상관없다.
  • 6. Smart Contract 우선 왼쪽 메뉴 browser 에 새로운 파일을 만든다. 프로그래밍의 대명사 "helloworld.sol". 그리고 해당 파일에 다음 코드를 작성한다. pragma solidity ^0.4.8; contract HelloWorld { string public greeting; function HelloWorld(string _greeting){ greeting = _greeting; } function setGreeting(string _greeting){ greeting = _greeting; } function say() constant returns(string){ return greeting; } }
  • 7. Smart Contract 그동안 콘솔(CMD)에서 만들었던 네트워크와 solidity 언어 버전을 설정해야한다. 따라서 1시 방향 "Settings"에 들어간다. Solidity Version 에서 컴파일 버전을 0.4.8 버전으로 고친다.
  • 8. Smart Contract 이제 Run 탭에 들어가서 Environment 에 들어가서, 우리가 만든 네트워크를 연결한다. 처음에는 Javascript VM 이라고 되어있는데, 이부분을 Web3 Provider로 변경한다. 그러면 alert창이 뜨는데 Ok를 누르면, Web3 Provider Endpoint를 작성하는 부분이 있다. 이제 콘솔을 열어서 실제 Endpoint에 해당하는 localhost를 열어줘야한다. 기존에 geth를 통해서 JSON-RPC에 접속했듯이 작업을 하면 된다. geth --networkid 4649 --nodiscover --maxpeers 0 --datadir /PATH_TO/ test_data --mine --minerthreads 1 --rpc --rpcaddr "0.0.0.0" --rpcport 8545 --rpccorsdomain "*" --rpcapi "admin,db,eth,debug,miner,net,shh,txpool,personal,web3" --unlock 0 2>> /PATH_TO/test_data/geth.log
  • 9. Smart Contract 이전과 조금 다른 모양이 나온다. 왜냐하면, 명령어 중에 unlock 0 이라는 부분이 추가되었다. 이 부분은 시작 시, 보안 잠금을 해제한다는 뜻이다. 즉 eth.accounts[0] 의 잠금을 해제한다는 뜻으로 해석하면 된다. 잠금 해제하려면 해당 계정의 비밀번호를 입력하자. 물론 여러개의 계정을 잠금해제하려면, unlock 0,1,2,3 이런식으로 작성해주면 된다. 아무런 오류가 발생하지 않았다면, 다시 Remix로 돌아와서 연결해보자. 오류가 발생하는 경우가 있으니 천천히 진행한다.
  • 10. Smart Contract 잘 연결이 되었다면, 다음과 같은 화면이 표시된다. Environment 상에서는 Web3 Provider로 연결되어있고, 만들었던 계정들이 보일 것이다. 이제 본격적으로 스마트 계약을 위한 solidity를 공부해보자.
  • 11. Smart Contract 앞서 작성한 코드들을 한 줄씩 살펴보자. pragma solidity ^0.4.8; contract HelloWorld { string public greeting; function HelloWorld(string _greeting){ greeting = _greeting; } function setGreeting(string _greeting){ greeting = _greeting; } function say() constant returns(string){ return greeting; } } => 버전 프라그마 컴파일러의 버전을 지정한다.
  • 12. Smart Contract 앞서 작성한 코드들을 한 줄씩 살펴보자. pragma solidity ^0.4.8; contract HelloWorld { string public greeting; function HelloWorld(string _greeting){ greeting = _greeting; } function setGreeting(string _greeting){ greeting = _greeting; } function say() constant returns(string){ return greeting; } } => 계약 선언 contract로 계약을 선언한다. (자바의 클래스와 매우 비슷하다.)
  • 13. Smart Contract 앞서 작성한 코드들을 한 줄씩 살펴보자. pragma solidity ^0.4.8; contract HelloWorld { string public greeting; function HelloWorld(string _greeting){ greeting = _greeting; } function setGreeting(string _greeting){ greeting = _greeting; } function say() constant returns(string){ return greeting; } } => 계약 내부에서 유효한 변수를 선언한다. 여기서 public으로 선언 된 부분은, 해당 계약에 접근가능한 모든 사람이 볼 수 있다는 뜻이다. 물론 임의로 변경은 불가능하다.
  • 14. Smart Contract 앞서 작성한 코드들을 한 줄씩 살펴보자. pragma solidity ^0.4.8; contract HelloWorld { string public greeting; function HelloWorld(string _greeting){ greeting = _greeting; } function setGreeting(string _greeting){ greeting = _greeting; } function say() constant returns(string){ return greeting; } } => 생성자 function으로 메서드를 만든다. 보통 생성자는 계약과 같은 이름을 가진 메서드로, 배포할 때만 실행가능한 메서드이다. 여기서 인자로 string 타입의 _greeting을 받는다. Solidity에서는 관례적으로 메서드의 인수 샆에 언더 바 _ 를 붙인다.
  • 15. Smart Contract 앞서 작성한 코드들을 한 줄씩 살펴보자. pragma solidity ^0.4.8; contract HelloWorld { string public greeting; function HelloWorld(string _greeting){ greeting = _greeting; } function setGreeting(string _greeting){ greeting = _greeting; } function say() constant returns(string){ return greeting; } } => 메서드 선언 반환값을 돌려주는 메서드를 선언 할 수 있다. 반환값을 돌려주는 경우 returns의 괄호 안에 반환값의 데이터 형을 선언한다. 여기서 블록체인에 저장된 데이터의 변경을 수반하지 않는 경우 constant를 붙인다.
  • 17. Smart Contract 이제 Transaction 을 해보자. 1 pending transaction => Transaction이 1개 대기중이라는 뜻이다. 터미널에서 geth를 통해서 mine중이기 때문에 조금만 기다리면 pending이 사라질 것 이다.
  • 18. Smart Contract 이제 Transaction 을 해보자. pending이 끝나면, 해당 블록이 나타난다. => 하늘색 부분은 입력한 계약주소이다. 나중에 해당 계약 내용을 확인할 수 있다.
  • 19. Smart Contract Transaction 결과는? greeting을 클릭하고, say를 클릭해보자. 앞서 우리가 설정했던 텍스트가 나올 것이다.
  • 20. Smart Contract 계약내용 확인하기 하늘색 부분의 아이콘을 클릭해 주소를 복사해보자.
  • 21. Smart Contract 기 방금 복사한 주소를 At Address에 추가하고, At Address를 클릭해보자. 방금 우리가 만든 계약에 대한 블록이 나온다. 앞서 했던 greeting과 say를 클릭해서 동일한 내용이 나오는지 확인해보자.
  • 22. Smart Contract Remix를 통해 계약을 만들고 실행도 해보았다. 이번에는 기존에 작성한 계약에 대해 geth에서도 확인해보자. 기존 계약에 접근하기 위해서는 ABI와 계약주소가 필요하다. * ABI(Application Binary Interface)
 계약의 외부 사양을 말한다. 계약에 포함되는 메 서드와 인수, 반환값에 대한 정보로 계약에 접근 할 때 필요한 정보 중 하나다.
 따라서 빨간 상자의 저장 버튼을 클릭하자. 새로운 scenario.json 파일이 생긴다.
  • 23. Smart Contract 방금 새로 추가한 son 파일을 열어 맨 밑으로 내리면. "abis"라는 key로 데이터가 있다. 해당 부분을 복사하자. 새로 터미널을 열어 JSON-RPC 서버에 접속하자. [{"constant": false,"inputs": [{"name": "_greeting","type": "string"}],"name": "setGreeting","outputs": [],"payable":false,"type":"function","stateMutability":"nonpayable"},{"inputs": [{"name": "_greeting","type": "string"}],"payable": false,"type": "constructor","stateMutability":"nonpayable"},{"constant": true,"inputs": [],"name": "greeting","outputs": [{"name": "","type":"string"}],"payable":false,"type":"function","stateMutability":"view"}, {"constant":true,"inputs": [],"name": "say","outputs": [{"name": "","type": "string"}],"payable": false,"type": "function","stateMutability": "view"}] geth attach rpc:http://localhost:8545
  • 24. Smart Contract 새로운 터미널에서 JSON-RPC 서버에 접속 한뒤, 방금 복사해온 abi 정보를 abi 변수에 담아 string으로 저장하자. > abi = '[{"constant": false,"inputs": [{"name": "_greeting","type": "string"}],"name": "setGreeting","outputs": [],"payable":false,"type":"function","stateMutability":"nonpayable"},{"inputs": [{"name": "_greeting","type": "string"}],"payable": false,"type": "constructor","stateMutability":"nonpayable"},{"constant": true,"inputs": [],"name": "greeting","outputs": [{"name": "","type":"string"}],"payable":false,"type":"function","stateMutability":"view"}, {"constant":true,"inputs": [],"name": "say","outputs": [{"name": "","type": "string"}],"payable": false,"type": "function","stateMutability": "view"}]'
  • 25. 그리고 방금 Transaction을 해서 생성된 계약주소 또한 변수에 담아두자. > add_contract = "9fds98rj3v89cx8z09sd98qdasda" 이제 기존 계약에 접근하기 위한, 모든 준비가 끝이 났다. > contract = eth.contract(JSON.parse(abi)).at(add_contract) > contract.say.call() "Hello World!" Smart Contract * 여기서 call()은 블록체인에서 데이터를 얻을 때 사용된다. 블록을 생성하지 않아도 되기 때문 에 수수료는 발생하지 않는다.
  • 26. 기존계약에 접근을 했다면, 터미널에서도 계약을 진행할 수 있다는 뜻이다. 계약 객체.메서드.sendTransaction(인수, {from: 보내는 주소, gas:가스양}) 블록체인은 상태를 변화시키기 위해 사용한다. 여기서 '상태를 변화시킨다’라는 뜻은 새롭게 데 이터를 쓰거나 기존의 데이터를 변경하는 것을 말한다. 이더리움에서는 수수료(Gas)가 발생한다. Smart Contract
  • 28. Solidity를 좀 더 쉽게 배울 수 있다. 본인은 공식 문서 및 구글링을 통해서 Solidity를 공부했다. ERC-20 토큰 개발을 위해 공부했지 만, 막상 공부하기에는 쉽지는 않다. 그나마 레퍼런스가 타 언어에 비해 많은 편이기 때문에 공부하기에는 엄청 어렵지는 않지만, 구조적으로 조금 복잡한 감이 어느정도 있다. 따라서 다음 사이트에서 조금 더 배우기 쉽고 일부 코스는 한글로 되어있어 좀 더 배우기 쉬울 것 이다. Solidity Study https://cryptozombies.io/ko/course
  • 29. 이더리움 관련 레퍼런스를 찾던 중, 코드카데미 사이트 처럼 실시간 디버깅으로 스스로 공부할 수 있게 해두었다. 레슨 4까지는 한글로 되어있긴하지만, 그 이후에는 아직 번역이 완벽하게 되 어있지 않다. 기초적인 공부하기에는 충분하니, 적극적으로 이용하면 된다. Solidity Study 레슨이 끝날 때 마다 크립토좀비가 업그레이드(?)된다. 업그레이드 하는 재미도 있고 Solidity도 공부할 수 있으니 이용하면 좋을 듯 하다.