SlideShare a Scribd company logo
1 of 24
Download to read offline
web3.js와 node.js를 사용한
dApp 개발
김재욱
cmdhema@gmail.com
목차
• web3.js, truffle
• dApp 구조 및 구현과정
• 주요 함수 소개
• 시연
web3.js & truffle
• Ethereum Compatible JavaScript API
• Ethereum 의 JavaScript API 이다. 내부적으로는 JSON RPC 를 통해 eth / geth 와 통신한다.
• Geth/Eth 의 Javascript Console 이나 브라우져, Node.js runtime 에서 사용할 수 있는 API 이다.
• Web3.js는 abi(Application Binary Interface)로 EVM과 통신한다.
• truffle은 solidity로 작성된 Smart Contract 소스 코드를 컴파일하고 테스트하고 이더리움 네트워크에
배포할 수 있도록 하는 Contract 개발 framework이다.
dAPP 구조
dAPP 구현 과정
Smart Contract 설계 Smart Contract 구현 Smart Contract Compile
dApp 구조 설계 dApp 구현
Contract call 설계
기타 packages send transaction
get transaction
event watch
contract address
abi
Contract, web3 연동
dApp 구현
Set Get
블록체인에 데이터를 기록하는 것 블록체인의 데이터를 가져오는 것
Transaction을 보낸다. Transaction 발생 X
Value(eth), Gas 필요 Value, Gas 필요하지 않다.
Hex string 값으로 저장한다. Hex string 값을 읽어온다.
Transaction이 Mining되었다는
callback 함수를 지원하지 않는다.
get 함수를 호출하면 callback 함수로
데이터를 받아올 수 있다.
전송한 Transaction이 Mining되었나
를 확인하는 코드 작성 필요한다.
callback 함수로 데이터를 바로 받아
온다.
복잡하거나 큰 데이터 등을 저장하기 위해서는 swarm과 같은 p2p 스토리지
를 사용하는 것이 좋다.
Contract call 함수의 두 종류
dApp 구현
abi로 Contract와 web3 연동
1. deploy할 Contract import
2. contract compile
truffle compile
3. contract deploy
truffle deploy
4. abi를 포함한 json 파일 자동 생성
5. json 파일에서 Contract의 address 확인
6. json 파일 import 후 abi 필드 추출
7. web3 함수 호출
2,3. truffle migrate
Solidity web3
dApp 구현
abi로 Contract와 web3 연동
deploy할 contract sol 파일을 import 하고 deploy 한다.
deploy 함수의 두번째 인자부터는 Contract의 생성자이다.
dApp 구현
abi로 Contract와 web3 연동
truffle compile 수행 후 sol과
json 파일 1:1 생성 후
truffle deploy
deploy 한 Contract의 json 파일 마다 networks의 address
필드 생성. 이 address가 contract의 주소이다.
dApp 구현
abi로 Contract와 web3 연동
truffle compile에서 생성된 json 파일을 불러오고 abi 필드 추출
abi 필드와 contract address 주소로 contract를 호출한다.
dApp 구현
send transaction
Contract set call
send transaction to
EVM
web3 Contract
function call
interface
transaction Id
is mining done?
return transaction data
dApp 구현
send transaction
함수명 web3.eth.sendTransaction(transactionObject [, callback])
주요 파라미터
from 보내는 wallet의 주소
to 받는 wallet의 주소
value 보낼 이더의 양(hex)
gas 지불할 가스의 양(hex)
리턴 32Byte의 hex값, Transaction의 Id
dApp 구현
send transaction
트랜잭션이 정상적으로 기록됐는지 확인하기 위해서 res로 받은 Transaction Id로
getTransaction 함수를 호출한다.
dApp 구현
get transaction
함수명 web3.eth.getTransaction(transactionId [, callback])
주요 파라미터
transactionId sendTransaction으로 받은 Transaction Id
리턴 트랜잭션의 정보를 담은 객체
dApp 구현
get transaction
•getTransaction의 결과가 null 이면 해당 트랜잭션이 mining이 되지 않다는 뜻이다.
•로직상 mining이 되고 진행되어야할 부분이 있으면 timer를 실행하여 주기적으로 트랜잭션이
mining이 되었는지 확인해야한다.
•따라서 getTransaction 함수를 x초 단위로 호출하여 null이 아니면 다음 로직이 실행되도록
코딩한다.
dApp 구현
get transaction
트랜잭션이 정상적으로 기록됐는지 확인하기 위해서 res로 받은 Transaction Id로
getTransaction 함수를 호출한다. 마이닝이 됐으면 getTransaction 결과는 null이 아니다.
dApp 구현
get transaction receipt
함수명 web3.eth.getTransactionReceipt(hashString [, callback])
주요 파라미터
transactionId sendTransaction으로 받은 Transaction Id
리턴 트랜잭션의 Receipt 정보를 담은 객체
dApp 구현
get transaction receipt
dApp 구현
get transaction receipt
•Contract에서 sendTransaction의 결과를 콜백함수로 받을수 있는 방법은 없다.
•getTransactionReceipt에서 logs의 data 필드는 setTransaction의 결과 값이 저장이 된다.
•data 필드를 파싱하면 sendTransaction의 결과 값을 얻어 올 수 있다.
dApp 구현
get transaction receipt
•Transfer를 호출한 결과가 logs에 기록된다.
•msg.sender =>
00000000000000000000000064e45fa2c1d5c55f
48790cad0ae036f073a97353
•_to =>
000000000000000000000000517fb91985925bf8
e3c3da3826fe733b467bc953
•value =>
000000000000000000000000000000000000000
00000000000000000000001f4
data:
'0x00000000000000000000000064e45fa2c1d5c55f48790cad0ae036f073a97353000000000000000000000000517fb91
985925bf8e3c3da3826fe733b467bc95300000000000000000000000000000000000000000000000000000000000001f4
',
dApp 구현
Event Filter
•Contract에서 event 형으로 선언한 함수가 호출되면 EVM에서 Event가 발생한다.
•event 형으로 선언한 함수는 전부 호출을 감지할 수 있다. 이를 콜백처럼 활용 가능하다.
dApp 구현
•세션4의 CrowdSale 예제를 node.js + truffle + solidity로 구현한 dApp을 시연
• node.js : v8.9.0
• npm web3.js : 0.18.0
• truffle : 4.0.1
• solidity 0.4.16
• os : mac os
• blockchain : ethereumjs/testrpc
dApp 구현
Conclusion
• HTTP Rest API를 설계할 때 처럼 Solidity – web3를 잘 설계하는게 중요하다.
• 저장할 수 있는 hex string 문자열이 제한되어있으므로 저장할 데이터를 적절하게 설계한다.
• 여러 정보가 들어있는 긴 hex string이 저장될 수 있으므로 길이를 잘 계산해서 파싱해야한다.
• 문서화는 필수! Solidity의 파라미터 타입, 리턴 타입, 리턴 문자열 종류 등을 잘 명시해야한다.
JSON과 같은 형태로 리턴할수 없으므로 HTTP Rest API 설계 문서 작성할때 보다 더 꼼꼼하고 정확한
문서 작성이 필요하다.
• 테스트코드를 작성하자.
Q&A

