SlideShare ist ein Scribd-Unternehmen logo
1 von 24
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Was ist angesagt?

VictoriaMetrics 2023 Roadmap
VictoriaMetrics 2023 RoadmapVictoriaMetrics 2023 Roadmap
VictoriaMetrics 2023 RoadmapVictoriaMetrics
 
[2D1]Elasticsearch 성능 최적화
[2D1]Elasticsearch 성능 최적화[2D1]Elasticsearch 성능 최적화
[2D1]Elasticsearch 성능 최적화NAVER D2
 
DDD로 복잡함 다루기
DDD로 복잡함 다루기DDD로 복잡함 다루기
DDD로 복잡함 다루기beom kyun choi
 
좌충우돌 Data Engineering 학습기
좌충우돌 Data Engineering 학습기좌충우돌 Data Engineering 학습기
좌충우돌 Data Engineering 학습기DONGMIN LEE
 
서버 개발자가 되기 위한 첫 걸음
서버 개발자가 되기 위한 첫 걸음서버 개발자가 되기 위한 첫 걸음
서버 개발자가 되기 위한 첫 걸음nexusz99
 
Simplify DevOps with Microservices and Mobile Backends.pptx
Simplify DevOps with Microservices and Mobile Backends.pptxSimplify DevOps with Microservices and Mobile Backends.pptx
Simplify DevOps with Microservices and Mobile Backends.pptxssuser5faa791
 
[234]멀티테넌트 하둡 클러스터 운영 경험기
[234]멀티테넌트 하둡 클러스터 운영 경험기[234]멀티테넌트 하둡 클러스터 운영 경험기
[234]멀티테넌트 하둡 클러스터 운영 경험기NAVER D2
 
Building a Unified Logging Layer with Fluentd, Elasticsearch and Kibana
Building a Unified Logging Layer with Fluentd, Elasticsearch and KibanaBuilding a Unified Logging Layer with Fluentd, Elasticsearch and Kibana
Building a Unified Logging Layer with Fluentd, Elasticsearch and KibanaMushfekur Rahman
 
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유Hyojun Jeon
 
