SlideShare une entreprise Scribd logo
1  sur  26
Ethereum
introduce local-private-network(2)
- Index -
1. JSON-RPC

2. Smart Contract(1)

3. Q/A
What is JSON-RPC?
JSON-RPC
JSON is lightweight data-interchange format. 

JSON-RPC is a stateless, light-weight remote procedure call protocol.

This specification defines several data structures and the rules around their process,
over sockets, over HTTP, or in many various message passing environments.

It uses JSON (RFC 4627) as data format.
즉, JSON-RPC는 무상태 프로토콜이다.
독립적인 트랜잭션이 가능하고 다양한 프로세스를 통해 메시지를 전달할 수 있는 것.
자세한 내용은 https://github.com/ethereum/wiki/wiki/JSON-RPC 이곳 참조.
JSON-RPC
왜 JSON-RPC를 사용할까?
그 해답은 앞서 geth를 통해서 이더리움을 전송하고 계정을 만들었다.
그런데 매번 console에 들어가서 명령어를 치는 것이 아니라, JSON-RPC를 통해 HTTP 통신을
할 수 있다는 것!
JSON-RPC를 통해서 계정을 생성하고 트랜잭션까지 시작해보자.
JSON-RPC connect
시작하기 전, 터미널(CMD)가 2개 필요하다.
첫 번째 터미널에서 다음 명령어를 입력한다.
get --networkid 4649 --nodiscover --maxpeers 0 - -datadir /PATH_TO/test_data --mine
--minerthread 1 --rpc --rpcaddr "0.0.0.0" --rpcport 8545 --rpccorsdomain"*" --rpcapi
"admin,db,eth,debug,miner,net,shh,txpool,personal,web3" 2>> /PATH_TO/test_data/geth.log
JSON-RPC connect
시작하기 전, 터미널(CMD)가 2개 필요하다.
두 번째 터미널에서 본격적으로 JSON-RPC를 통해 새로운 account를 만들어본다.
curl -X POST -H "Content-Type: application/json"
--data '{ "jsonrpc":"2.0", "method":"personal_newAccount", "param":["pw3"], "id":10}'
localhost:8545
JSON-RPC connect
첫 번째 터미널에서 입력한 명령어를 분석하면,
get --networkid 4649 --nodiscover --maxpeers 0 - -datadir /PATH_TO/test_data --mine
--minerthread 1 --rpc --rpcaddr "0.0.0.0" --rpcport 8545 --rpccorsdomain"*" --rpcapi
"admin,db,eth,debug,miner,net,shh,txpool,personal,web3" 2>> /PATH_TO/test_data/geth.log
* mine

- 채굴 활성화한다.

* minerthread 1

- 채굴에 사용할 CPU thread 1개만 적용. (기본값 1)
JSON-RPC connect
첫 번째 터미널에서 입력한 명령어를 분석하면,
get --networkid 4649 --nodiscover --maxpeers 0 - -datadir /PATH_TO/test_data --mine
--minerthread 1 --rpc --rpcaddr "0.0.0.0" --rpcport 8545 --rpccorsdomain "*" --rpcapi
"admin,db,eth,debug,miner,net,shh,txpool,personal,web3" 2>> /PATH_TO/test_data/geth.log
* rpc

- HTTP-RPC 서버를 활성화 한다.

* rpcaddr "0.0.0.0"

- HTTP-RPC 서버의 수신 IP. 기본값은 "localhost".

- "0.0.0.0"을 지정하면 어떤 인터페이스에 대해 접근해도 수신한다.
JSON-RPC connect
첫 번째 터미널에서 입력한 명령어를 분석하면,
get --networkid 4649 --nodiscover --maxpeers 0 - -datadir /PATH_TO/test_data --mine
--minerthread 1 --rpc --rpcaddr "0.0.0.0" --rpcport 8545 --rpccorsdomain "*" --rpcapi
"admin,db,eth,debug,miner,net,shh,txpool,personal,web3" 2>> /PATH_TO/test_data/geth.log
* rpcport 8545

- HTTP-RPC 서버가 요청을 받기 위해 사용하는 포트 (기본값 8545)

* rpccorsdomain "*"

- 자신의 노드에 RPC로 접속할 IP 주소