More Related Content

What's hot

전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012devCAT Studio, NEXON
 
테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템QooJuice
 
모션 매칭이란 무엇인가.pptx
모션 매칭이란 무엇인가.pptx모션 매칭이란 무엇인가.pptx
모션 매칭이란 무엇인가.pptxsung suk seo
 
딥러닝을 이용한 얼굴 인식
딥러닝을 이용한 얼굴 인식딥러닝을 이용한 얼굴 인식
딥러닝을 이용한 얼굴 인식if kakao
 
TERA Server Architecture
TERA Server ArchitectureTERA Server Architecture
TERA Server Architectureujentus
 
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018devCAT Studio, NEXON
 
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들Chris Ohk
 
C++20에서 리플렉션 기능 구현
C++20에서 리플렉션 기능 구현C++20에서 리플렉션 기능 구현
C++20에서 리플렉션 기능 구현Bongseok Cho
 
Essential Scala 第4章 トレイトによるデータモデリング
Essential Scala 第4章 トレイトによるデータモデリングEssential Scala 第4章 トレイトによるデータモデリング
Essential Scala 第4章 トレイトによるデータモデリングTakuya Tsuchida
 
서버와 클라이언트 같은 엔진 사용하기
서버와 클라이언트 같은 엔진 사용하기서버와 클라이언트 같은 엔진 사용하기
서버와 클라이언트 같은 엔진 사용하기YEONG-CHEON YOU
 
NDC2012 - 완벽한 MMO 클라이언트 설계에의 도전, Part2
NDC2012 - 완벽한 MMO 클라이언트 설계에의 도전, Part2NDC2012 - 완벽한 MMO 클라이언트 설계에의 도전, Part2
NDC2012 - 완벽한 MMO 클라이언트 설계에의 도전, Part2Jubok Kim
 
소프트웨어 부트캠프 설계 및 운영사례(42Seoul)
소프트웨어 부트캠프 설계 및 운영사례(42Seoul)소프트웨어 부트캠프 설계 및 운영사례(42Seoul)
소프트웨어 부트캠프 설계 및 운영사례(42Seoul)수보 김
 
실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략YEONG-CHEON YOU
 
KGC2010 김주복, 김충효 - M2 프로젝트의 절차적 리깅 시스템
KGC2010   김주복, 김충효 - M2 프로젝트의 절차적 리깅 시스템KGC2010   김주복, 김충효 - M2 프로젝트의 절차적 리깅 시스템
KGC2010 김주복, 김충효 - M2 프로젝트의 절차적 리깅 시스템Jubok Kim
 