Profiling - 실시간 대화식 프로파일러
Profiling - 실시간 대화식 프로파일러Profiling - 실시간 대화식 프로파일러
Profiling - 실시간 대화식 프로파일러Heungsub Lee
 
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3Heungsub Lee
 
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint [D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint NAVER D2
 
Amazon Personalize 소개 (+ 실습 구성)::김영진, 솔루션즈 아키텍트, AWS::AWS AIML 스페셜 웨비나
Amazon Personalize 소개 (+ 실습 구성)::김영진, 솔루션즈 아키텍트, AWS::AWS AIML 스페셜 웨비나Amazon Personalize 소개 (+ 실습 구성)::김영진, 솔루션즈 아키텍트, AWS::AWS AIML 스페셜 웨비나
Amazon Personalize 소개 (+ 실습 구성)::김영진, 솔루션즈 아키텍트, AWS::AWS AIML 스페셜 웨비나Amazon Web Services Korea
 
Apache kafka performance(latency)_benchmark_v0.3
Apache kafka performance(latency)_benchmark_v0.3Apache kafka performance(latency)_benchmark_v0.3
Apache kafka performance(latency)_benchmark_v0.3SANG WON PARK
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현YEONG-CHEON YOU
 
[개인 프로젝트] 쿠버네티스를 이용한 개발환경 자동화 구축시스템 - 프로토타입
[개인 프로젝트] 쿠버네티스를 이용한 개발환경 자동화 구축시스템 - 프로토타입[개인 프로젝트] 쿠버네티스를 이용한 개발환경 자동화 구축시스템 - 프로토타입
[개인 프로젝트] 쿠버네티스를 이용한 개발환경 자동화 구축시스템 - 프로토타입choi sungwook
 
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍Chris Ohk
 
로그 기깔나게 잘 디자인하는 법
로그 기깔나게 잘 디자인하는 법로그 기깔나게 잘 디자인하는 법
로그 기깔나게 잘 디자인하는 법Jeongsang Baek
 
GCP 자격증 취득 후 찾아온 기회들
GCP 자격증 취득 후 찾아온 기회들GCP 자격증 취득 후 찾아온 기회들
GCP 자격증 취득 후 찾아온 기회들DONGMIN LEE
 

Was ist angesagt? (20)

VictoriaMetrics 2023 Roadmap
VictoriaMetrics 2023 RoadmapVictoriaMetrics 2023 Roadmap
VictoriaMetrics 2023 Roadmap
 
[2D1]Elasticsearch 성능 최적화
[2D1]Elasticsearch 성능 최적화[2D1]Elasticsearch 성능 최적화
[2D1]Elasticsearch 성능 최적화
 
DDD로 복잡함 다루기
DDD로 복잡함 다루기DDD로 복잡함 다루기
DDD로 복잡함 다루기
 
좌충우돌 Data Engineering 학습기
좌충우돌 Data Engineering 학습기좌충우돌 Data Engineering 학습기
좌충우돌 Data Engineering 학습기
 
서버 개발자가 되기 위한 첫 걸음
서버 개발자가 되기 위한 첫 걸음서버 개발자가 되기 위한 첫 걸음
서버 개발자가 되기 위한 첫 걸음
 
Simplify DevOps with Microservices and Mobile Backends.pptx
Simplify DevOps with Microservices and Mobile Backends.pptxSimplify DevOps with Microservices and Mobile Backends.pptx
Simplify DevOps with Microservices and Mobile Backends.pptx
 
[234]멀티테넌트 하둡 클러스터 운영 경험기
[234]멀티테넌트 하둡 클러스터 운영 경험기[234]멀티테넌트 하둡 클러스터 운영 경험기
[234]멀티테넌트 하둡 클러스터 운영 경험기
 
Swoole Love PHP
Swoole Love PHPSwoole Love PHP
Swoole Love PHP
 
Building a Unified Logging Layer with Fluentd, Elasticsearch and Kibana
Building a Unified Logging Layer with Fluentd, Elasticsearch and KibanaBuilding a Unified Logging Layer with Fluentd, Elasticsearch and Kibana
Building a Unified Logging Layer with Fluentd, Elasticsearch and Kibana
 
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유
 
Profiling - 실시간 대화식 프로파일러
Profiling - 실시간 대화식 프로파일러Profiling - 실시간 대화식 프로파일러
Profiling - 실시간 대화식 프로파일러
 
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
 
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint [D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
 
Amazon Personalize 소개 (+ 실습 구성)::김영진, 솔루션즈 아키텍트, AWS::AWS AIML 스페셜 웨비나
Amazon Personalize 소개 (+ 실습 구성)::김영진, 솔루션즈 아키텍트, AWS::AWS AIML 스페셜 웨비나Amazon Personalize 소개 (+ 실습 구성)::김영진, 솔루션즈 아키텍트, AWS::AWS AIML 스페셜 웨비나
Amazon Personalize 소개 (+ 실습 구성)::김영진, 솔루션즈 아키텍트, AWS::AWS AIML 스페셜 웨비나
 
Apache kafka performance(latency)_benchmark_v0.3
Apache kafka performance(latency)_benchmark_v0.3Apache kafka performance(latency)_benchmark_v0.3
Apache kafka performance(latency)_benchmark_v0.3
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현
 
[개인 프로젝트] 쿠버네티스를 이용한 개발환경 자동화 구축시스템 - 프로토타입
[개인 프로젝트] 쿠버네티스를 이용한 개발환경 자동화 구축시스템 - 프로토타입[개인 프로젝트] 쿠버네티스를 이용한 개발환경 자동화 구축시스템 - 프로토타입
[개인 프로젝트] 쿠버네티스를 이용한 개발환경 자동화 구축시스템 - 프로토타입
 
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
 
로그 기깔나게 잘 디자인하는 법
로그 기깔나게 잘 디자인하는 법로그 기깔나게 잘 디자인하는 법
로그 기깔나게 잘 디자인하는 법
 
GCP 자격증 취득 후 찾아온 기회들
GCP 자격증 취득 후 찾아온 기회들GCP 자격증 취득 후 찾아온 기회들
GCP 자격증 취득 후 찾아온 기회들
 

Andere mochten auch

세션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
 
예외처리가이드
예외처리가이드예외처리가이드
예외처리가이드도형 임
 

Andere mochten auch (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
 
예외처리가이드
예외처리가이드예외처리가이드
예외처리가이드
 

Ähnlich wie 세션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
 

Ähnlich wie 세션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 관리
 

Mehr von 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
 

Mehr von 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