- 쉼표로 여러 개를 지정 가능. "*"는 모든 IP 접속을 허용
JSON-RPC connect
첫 번째 터미널에서 입력한 명령어를 분석하면,
get --networkid 4649 --nodiscover --maxpeers 0 - -datadir /PATH_TO/test_data --mine
--minerthread 1 --rpc --rpcaddr "0.0.0.0" --rpcport 8545 --rpccorsdomain "*" --rpcapi
"admin,db,eth,debug,miner,net,shh,txpool,personal,web3" 2>> /PATH_TO/test_data/geth.log
* rpcapi "admin,db,eth,debug,miner,net,shh,txpool,personal,web3"

- RPC를 허가할 명령어 지정.

- 기본값은 "eth,net,web3"
JSON-RPC connect
시작하기 전, 터미널(CMD)가 2개 필요하다.
두 번째 터미널에서 입력한 curl 명령어를 알아보면,
curl -X POST -H "Content-Type: application/json"
--data '{ "jsonrpc":"2.0", "method":"personal_newAccount", "param":["pw3"], "id":10}'
localhost:8545
method에서 JSON-RPC 서버에서 이뤄질 행위를 정하고, 필요한 파라미터를 param에 담는다.
마지막에 id 부분은 임의의 숫자를 지정하면 된다. 보통 응답과 연결할 때 사용하는 것으로

요청하는 쪽에서 결정한다.
JSON-RPC connect
시작하기 전, 터미널(CMD)가 2개 필요하다.
두 번째 터미널에서 입력한 curl 명령어를 알아보면,
curl -X POST -H "Content-Type: application/json"
--data '{ "jsonrpc":"2.0", "method":"personal_newAccount", "param":["pw3"], "id":10}'
localhost:8545
해당 curl 을 입력하고 나온 결과값을 보면,
{"jsonrpc":"2.0", "id":10, "result":"0zxcwetw0gtvgd342rxc0xz"}
으로 결과값이 나온다.
JSON-RPC connect
조금 더 다양한 메소드를 실행시켜 보자.
method param result
personal_listAccounts [] 계정 리스트
eth_mining [] 채굴 활성화
eth_hashrate [] 채굴 속도
eth_blockNumber [] 블록 number
eth_getBalance ["계정 값"] 계정 벨런스
personal_unlockAccount ["계정값","PW",300] 계정 잠금 해제
eth_sendTransaction {from:"" , to:"", value:""} 트랜잭션
What is Smart-Contract?
Smart-Contract
스마트 계약은 블록체인에서 동작하는 application 이라고 보면 된다.
스마트 계약을 하기 위해서는 다음 조건이 있다.
1) 튜링 완전성(Turing-Completness)

- 튜링 머신 에뮬레이터에 저장하는 것.(추상적인 수학 개념상의 기계)

- 그냥 무한한 저장공간이라고 이해.

- 이를 통해 세상의 모든 문제를 풀 수 있는 기계 == 튜링기계



* 튜링완전언어 

- 모든 수학문제를 풀 수 있는 일반적인 알고리즘을 만들어 낼 수 있는 컴퓨터



=> 튜링완전언어 + 무한 저장공간 == 모든 계산 가능 기계 == 튜링기계(인간의 뇌)
Turing-Completness
튜링완전언어는,
1) 프로세스를 충분히 분할할 수 있는 만큼 작은 단위를 사용할 수 있어야한다.
2) 조건 설정과 반복 명령어가 있어야한다.

- if (조건문) + for/while (루프문) = 무한루프(반복)가 가능