NDC 2013, 마비노기 영웅전 개발 테크니컬 포스트-모템
NDC 2013, 마비노기 영웅전 개발 테크니컬 포스트-모템NDC 2013, 마비노기 영웅전 개발 테크니컬 포스트-모템
NDC 2013, 마비노기 영웅전 개발 테크니컬 포스트-모템tcaesvk
 
​『함수형 반응형 프로그래밍』 맛보기
​『함수형 반응형 프로그래밍』 맛보기​『함수형 반응형 프로그래밍』 맛보기
​『함수형 반응형 프로그래밍』 맛보기복연 이
 
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019devCAT Studio, NEXON
 
LockFree Algorithm
LockFree AlgorithmLockFree Algorithm
LockFree AlgorithmMerry Merry
 
데이터를 얻으려는 노오오력
데이터를 얻으려는 노오오력데이터를 얻으려는 노오오력
데이터를 얻으려는 노오오력Youngjae Kim
 
게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPU게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPUYEONG-CHEON YOU
 

What's hot (20)

전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
 
테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템
 
모션 매칭이란 무엇인가.pptx
모션 매칭이란 무엇인가.pptx모션 매칭이란 무엇인가.pptx
모션 매칭이란 무엇인가.pptx
 
딥러닝을 이용한 얼굴 인식
딥러닝을 이용한 얼굴 인식딥러닝을 이용한 얼굴 인식
딥러닝을 이용한 얼굴 인식
 
TERA Server Architecture
TERA Server ArchitectureTERA Server Architecture
TERA Server Architecture
 
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
 
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
 
C++20에서 리플렉션 기능 구현
C++20에서 리플렉션 기능 구현C++20에서 리플렉션 기능 구현
C++20에서 리플렉션 기능 구현
 
Essential Scala 第4章 トレイトによるデータモデリング
Essential Scala 第4章 トレイトによるデータモデリングEssential Scala 第4章 トレイトによるデータモデリング
Essential Scala 第4章 トレイトによるデータモデリング
 
서버와 클라이언트 같은 엔진 사용하기
서버와 클라이언트 같은 엔진 사용하기서버와 클라이언트 같은 엔진 사용하기
서버와 클라이언트 같은 엔진 사용하기
 
NDC2012 - 완벽한 MMO 클라이언트 설계에의 도전, Part2
NDC2012 - 완벽한 MMO 클라이언트 설계에의 도전, Part2NDC2012 - 완벽한 MMO 클라이언트 설계에의 도전, Part2
NDC2012 - 완벽한 MMO 클라이언트 설계에의 도전, Part2
 
소프트웨어 부트캠프 설계 및 운영사례(42Seoul)
소프트웨어 부트캠프 설계 및 운영사례(42Seoul)소프트웨어 부트캠프 설계 및 운영사례(42Seoul)
소프트웨어 부트캠프 설계 및 운영사례(42Seoul)
 
실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략
 
KGC2010 김주복, 김충효 - M2 프로젝트의 절차적 리깅 시스템
KGC2010   김주복, 김충효 - M2 프로젝트의 절차적 리깅 시스템KGC2010   김주복, 김충효 - M2 프로젝트의 절차적 리깅 시스템
KGC2010 김주복, 김충효 - M2 프로젝트의 절차적 리깅 시스템
 
NDC 2013, 마비노기 영웅전 개발 테크니컬 포스트-모템
NDC 2013, 마비노기 영웅전 개발 테크니컬 포스트-모템NDC 2013, 마비노기 영웅전 개발 테크니컬 포스트-모템
NDC 2013, 마비노기 영웅전 개발 테크니컬 포스트-모템
 
​『함수형 반응형 프로그래밍』 맛보기
​『함수형 반응형 프로그래밍』 맛보기​『함수형 반응형 프로그래밍』 맛보기
​『함수형 반응형 프로그래밍』 맛보기
 
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
 
LockFree Algorithm
LockFree AlgorithmLockFree Algorithm
LockFree Algorithm
 
데이터를 얻으려는 노오오력
데이터를 얻으려는 노오오력데이터를 얻으려는 노오오력
데이터를 얻으려는 노오오력
 
게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPU게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPU
 

Viewers also liked

세션4. 예제로 배우는 스마트 컨트랙트 프로그래밍
세션4. 예제로 배우는 스마트 컨트랙트 프로그래밍세션4. 예제로 배우는 스마트 컨트랙트 프로그래밍
세션4. 예제로 배우는 스마트 컨트랙트 프로그래밍Jay JH Park
 
세션2. 이더리움 합의 알고리즘과 마이닝
세션2. 이더리움 합의 알고리즘과 마이닝세션2. 이더리움 합의 알고리즘과 마이닝
세션2. 이더리움 합의 알고리즘과 마이닝Jay JH Park
 
세션1. block chain as a platform
세션1. block chain as a platform세션1. block chain as a platform
세션1. block chain as a platformJay JH Park
 