= 문제를 풀 때까지 영원히 멈추지 않는 알고리즘 설계가능
그렇다면 왜 명령어의 분할도나 무한루프로 해야할까?
Turing-Completness
쉽게 이해하기 위해, 예를 들어보겠다.
"저 피자를 먹어라."
이 명령문으로는 피자를 먹는 것 외에 달리 할 수 있는게 없다.
하지만 튜링의 시점에서 보면, 조금 더 작은 단위로 쪼개볼 수 있다.
+ =
Turing-Completness
조금 더 자세히 쪼개면,
배가 고픔을 느낀다 > 눈으로 피자를 확인한다. > 뇌에서 명령을 내리기 위한 전기 스파크 발생
> 전기자극이 뉴런과 시냅스를 거쳐 뻗어나간다. > 근육과 힘줄은 해당 명령을 수신한다.
> 목표물체를 향해 손을 뻗는다. > 손을 뻗어 피자를 잡고 입 근처로 끌어온다. > 피자를 향해 입
을 벌린다. > 이빨로 피자를 끊어서 씹는다. > 씹은 피자를 삼킨다.
Turing-Completness
이런식으로 잘게 쪼개게 되면,
1) 각 과정의 중간단계에서 '반복’이 가능해진다. 씹는 과정을 반복할 수 있고, 손을 뻗는 동작만
반복할 수 있다.
2) 응용성이 높아져, 피자 뿐만 아니라 치킨도 집을 수 있고 먹을 수 있다.
Turing-Completness
눈치가 빠르다면… 이해가 되는가?
이것은 우리 인간이 작동하는 원리와 일맥상통한다고 볼 수 있다.
즉, 튜링완전한 알고리즘이다.
계약(EVM 바이트코드)
프로그램 컴파일
EVM
바이트코드
배포 이더리움
클라이언트
배포
이더리움
네트워크
EVM
바이트코드
블록체인
바이트코드는 블록 내에 저장됨
= 모든 노드에 배포됨
계약(EVM 바이트코드)
프로그램 컴파일
EVM
바이트코드
배포 이더리움
클라이언트
배포
이더리움
네트워크
EVM
바이트코드
블록체인
바이트코드는 블록 내에 저장됨
= 모든 노드에 배포됨
계약(EVM 바이트코드)
프로그램 컴파일
EVM
바이트코드
배포 이더리움
클라이언트
배포
이더리움
네트워크
EVM
바이트코드
블록체인
바이트코드는 블록 내에 저장됨
= 모든 노드에 배포됨
계약(EVM 바이트코드)
터미널
브라우저
콘솔 EVM
EVM
바이트코드
이더리움
네트워크
ssh
JSON-RPC
블록체인(모든 노드가 동일한 데이터를 보유)
이더리움 클라이언트
•데이터 확인 등은 각 노드에서 실행 가능
•데이터 변경은 갱신 내용을 네트워크에 전달
–CodeMath
Let’s study blockchain!
Q/A

Contenu connexe

Tendances

세션5. web3.js와 Node.js 를 사용한 dApp 개발
세션5. web3.js와 Node.js 를 사용한 dApp 개발세션5. web3.js와 Node.js 를 사용한 dApp 개발
세션5. web3.js와 Node.js 를 사용한 dApp 개발Jay JH Park
 
Blockchain 4th dapp programming
Blockchain 4th dapp programmingBlockchain 4th dapp programming
Blockchain 4th dapp programmingihpark92
 
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
 
Blockchain Study(3) - 이더리움(Geth)
Blockchain Study(3) - 이더리움(Geth)Blockchain Study(3) - 이더리움(Geth)
Blockchain Study(3) - 이더리움(Geth)Fermat Jade
 
Block chain introduction slideshare
Block chain introduction   slideshareBlock chain introduction   slideshare
Block chain introduction slidesharewonyong hwang
 
Blockchain Study(2) - POW&POS
Blockchain Study(2) - POW&POSBlockchain Study(2) - POW&POS
Blockchain Study(2) - POW&POSFermat Jade
 
Ethereum Basics Part 2
Ethereum Basics Part 2Ethereum Basics Part 2
Ethereum Basics Part 2Soobok Jin
 
Dapp시연 150214
Dapp시연 150214Dapp시연 150214
Dapp시연 150214Jihong Shim
 
하이퍼레저 패브릭 데이터 구조
하이퍼레저 패브릭 데이터 구조하이퍼레저 패브릭 데이터 구조
하이퍼레저 패브릭 데이터 구조Logpresso
 
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - PerfornanceGCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance상현 조
 
하이퍼레저 패브릭 실습자료
하이퍼레저 패브릭 실습자료하이퍼레저 패브릭 실습자료
하이퍼레저 패브릭 실습자료TIMEGATE
 
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with ExceptionGCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception상현 조
 
Startup JavaScript 9 - Socket.IO 실시간 통신
Startup JavaScript 9 - Socket.IO 실시간 통신Startup JavaScript 9 - Socket.IO 실시간 통신
Startup JavaScript 9 - Socket.IO 실시간 통신Circulus
 
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing SystemGCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System상현 조
 
11_웹서비스활용
11_웹서비스활용11_웹서비스활용
11_웹서비스활용noerror
 