세션3. geth 클라이언트 실습 및 모니터링과 시각화
세션3. geth 클라이언트 실습 및 모니터링과 시각화세션3. geth 클라이언트 실습 및 모니터링과 시각화
세션3. geth 클라이언트 실습 및 모니터링과 시각화Jay JH Park
 
코어 이더리움
코어 이더리움 코어 이더리움
코어 이더리움 Jay JH Park
 
java 8 람다식 소개와 의미 고찰
java 8 람다식 소개와 의미 고찰java 8 람다식 소개와 의미 고찰
java 8 람다식 소개와 의미 고찰Sungchul Park
 
Bitcoin 2.0(blockchain technology 2)
Bitcoin 2.0(blockchain technology 2)Bitcoin 2.0(blockchain technology 2)
Bitcoin 2.0(blockchain technology 2)Wooseung Kim
 
Tdd live spring camp 2013
Tdd live spring camp 2013Tdd live spring camp 2013
Tdd live spring camp 2013beom kyun choi
 
간단 Ip 필터 구현 이야기
간단 Ip 필터 구현 이야기간단 Ip 필터 구현 이야기
간단 Ip 필터 구현 이야기beom kyun choi
 
자바8 람다식 소개
자바8 람다식 소개자바8 람다식 소개
자바8 람다식 소개beom kyun choi
 
TDD 발담그기 @ 공감세미나
TDD 발담그기 @ 공감세미나TDD 발담그기 @ 공감세미나
TDD 발담그기 @ 공감세미나beom kyun choi
 
자바8 스트림 API 소개
자바8 스트림 API 소개자바8 스트림 API 소개
자바8 스트림 API 소개beom kyun choi
 
Okjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 TestOkjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 Testbeom kyun choi
 
Aws summit 2017 사내전파교육
Aws summit 2017 사내전파교육Aws summit 2017 사내전파교육
Aws summit 2017 사내전파교육Byeongsu Kang
 
Exception log practical_coding_guide, 예외와 로그 코딩 실용 가이드
Exception log practical_coding_guide, 예외와 로그 코딩 실용 가이드Exception log practical_coding_guide, 예외와 로그 코딩 실용 가이드
Exception log practical_coding_guide, 예외와 로그 코딩 실용 가이드도형 임
 
멸종하는 공룡이 되지 않으려면
멸종하는 공룡이 되지 않으려면멸종하는 공룡이 되지 않으려면
멸종하는 공룡이 되지 않으려면Byeongsu Kang
 
알고리즘 문제해결전략 #1
알고리즘 문제해결전략 #1알고리즘 문제해결전략 #1
알고리즘 문제해결전략 #1Byeongsu Kang
 
코딩소림사 Rx java
코딩소림사 Rx java코딩소림사 Rx java
코딩소림사 Rx javaByeongsu Kang
 
예외처리가이드
예외처리가이드예외처리가이드
예외처리가이드도형 임
 

Viewers also liked (20)

세션4. 예제로 배우는 스마트 컨트랙트 프로그래밍
세션4. 예제로 배우는 스마트 컨트랙트 프로그래밍세션4. 예제로 배우는 스마트 컨트랙트 프로그래밍
세션4. 예제로 배우는 스마트 컨트랙트 프로그래밍
 
세션2. 이더리움 합의 알고리즘과 마이닝
세션2. 이더리움 합의 알고리즘과 마이닝세션2. 이더리움 합의 알고리즘과 마이닝
세션2. 이더리움 합의 알고리즘과 마이닝
 
세션1. block chain as a platform
세션1. block chain as a platform세션1. block chain as a platform
세션1. block chain as a platform
 
세션3. geth 클라이언트 실습 및 모니터링과 시각화
세션3. geth 클라이언트 실습 및 모니터링과 시각화세션3. geth 클라이언트 실습 및 모니터링과 시각화
세션3. geth 클라이언트 실습 및 모니터링과 시각화
 
코어 이더리움
코어 이더리움 코어 이더리움
코어 이더리움
 
java 8 람다식 소개와 의미 고찰
java 8 람다식 소개와 의미 고찰java 8 람다식 소개와 의미 고찰
java 8 람다식 소개와 의미 고찰
 
Bitcoin 2.0(blockchain technology 2)
Bitcoin 2.0(blockchain technology 2)Bitcoin 2.0(blockchain technology 2)
Bitcoin 2.0(blockchain technology 2)
 
Tdd live spring camp 2013
Tdd live spring camp 2013Tdd live spring camp 2013
Tdd live spring camp 2013
 
간단 Ip 필터 구현 이야기
간단 Ip 필터 구현 이야기간단 Ip 필터 구현 이야기
간단 Ip 필터 구현 이야기
 
자바8 람다식 소개
자바8 람다식 소개자바8 람다식 소개
자바8 람다식 소개
 
TDD 발담그기 @ 공감세미나
TDD 발담그기 @ 공감세미나TDD 발담그기 @ 공감세미나
TDD 발담그기 @ 공감세미나
 
자바8 스트림 API 소개
자바8 스트림 API 소개자바8 스트림 API 소개
자바8 스트림 API 소개
 
Okjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 TestOkjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 Test
 
Aws summit 2017 사내전파교육
Aws summit 2017 사내전파교육Aws summit 2017 사내전파교육
Aws summit 2017 사내전파교육
 
알고리즘2
알고리즘2알고리즘2
알고리즘2
 
Exception log practical_coding_guide, 예외와 로그 코딩 실용 가이드
Exception log practical_coding_guide, 예외와 로그 코딩 실용 가이드Exception log practical_coding_guide, 예외와 로그 코딩 실용 가이드
Exception log practical_coding_guide, 예외와 로그 코딩 실용 가이드
 
멸종하는 공룡이 되지 않으려면
멸종하는 공룡이 되지 않으려면멸종하는 공룡이 되지 않으려면
멸종하는 공룡이 되지 않으려면
 
알고리즘 문제해결전략 #1
알고리즘 문제해결전략 #1알고리즘 문제해결전략 #1
알고리즘 문제해결전략 #1
 
코딩소림사 Rx java
코딩소림사 Rx java코딩소림사 Rx java
코딩소림사 Rx java
 
예외처리가이드
예외처리가이드예외처리가이드
예외처리가이드
 

Similar to 세션5. web3.js와 Node.js 를 사용한 dApp 개발

Blockchain 4th dapp programming
Blockchain 4th dapp programmingBlockchain 4th dapp programming
Blockchain 4th dapp programmingihpark92
 
Mastering ethereum(smart contract)
Mastering ethereum(smart contract)Mastering ethereum(smart contract)
Mastering ethereum(smart contract)제호 송
 
Blockchain Study(5) - Smart Contract(스마트 계약)
Blockchain Study(5) - Smart Contract(스마트 계약)Blockchain Study(5) - Smart Contract(스마트 계약)
Blockchain Study(5) - Smart Contract(스마트 계약)Fermat Jade
 
Block chain bidding_System
Block chain bidding_SystemBlock chain bidding_System
Block chain bidding_System환석 주
 
3일차-닷넷 분산 기술의 이해 (인피니트 강의자료)
3일차-닷넷 분산 기술의 이해 (인피니트 강의자료)3일차-닷넷 분산 기술의 이해 (인피니트 강의자료)
3일차-닷넷 분산 기술의 이해 (인피니트 강의자료)KH Park (박경훈)
 
Tcp server / client
Tcp server / clientTcp server / client
Tcp server / client문익 장
 
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기Kiyoung Moon
 
20201121 코드 삼분지계
20201121 코드 삼분지계20201121 코드 삼분지계
20201121 코드 삼분지계Chiwon Song
 
파이썬+네트워크 20160210
파이썬+네트워크 20160210파이썬+네트워크 20160210
파이썬+네트워크 20160210Yong Joon Moon
 
Blockchain 3rd smart contract programming
Blockchain 3rd smart contract programmingBlockchain 3rd smart contract programming
Blockchain 3rd smart contract programmingihpark92
 
Tensorflow service & Machine Learning
Tensorflow service & Machine LearningTensorflow service & Machine Learning
Tensorflow service & Machine LearningJEEHYUN PAIK
 
Service mesh(istio) monitoring
Service mesh(istio) monitoringService mesh(istio) monitoring
Service mesh(istio) monitoringJeong-Ho Na
 
소켓프로그래밍 기초요약
소켓프로그래밍 기초요약소켓프로그래밍 기초요약
소켓프로그래밍 기초요약세빈 정
 
NDC 2011, 네트워크 비동기 통신, 합의점의 길목에서
NDC 2011, 네트워크 비동기 통신, 합의점의 길목에서NDC 2011, 네트워크 비동기 통신, 합의점의 길목에서
NDC 2011, 네트워크 비동기 통신, 합의점의 길목에서tcaesvk
 