예제로 배우는 이더리움 결제구현 (거래소 지갑 구현 예시)
예제로 배우는 이더리움 결제구현 (거래소 지갑 구현 예시)예제로 배우는 이더리움 결제구현 (거래소 지갑 구현 예시)
예제로 배우는 이더리움 결제구현 (거래소 지갑 구현 예시)Colin Chae
 
GCGC- CGCII 서버 엔진에 적용된 기술 (8) - Group System
GCGC- CGCII 서버 엔진에 적용된 기술 (8) - Group SystemGCGC- CGCII 서버 엔진에 적용된 기술 (8) - Group System
GCGC- CGCII 서버 엔진에 적용된 기술 (8) - Group System상현 조
 
GCGC- CGCII 서버 엔진에 적용된 기술 (1)
GCGC- CGCII 서버 엔진에 적용된 기술 (1)GCGC- CGCII 서버 엔진에 적용된 기술 (1)
GCGC- CGCII 서버 엔진에 적용된 기술 (1)상현 조
 
GCGC- CGCII 서버 엔진에 적용된 기술 (6) - CGCII Server Sample
GCGC- CGCII 서버 엔진에 적용된 기술 (6) - CGCII Server SampleGCGC- CGCII 서버 엔진에 적용된 기술 (6) - CGCII Server Sample
GCGC- CGCII 서버 엔진에 적용된 기술 (6) - CGCII Server Sample상현 조
 

Tendances (20)

세션5. web3.js와 Node.js 를 사용한 dApp 개발
세션5. web3.js와 Node.js 를 사용한 dApp 개발세션5. web3.js와 Node.js 를 사용한 dApp 개발
세션5. web3.js와 Node.js 를 사용한 dApp 개발
 
Blockchain 4th dapp programming
Blockchain 4th dapp programmingBlockchain 4th dapp programming
Blockchain 4th dapp programming
 
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
 
Blockchain Study(3) - 이더리움(Geth)
Blockchain Study(3) - 이더리움(Geth)Blockchain Study(3) - 이더리움(Geth)
Blockchain Study(3) - 이더리움(Geth)
 
Block chain introduction slideshare
Block chain introduction   slideshareBlock chain introduction   slideshare
Block chain introduction slideshare
 
Blockchain Study(2) - POW&POS
Blockchain Study(2) - POW&POSBlockchain Study(2) - POW&POS
Blockchain Study(2) - POW&POS
 
Ethereum Basics Part 2
Ethereum Basics Part 2Ethereum Basics Part 2
Ethereum Basics Part 2
 
Dapp시연 150214
Dapp시연 150214Dapp시연 150214
Dapp시연 150214
 
하이퍼레저 패브릭 데이터 구조
하이퍼레저 패브릭 데이터 구조하이퍼레저 패브릭 데이터 구조
하이퍼레저 패브릭 데이터 구조
 
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - PerfornanceGCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
 
하이퍼레저 패브릭 실습자료
하이퍼레저 패브릭 실습자료하이퍼레저 패브릭 실습자료
하이퍼레저 패브릭 실습자료
 
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with ExceptionGCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception
 
Startup JavaScript 9 - Socket.IO 실시간 통신
Startup JavaScript 9 - Socket.IO 실시간 통신Startup JavaScript 9 - Socket.IO 실시간 통신
Startup JavaScript 9 - Socket.IO 실시간 통신
 
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing SystemGCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System
 
11_웹서비스활용
11_웹서비스활용11_웹서비스활용
11_웹서비스활용
 
예제로 배우는 이더리움 결제구현 (거래소 지갑 구현 예시)
예제로 배우는 이더리움 결제구현 (거래소 지갑 구현 예시)예제로 배우는 이더리움 결제구현 (거래소 지갑 구현 예시)
예제로 배우는 이더리움 결제구현 (거래소 지갑 구현 예시)
 
GCGC- CGCII 서버 엔진에 적용된 기술 (8) - Group System
GCGC- CGCII 서버 엔진에 적용된 기술 (8) - Group SystemGCGC- CGCII 서버 엔진에 적용된 기술 (8) - Group System
GCGC- CGCII 서버 엔진에 적용된 기술 (8) - Group System
 
GCGC- CGCII 서버 엔진에 적용된 기술 (1)
GCGC- CGCII 서버 엔진에 적용된 기술 (1)GCGC- CGCII 서버 엔진에 적용된 기술 (1)
GCGC- CGCII 서버 엔진에 적용된 기술 (1)
 
GCGC- CGCII 서버 엔진에 적용된 기술 (6) - CGCII Server Sample
GCGC- CGCII 서버 엔진에 적용된 기술 (6) - CGCII Server SampleGCGC- CGCII 서버 엔진에 적용된 기술 (6) - CGCII Server Sample
GCGC- CGCII 서버 엔진에 적용된 기술 (6) - CGCII Server Sample
 

Similaire à Blockchain Study(4) - Geth & Smart Contract

김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)
김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)
김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)Ubuntu Korea Community
 
07 스레드스케줄링,우선순위,그리고선호도
07 스레드스케줄링,우선순위,그리고선호도07 스레드스케줄링,우선순위,그리고선호도
07 스레드스케줄링,우선순위,그리고선호도ssuser3fb17c
 
Tensorflow service & Machine Learning
Tensorflow service & Machine LearningTensorflow service & Machine Learning
Tensorflow service & Machine LearningJEEHYUN PAIK
 
Interface and Protocol
Interface and ProtocolInterface and Protocol
Interface and ProtocolWonjun Hwang
 
Wire shark 사용법 및 네트워크 개론 살짝 설명
Wire shark 사용법 및 네트워크 개론 살짝 설명Wire shark 사용법 및 네트워크 개론 살짝 설명
Wire shark 사용법 및 네트워크 개론 살짝 설명진우 이
 
ROS SERIAL and OpenCR
ROS SERIAL and OpenCRROS SERIAL and OpenCR
ROS SERIAL and OpenCRYoonseok Pyo
 
코딩에는 좋은 노트북이 필요 없다
코딩에는 좋은 노트북이 필요 없다코딩에는 좋은 노트북이 필요 없다
코딩에는 좋은 노트북이 필요 없다Han Sung Kim
 
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요NAVER D2
 
[2D4]Python에서의 동시성_병렬성
[2D4]Python에서의 동시성_병렬성[2D4]Python에서의 동시성_병렬성
[2D4]Python에서의 동시성_병렬성NAVER D2
 
Fluentd with MySQL
Fluentd with MySQLFluentd with MySQL
Fluentd with MySQLI Goo Lee
 
Ssl 하드웨어 가속기를 이용한 성능 향상
Ssl 하드웨어 가속기를 이용한 성능 향상Ssl 하드웨어 가속기를 이용한 성능 향상
Ssl 하드웨어 가속기를 이용한 성능 향상knight1128
 
Reduce testing time by Multiprocessing in python
Reduce testing time by Multiprocessing in pythonReduce testing time by Multiprocessing in python
Reduce testing time by Multiprocessing in pythonSangJune Ahn
 
Free rtos seminar
Free rtos seminarFree rtos seminar
Free rtos seminarCho Daniel
 
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)내훈 정
 
android_thread
android_threadandroid_thread
android_threadhandfoot
 
Implementing remote procedure calls rev2
Implementing remote procedure calls rev2Implementing remote procedure calls rev2
Implementing remote procedure calls rev2Sung-jae Park
 
[164] pinpoint
[164] pinpoint[164] pinpoint
[164] pinpointNAVER D2
 

Similaire à Blockchain Study(4) - Geth & Smart Contract (20)

김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)
김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)
김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)
 
07 스레드스케줄링,우선순위,그리고선호도
07 스레드스케줄링,우선순위,그리고선호도07 스레드스케줄링,우선순위,그리고선호도
07 스레드스케줄링,우선순위,그리고선호도
 
Tensorflow service & Machine Learning
Tensorflow service & Machine LearningTensorflow service & Machine Learning
Tensorflow service & Machine Learning
 
Interface and Protocol
Interface and ProtocolInterface and Protocol
Interface and Protocol
 
Wire shark 사용법 및 네트워크 개론 살짝 설명
Wire shark 사용법 및 네트워크 개론 살짝 설명Wire shark 사용법 및 네트워크 개론 살짝 설명
Wire shark 사용법 및 네트워크 개론 살짝 설명
 
ROS SERIAL and OpenCR
ROS SERIAL and OpenCRROS SERIAL and OpenCR
ROS SERIAL and OpenCR
 