AWS 기반 블록체인 (2부) - 블록체인 서비스 개발하기 (김준형 & 박천구, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
AWS 기반 블록체인 (2부) - 블록체인 서비스 개발하기 (김준형 & 박천구, AWS 솔루션즈 아키텍트) :: AWS DevDay2018AWS 기반 블록체인 (2부) - 블록체인 서비스 개발하기 (김준형 & 박천구, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
AWS 기반 블록체인 (2부) - 블록체인 서비스 개발하기 (김준형 & 박천구, AWS 솔루션즈 아키텍트) :: AWS DevDay2018Amazon Web Services Korea
 
TCP/IP Protocol - JAVA
TCP/IP Protocol - JAVATCP/IP Protocol - JAVA
TCP/IP Protocol - JAVAcooddy
 
Surface flingerservice(서피스 플링거 연결 jb)
Surface flingerservice(서피스 플링거 연결 jb)Surface flingerservice(서피스 플링거 연결 jb)
Surface flingerservice(서피스 플링거 연결 jb)fefe7270
 
구글 기술을 이용한 모바일 클라우드 애플리케이션 개발
 구글 기술을 이용한 모바일 클라우드 애플리케이션 개발 구글 기술을 이용한 모바일 클라우드 애플리케이션 개발
구글 기술을 이용한 모바일 클라우드 애플리케이션 개발LGU+
 
Python으로 채팅 구현하기
Python으로 채팅 구현하기Python으로 채팅 구현하기
Python으로 채팅 구현하기Tae Young Lee
 
Airflow를 이용한 데이터 Workflow 관리
Airflow를 이용한  데이터 Workflow 관리Airflow를 이용한  데이터 Workflow 관리
Airflow를 이용한 데이터 Workflow 관리YoungHeon (Roy) Kim
 

Similar to 세션5. web3.js와 Node.js 를 사용한 dApp 개발 (20)

Blockchain 4th dapp programming
Blockchain 4th dapp programmingBlockchain 4th dapp programming
Blockchain 4th dapp programming
 
Mastering ethereum(smart contract)
Mastering ethereum(smart contract)Mastering ethereum(smart contract)
Mastering ethereum(smart contract)
 
Blockchain Study(5) - Smart Contract(스마트 계약)
Blockchain Study(5) - Smart Contract(스마트 계약)Blockchain Study(5) - Smart Contract(스마트 계약)
Blockchain Study(5) - Smart Contract(스마트 계약)
 
Block chain bidding_System
Block chain bidding_SystemBlock chain bidding_System
Block chain bidding_System
 
3일차-닷넷 분산 기술의 이해 (인피니트 강의자료)
3일차-닷넷 분산 기술의 이해 (인피니트 강의자료)3일차-닷넷 분산 기술의 이해 (인피니트 강의자료)
3일차-닷넷 분산 기술의 이해 (인피니트 강의자료)
 
Tcp server / client
Tcp server / clientTcp server / client
Tcp server / client
 
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기
 
20201121 코드 삼분지계
20201121 코드 삼분지계20201121 코드 삼분지계
20201121 코드 삼분지계
 
파이썬+네트워크 20160210
파이썬+네트워크 20160210파이썬+네트워크 20160210
파이썬+네트워크 20160210
 
Blockchain 3rd smart contract programming
Blockchain 3rd smart contract programmingBlockchain 3rd smart contract programming
Blockchain 3rd smart contract programming
 
Tensorflow service & Machine Learning
Tensorflow service & Machine LearningTensorflow service & Machine Learning
Tensorflow service & Machine Learning
 
Service mesh(istio) monitoring
Service mesh(istio) monitoringService mesh(istio) monitoring
Service mesh(istio) monitoring
 
소켓프로그래밍 기초요약
소켓프로그래밍 기초요약소켓프로그래밍 기초요약
소켓프로그래밍 기초요약
 
NDC 2011, 네트워크 비동기 통신, 합의점의 길목에서
NDC 2011, 네트워크 비동기 통신, 합의점의 길목에서NDC 2011, 네트워크 비동기 통신, 합의점의 길목에서
NDC 2011, 네트워크 비동기 통신, 합의점의 길목에서
 
AWS 기반 블록체인 (2부) - 블록체인 서비스 개발하기 (김준형 & 박천구, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
AWS 기반 블록체인 (2부) - 블록체인 서비스 개발하기 (김준형 & 박천구, AWS 솔루션즈 아키텍트) :: AWS DevDay2018AWS 기반 블록체인 (2부) - 블록체인 서비스 개발하기 (김준형 & 박천구, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
AWS 기반 블록체인 (2부) - 블록체인 서비스 개발하기 (김준형 & 박천구, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
 
TCP/IP Protocol - JAVA
TCP/IP Protocol - JAVATCP/IP Protocol - JAVA
TCP/IP Protocol - JAVA
 
Surface flingerservice(서피스 플링거 연결 jb)
Surface flingerservice(서피스 플링거 연결 jb)Surface flingerservice(서피스 플링거 연결 jb)
Surface flingerservice(서피스 플링거 연결 jb)
 
구글 기술을 이용한 모바일 클라우드 애플리케이션 개발
 구글 기술을 이용한 모바일 클라우드 애플리케이션 개발 구글 기술을 이용한 모바일 클라우드 애플리케이션 개발
구글 기술을 이용한 모바일 클라우드 애플리케이션 개발
 
Python으로 채팅 구현하기
Python으로 채팅 구현하기Python으로 채팅 구현하기
Python으로 채팅 구현하기
 
Airflow를 이용한 데이터 Workflow 관리
Airflow를 이용한  데이터 Workflow 관리Airflow를 이용한  데이터 Workflow 관리
Airflow를 이용한 데이터 Workflow 관리
 

More from Jay JH Park

20170322-Postech Seminar-Gig Economy
20170322-Postech Seminar-Gig Economy20170322-Postech Seminar-Gig Economy
20170322-Postech Seminar-Gig EconomyJay JH Park
 
Hidden 서비스 소개 - 티스테이지강연(201061125 )
Hidden 서비스 소개 - 티스테이지강연(201061125 )Hidden 서비스 소개 - 티스테이지강연(201061125 )
Hidden 서비스 소개 - 티스테이지강연(201061125 )Jay JH Park
 
Hidden 서비스 소개
Hidden 서비스 소개 Hidden 서비스 소개
Hidden 서비스 소개 Jay JH Park
 
Samsung Pay, The future of Pay
Samsung Pay, The future of PaySamsung Pay, The future of Pay
Samsung Pay, The future of PayJay JH Park
 
클라우드 인프라 기반 서비스 개발 - ChatON
클라우드 인프라 기반 서비스 개발 - ChatON클라우드 인프라 기반 서비스 개발 - ChatON
클라우드 인프라 기반 서비스 개발 - ChatONJay JH Park
 
모바일 네트워크 친화적인 글로벌 메시징 서비스 - ChatON 개발
모바일 네트워크 친화적인 글로벌 메시징 서비스 - ChatON 개발 모바일 네트워크 친화적인 글로벌 메시징 서비스 - ChatON 개발
모바일 네트워크 친화적인 글로벌 메시징 서비스 - ChatON 개발 Jay JH Park
 

More from Jay JH Park (6)

20170322-Postech Seminar-Gig Economy
20170322-Postech Seminar-Gig Economy20170322-Postech Seminar-Gig Economy
20170322-Postech Seminar-Gig Economy
 
Hidden 서비스 소개 - 티스테이지강연(201061125 )
Hidden 서비스 소개 - 티스테이지강연(201061125 )Hidden 서비스 소개 - 티스테이지강연(201061125 )
Hidden 서비스 소개 - 티스테이지강연(201061125 )
 
Hidden 서비스 소개
Hidden 서비스 소개 Hidden 서비스 소개
Hidden 서비스 소개
 
Samsung Pay, The future of Pay
Samsung Pay, The future of PaySamsung Pay, The future of Pay
Samsung Pay, The future of Pay
 
클라우드 인프라 기반 서비스 개발 - ChatON
클라우드 인프라 기반 서비스 개발 - ChatON클라우드 인프라 기반 서비스 개발 - ChatON
클라우드 인프라 기반 서비스 개발 - ChatON
 
모바일 네트워크 친화적인 글로벌 메시징 서비스 - ChatON 개발
모바일 네트워크 친화적인 글로벌 메시징 서비스 - ChatON 개발 모바일 네트워크 친화적인 글로벌 메시징 서비스 - ChatON 개발
모바일 네트워크 친화적인 글로벌 메시징 서비스 - ChatON 개발
 

세션5. web3.js와 Node.js 를 사용한 dApp 개발

  • 1. web3.js와 node.js를 사용한 dApp 개발 김재욱 cmdhema@gmail.com
  • 2. 목차 • web3.js, truffle • dApp 구조 및 구현과정 • 주요 함수 소개 • 시연
  • 3. web3.js & truffle • Ethereum Compatible JavaScript API • Ethereum 의 JavaScript API 이다. 내부적으로는 JSON RPC 를 통해 eth / geth 와 통신한다. • Geth/Eth 의 Javascript Console 이나 브라우져, Node.js runtime 에서 사용할 수 있는 API 이다. • Web3.js는 abi(Application Binary Interface)로 EVM과 통신한다. • truffle은 solidity로 작성된 Smart Contract 소스 코드를 컴파일하고 테스트하고 이더리움 네트워크에 배포할 수 있도록 하는 Contract 개발 framework이다.
  • 5. dAPP 구현 과정 Smart Contract 설계 Smart Contract 구현 Smart Contract Compile dApp 구조 설계 dApp 구현 Contract call 설계 기타 packages send transaction get transaction event watch contract address abi Contract, web3 연동
  • 6. dApp 구현 Set Get 블록체인에 데이터를 기록하는 것 블록체인의 데이터를 가져오는 것 Transaction을 보낸다. Transaction 발생 X Value(eth), Gas 필요 Value, Gas 필요하지 않다. Hex string 값으로 저장한다. Hex string 값을 읽어온다. Transaction이 Mining되었다는 callback 함수를 지원하지 않는다. get 함수를 호출하면 callback 함수로 데이터를 받아올 수 있다. 전송한 Transaction이 Mining되었나 를 확인하는 코드 작성 필요한다. callback 함수로 데이터를 바로 받아 온다. 복잡하거나 큰 데이터 등을 저장하기 위해서는 swarm과 같은 p2p 스토리지 를 사용하는 것이 좋다. Contract call 함수의 두 종류
  • 7. dApp 구현 abi로 Contract와 web3 연동 1. deploy할 Contract import 2. contract compile truffle compile 3. contract deploy truffle deploy 4. abi를 포함한 json 파일 자동 생성 5. json 파일에서 Contract의 address 확인 6. json 파일 import 후 abi 필드 추출 7. web3 함수 호출 2,3. truffle migrate Solidity web3
  • 8. dApp 구현 abi로 Contract와 web3 연동 deploy할 contract sol 파일을 import 하고 deploy 한다. deploy 함수의 두번째 인자부터는 Contract의 생성자이다.
  • 9. dApp 구현 abi로 Contract와 web3 연동 truffle compile 수행 후 sol과 json 파일 1:1 생성 후 truffle deploy deploy 한 Contract의 json 파일 마다 networks의 address 필드 생성. 이 address가 contract의 주소이다.
  • 10. dApp 구현 abi로 Contract와 web3 연동 truffle compile에서 생성된 json 파일을 불러오고 abi 필드 추출 abi 필드와 contract address 주소로 contract를 호출한다.
  • 11. dApp 구현 send transaction Contract set call send transaction to EVM web3 Contract function call interface transaction Id is mining done? return transaction data
  • 12. dApp 구현 send transaction 함수명 web3.eth.sendTransaction(transactionObject [, callback]) 주요 파라미터 from 보내는 wallet의 주소 to 받는 wallet의 주소 value 보낼 이더의 양(hex) gas 지불할 가스의 양(hex) 리턴 32Byte의 hex값, Transaction의 Id
  • 13. dApp 구현 send transaction 트랜잭션이 정상적으로 기록됐는지 확인하기 위해서 res로 받은 Transaction Id로 getTransaction 함수를 호출한다.
  • 14. dApp 구현 get transaction 함수명 web3.eth.getTransaction(transactionId [, callback]) 주요 파라미터 transactionId sendTransaction으로 받은 Transaction Id 리턴 트랜잭션의 정보를 담은 객체
  • 15. dApp 구현 get transaction •getTransaction의 결과가 null 이면 해당 트랜잭션이 mining이 되지 않다는 뜻이다. •로직상 mining이 되고 진행되어야할 부분이 있으면 timer를 실행하여 주기적으로 트랜잭션이 mining이 되었는지 확인해야한다. •따라서 getTransaction 함수를 x초 단위로 호출하여 null이 아니면 다음 로직이 실행되도록 코딩한다.
  • 16. dApp 구현 get transaction 트랜잭션이 정상적으로 기록됐는지 확인하기 위해서 res로 받은 Transaction Id로 getTransaction 함수를 호출한다. 마이닝이 됐으면 getTransaction 결과는 null이 아니다.
  • 17. dApp 구현 get transaction receipt 함수명 web3.eth.getTransactionReceipt(hashString [, callback]) 주요 파라미터 transactionId sendTransaction으로 받은 Transaction Id 리턴 트랜잭션의 Receipt 정보를 담은 객체
  • 19. dApp 구현 get transaction receipt •Contract에서 sendTransaction의 결과를 콜백함수로 받을수 있는 방법은 없다. •getTransactionReceipt에서 logs의 data 필드는 setTransaction의 결과 값이 저장이 된다. •data 필드를 파싱하면 sendTransaction의 결과 값을 얻어 올 수 있다.
  • 20. dApp 구현 get transaction receipt •Transfer를 호출한 결과가 logs에 기록된다. •msg.sender => 00000000000000000000000064e45fa2c1d5c55f 48790cad0ae036f073a97353 •_to => 000000000000000000000000517fb91985925bf8 e3c3da3826fe733b467bc953 •value => 000000000000000000000000000000000000000 00000000000000000000001f4 data: '0x00000000000000000000000064e45fa2c1d5c55f48790cad0ae036f073a97353000000000000000000000000517fb91 985925bf8e3c3da3826fe733b467bc95300000000000000000000000000000000000000000000000000000000000001f4 ',
  • 21. dApp 구현 Event Filter •Contract에서 event 형으로 선언한 함수가 호출되면 EVM에서 Event가 발생한다. •event 형으로 선언한 함수는 전부 호출을 감지할 수 있다. 이를 콜백처럼 활용 가능하다.
  • 22. dApp 구현 •세션4의 CrowdSale 예제를 node.js + truffle + solidity로 구현한 dApp을 시연 • node.js : v8.9.0 • npm web3.js : 0.18.0 • truffle : 4.0.1 • solidity 0.4.16 • os : mac os • blockchain : ethereumjs/testrpc
  • 23. dApp 구현 Conclusion • HTTP Rest API를 설계할 때 처럼 Solidity – web3를 잘 설계하는게 중요하다. • 저장할 수 있는 hex string 문자열이 제한되어있으므로 저장할 데이터를 적절하게 설계한다. • 여러 정보가 들어있는 긴 hex string이 저장될 수 있으므로 길이를 잘 계산해서 파싱해야한다. • 문서화는 필수! Solidity의 파라미터 타입, 리턴 타입, 리턴 문자열 종류 등을 잘 명시해야한다. JSON과 같은 형태로 리턴할수 없으므로 HTTP Rest API 설계 문서 작성할때 보다 더 꼼꼼하고 정확한 문서 작성이 필요하다. • 테스트코드를 작성하자.
  • 24. Q&A