코딩에는 좋은 노트북이 필요 없다
코딩에는 좋은 노트북이 필요 없다코딩에는 좋은 노트북이 필요 없다
코딩에는 좋은 노트북이 필요 없다
 
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
 
[2D4]Python에서의 동시성_병렬성
[2D4]Python에서의 동시성_병렬성[2D4]Python에서의 동시성_병렬성
[2D4]Python에서의 동시성_병렬성
 
Fluentd with MySQL
Fluentd with MySQLFluentd with MySQL
Fluentd with MySQL
 
Ssl 하드웨어 가속기를 이용한 성능 향상
Ssl 하드웨어 가속기를 이용한 성능 향상Ssl 하드웨어 가속기를 이용한 성능 향상
Ssl 하드웨어 가속기를 이용한 성능 향상
 
Network researching
Network researchingNetwork researching
Network researching
 
Reduce testing time by Multiprocessing in python
Reduce testing time by Multiprocessing in pythonReduce testing time by Multiprocessing in python
Reduce testing time by Multiprocessing in python
 
Free rtos seminar
Free rtos seminarFree rtos seminar
Free rtos seminar
 
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
 
android_thread
android_threadandroid_thread
android_thread
 
Init to systemd
Init to systemdInit to systemd
Init to systemd
 
Implementing remote procedure calls rev2
Implementing remote procedure calls rev2Implementing remote procedure calls rev2
Implementing remote procedure calls rev2
 
Kubernetes
Kubernetes Kubernetes
Kubernetes
 
[164] pinpoint
[164] pinpoint[164] pinpoint
[164] pinpoint
 

Dernier

[Terra] Terra Money: Stability and Adoption
[Terra] Terra Money: Stability and Adoption[Terra] Terra Money: Stability and Adoption
[Terra] Terra Money: Stability and AdoptionSeung-chan Baeg
 
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'Hyundai Motor Group
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)Tae Young Lee
 
Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)Wonjun Hwang
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionKim Daeun
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Kim Daeun
 

Dernier (7)

[Terra] Terra Money: Stability and Adoption
[Terra] Terra Money: Stability and Adoption[Terra] Terra Money: Stability and Adoption
[Terra] Terra Money: Stability and Adoption
 
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)
 
Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
 

Blockchain Study(4) - Geth & Smart Contract

  • 2. - Index - 1. JSON-RPC 2. Smart Contract(1) 3. Q/A
  • 4. JSON-RPC JSON is lightweight data-interchange format. 
 JSON-RPC is a stateless, light-weight remote procedure call protocol.
 This specification defines several data structures and the rules around their process, over sockets, over HTTP, or in many various message passing environments.
 It uses JSON (RFC 4627) as data format. 즉, JSON-RPC는 무상태 프로토콜이다. 독립적인 트랜잭션이 가능하고 다양한 프로세스를 통해 메시지를 전달할 수 있는 것. 자세한 내용은 https://github.com/ethereum/wiki/wiki/JSON-RPC 이곳 참조.
  • 5. JSON-RPC 왜 JSON-RPC를 사용할까? 그 해답은 앞서 geth를 통해서 이더리움을 전송하고 계정을 만들었다. 그런데 매번 console에 들어가서 명령어를 치는 것이 아니라, JSON-RPC를 통해 HTTP 통신을 할 수 있다는 것! JSON-RPC를 통해서 계정을 생성하고 트랜잭션까지 시작해보자.
  • 6. JSON-RPC connect 시작하기 전, 터미널(CMD)가 2개 필요하다. 첫 번째 터미널에서 다음 명령어를 입력한다. get --networkid 4649 --nodiscover --maxpeers 0 - -datadir /PATH_TO/test_data --mine --minerthread 1 --rpc --rpcaddr "0.0.0.0" --rpcport 8545 --rpccorsdomain"*" --rpcapi "admin,db,eth,debug,miner,net,shh,txpool,personal,web3" 2>> /PATH_TO/test_data/geth.log
  • 7. JSON-RPC connect 시작하기 전, 터미널(CMD)가 2개 필요하다. 두 번째 터미널에서 본격적으로 JSON-RPC를 통해 새로운 account를 만들어본다. curl -X POST -H "Content-Type: application/json" --data '{ "jsonrpc":"2.0", "method":"personal_newAccount", "param":["pw3"], "id":10}' localhost:8545
  • 8. JSON-RPC connect 첫 번째 터미널에서 입력한 명령어를 분석하면, get --networkid 4649 --nodiscover --maxpeers 0 - -datadir /PATH_TO/test_data --mine --minerthread 1 --rpc --rpcaddr "0.0.0.0" --rpcport 8545 --rpccorsdomain"*" --rpcapi "admin,db,eth,debug,miner,net,shh,txpool,personal,web3" 2>> /PATH_TO/test_data/geth.log * mine
 - 채굴 활성화한다.
 * minerthread 1
 - 채굴에 사용할 CPU thread 1개만 적용. (기본값 1)
  • 9. JSON-RPC connect 첫 번째 터미널에서 입력한 명령어를 분석하면, get --networkid 4649 --nodiscover --maxpeers 0 - -datadir /PATH_TO/test_data --mine --minerthread 1 --rpc --rpcaddr "0.0.0.0" --rpcport 8545 --rpccorsdomain "*" --rpcapi "admin,db,eth,debug,miner,net,shh,txpool,personal,web3" 2>> /PATH_TO/test_data/geth.log * rpc
 - HTTP-RPC 서버를 활성화 한다.
 * rpcaddr "0.0.0.0"
 - HTTP-RPC 서버의 수신 IP. 기본값은 "localhost".
 - "0.0.0.0"을 지정하면 어떤 인터페이스에 대해 접근해도 수신한다.
  • 10. JSON-RPC connect 첫 번째 터미널에서 입력한 명령어를 분석하면, get --networkid 4649 --nodiscover --maxpeers 0 - -datadir /PATH_TO/test_data --mine --minerthread 1 --rpc --rpcaddr "0.0.0.0" --rpcport 8545 --rpccorsdomain "*" --rpcapi "admin,db,eth,debug,miner,net,shh,txpool,personal,web3" 2>> /PATH_TO/test_data/geth.log * rpcport 8545
 - HTTP-RPC 서버가 요청을 받기 위해 사용하는 포트 (기본값 8545)
 * rpccorsdomain "*"
 - 자신의 노드에 RPC로 접속할 IP 주소
 - 쉼표로 여러 개를 지정 가능. "*"는 모든 IP 접속을 허용
  • 11. JSON-RPC connect 첫 번째 터미널에서 입력한 명령어를 분석하면, get --networkid 4649 --nodiscover --maxpeers 0 - -datadir /PATH_TO/test_data --mine --minerthread 1 --rpc --rpcaddr "0.0.0.0" --rpcport 8545 --rpccorsdomain "*" --rpcapi "admin,db,eth,debug,miner,net,shh,txpool,personal,web3" 2>> /PATH_TO/test_data/geth.log * rpcapi "admin,db,eth,debug,miner,net,shh,txpool,personal,web3"
 - RPC를 허가할 명령어 지정.
 - 기본값은 "eth,net,web3"
  • 12. JSON-RPC connect 시작하기 전, 터미널(CMD)가 2개 필요하다. 두 번째 터미널에서 입력한 curl 명령어를 알아보면, curl -X POST -H "Content-Type: application/json" --data '{ "jsonrpc":"2.0", "method":"personal_newAccount", "param":["pw3"], "id":10}' localhost:8545 method에서 JSON-RPC 서버에서 이뤄질 행위를 정하고, 필요한 파라미터를 param에 담는다. 마지막에 id 부분은 임의의 숫자를 지정하면 된다. 보통 응답과 연결할 때 사용하는 것으로
 요청하는 쪽에서 결정한다.
  • 13. JSON-RPC connect 시작하기 전, 터미널(CMD)가 2개 필요하다. 두 번째 터미널에서 입력한 curl 명령어를 알아보면, curl -X POST -H "Content-Type: application/json" --data '{ "jsonrpc":"2.0", "method":"personal_newAccount", "param":["pw3"], "id":10}' localhost:8545 해당 curl 을 입력하고 나온 결과값을 보면, {"jsonrpc":"2.0", "id":10, "result":"0zxcwetw0gtvgd342rxc0xz"} 으로 결과값이 나온다.
  • 14. JSON-RPC connect 조금 더 다양한 메소드를 실행시켜 보자. method param result personal_listAccounts [] 계정 리스트 eth_mining [] 채굴 활성화 eth_hashrate [] 채굴 속도 eth_blockNumber [] 블록 number eth_getBalance ["계정 값"] 계정 벨런스 personal_unlockAccount ["계정값","PW",300] 계정 잠금 해제 eth_sendTransaction {from:"" , to:"", value:""} 트랜잭션
  • 16. Smart-Contract 스마트 계약은 블록체인에서 동작하는 application 이라고 보면 된다. 스마트 계약을 하기 위해서는 다음 조건이 있다. 1) 튜링 완전성(Turing-Completness)
 - 튜링 머신 에뮬레이터에 저장하는 것.(추상적인 수학 개념상의 기계)
 - 그냥 무한한 저장공간이라고 이해.
 - 이를 통해 세상의 모든 문제를 풀 수 있는 기계 == 튜링기계
 
 * 튜링완전언어 
 - 모든 수학문제를 풀 수 있는 일반적인 알고리즘을 만들어 낼 수 있는 컴퓨터
 
 => 튜링완전언어 + 무한 저장공간 == 모든 계산 가능 기계 == 튜링기계(인간의 뇌)
  • 17. Turing-Completness 튜링완전언어는, 1) 프로세스를 충분히 분할할 수 있는 만큼 작은 단위를 사용할 수 있어야한다. 2) 조건 설정과 반복 명령어가 있어야한다.
 - if (조건문) + for/while (루프문) = 무한루프(반복)가 가능
 = 문제를 풀 때까지 영원히 멈추지 않는 알고리즘 설계가능 그렇다면 왜 명령어의 분할도나 무한루프로 해야할까?
  • 18. Turing-Completness 쉽게 이해하기 위해, 예를 들어보겠다. "저 피자를 먹어라." 이 명령문으로는 피자를 먹는 것 외에 달리 할 수 있는게 없다. 하지만 튜링의 시점에서 보면, 조금 더 작은 단위로 쪼개볼 수 있다. + =
  • 19. Turing-Completness 조금 더 자세히 쪼개면, 배가 고픔을 느낀다 > 눈으로 피자를 확인한다. > 뇌에서 명령을 내리기 위한 전기 스파크 발생 > 전기자극이 뉴런과 시냅스를 거쳐 뻗어나간다. > 근육과 힘줄은 해당 명령을 수신한다. > 목표물체를 향해 손을 뻗는다. > 손을 뻗어 피자를 잡고 입 근처로 끌어온다. > 피자를 향해 입 을 벌린다. > 이빨로 피자를 끊어서 씹는다. > 씹은 피자를 삼킨다.
  • 20. Turing-Completness 이런식으로 잘게 쪼개게 되면, 1) 각 과정의 중간단계에서 '반복’이 가능해진다. 씹는 과정을 반복할 수 있고, 손을 뻗는 동작만 반복할 수 있다. 2) 응용성이 높아져, 피자 뿐만 아니라 치킨도 집을 수 있고 먹을 수 있다.
  • 21. Turing-Completness 눈치가 빠르다면… 이해가 되는가? 이것은 우리 인간이 작동하는 원리와 일맥상통한다고 볼 수 있다. 즉, 튜링완전한 알고리즘이다.
  • 22. 계약(EVM 바이트코드) 프로그램 컴파일 EVM 바이트코드 배포 이더리움 클라이언트 배포 이더리움 네트워크 EVM 바이트코드 블록체인 바이트코드는 블록 내에 저장됨 = 모든 노드에 배포됨
  • 23. 계약(EVM 바이트코드) 프로그램 컴파일 EVM 바이트코드 배포 이더리움 클라이언트 배포 이더리움 네트워크 EVM 바이트코드 블록체인 바이트코드는 블록 내에 저장됨 = 모든 노드에 배포됨
  • 24. 계약(EVM 바이트코드) 프로그램 컴파일 EVM 바이트코드 배포 이더리움 클라이언트 배포 이더리움 네트워크 EVM 바이트코드 블록체인 바이트코드는 블록 내에 저장됨 = 모든 노드에 배포됨
  • 25. 계약(EVM 바이트코드) 터미널 브라우저 콘솔 EVM EVM 바이트코드 이더리움 네트워크 ssh JSON-RPC 블록체인(모든 노드가 동일한 데이터를 보유) 이더리움 클라이언트 •데이터 확인 등은 각 노드에서 실행 가능 •데이터 변경은 갱신 내용을 네트워크에 전달