이더리움과 DApp
비탈릭 부테린
• Bitcoin 의 한계점에 대한 개선 의지가 없음에 실망.
• Payload 에 좀 더 다양한 정보를 넣고 싶은 욕구.
• Block chain 을 좀 더 다양하게 활용할 수 있는 방법 제공.
Ethereum
Ethereum
Ethereum
• 2014년 - 이더리움 재단 구성, ICO 로 개발 자금 3만 bitcoin
확보
• 2015년 7월 - 이더리움 서비스 개시
• 2016년 4월 - 1.5억 달러 투자금 유치
• 2016년 6월 - DAO 에 대한 해킹사건 발생, Hard fork 진행
• 2017년 6월 - 시장규모 200억 달러(20조), 2위의 암호화폐
• 1단계 프론티어(Frontier) : 네트워크를 형성 단계
• 2단계 홈스테드(Homestead) : 생태계가 구축되는 단계
• 3단계 메트로폴리스(Metropolis) : 대중화를 위한 사회적 인프라가 형성 단
계
• 2017년 10월 16일 4,370,000번째 블록을 기준으로 1차로 비잔티움
(Byzantium) 하드포크가 이루어졌다.
• 2018년에 2차로 콘스탄티노플(Constantinople) 하드포크가 진행될 예
정이다
• 4단계 세레니티(Serenity) : 평정을 찾는 마지막 단계
Ethereum vs Bitcoin
Ethereum
Block 생성시간 15 초 10 분
보상금 5 ETH
12.5 BTC
2년마다 반감기
Consensus PoW -> PoS PoW
Payload 스마트 계약 + 거래원장 거래원장
Ethereum 의 단위
Ethereum
GAS
Ethereum
gas는 이더리움에서 송금이나 스마트 계약
을 실행할 때 수수료를 책정하기 위해 만든
단위
최대 가스량(Gas Limit) 과 가스 가격(Gas
Price) 입력
가스는 채굴자에게 보상으로 주어진다.
GAS 소모량
Ethereum
https://docs.google.com/spreadsheets/d/1n6mRqkBz3iWcOlRem_mO09G
tSKEKrAsfO7Frgx18pNU/edit#gid=0
Solidity
Smart Contract Build
EVM
OP code
OP code
NodeGas 남음
Gas 부족
에러발생
남는 Gas 환불
모든 Gas 소진, 상태 rollback
남는 Gas 환불, 상태 rollback
Dapp Architecture
Ethereum
Web
Server
EVM
Web3.js
Web UI
github
EVM
Mining
EVM
Mining
EVM
Mining
EVM
MiningFrontend
App
Contract
Source
Compiled
Contract
미스트
메타마스크
Block
Chain
투명한 투표
Ethereum
Vote
Smart
Contract
투표 발행자
후보자
유권자
투표 생성 후보자 등록 유권자 등록 투표 결과 확인
투명한 투표 – Smart Contract
Ethereum
class CleanVote {
후보자들 = [];
Max후보자수 = 0;
유권자들 = [];
Max유권자수 = 0;
투표기한 = 0;
Constractor(후보자수, 유권자수, 기한) {
Max후보자수 = 후보자수;
Max유권자수 = 유권자수;
투표기한 = 기한;
}
boolean 후보자등록(후보자명) {
if(투표기한 < 현재날짜) return null;
if(Max후보자수 <= 현재후보자수) return false;
후보자들[후보자명] = 0;
return true;
}
token 유권자등록(유권자번호) {
if(투표기한 < 현재날짜) return null;
if(Max유권자수 <= 현재유권자수) return null;
if(유권자들 have 유권자번호) return null;
(token.비밀키, token.공개키) = 토큰생성();
유권자들[유권자번호] = token.공개키;
return token.비밀키;
}
boolean 투표(유권자번호, token.비밀키, 후보자명) {
if(투표기한 < 현재날짜) return null;
if(유권자들 don't have 유권자번호) return false;
if(후보자들 don't have 후보자명) return false;
if(복호화(암호화(유권자들[유권자번호] + 유권자번호), token.비밀키)
!= 유권자번호) return false;
후보자들[후보자명] += 1;
유권자들[유권자번호] = null;
return true;
}
}
투명한 투표 – Frontend App
Ethereum
투표 등록
투표생성
3후보자수
2018/03/31기한
100유권자수
후보자 등록
후보자 등록
2현재 후보자수
김계떡후보자 명
3최대 후보자수
유권자 등록
유권자 등록
김계떡
홍길동
성춘향
현재 후보자
13242유권자 번호
투표
투표
김계떡 홍길동 성춘향
13242유권자 번호
42F0A143ED9A36Token
Token
Ethereum
• 내부 화폐 :
• ICO : 토큰 사전 판매
ICO는 Initial Coin Offering의 약자
• DAO : 탈중앙화된 자율조직 Decentralized Autonomous Organization
https://etherscan.io/tokens
https://www.iconews.co.kr/
Uncle blockUncle block
합의 알고리즘
Ethereum
99
100
100 101
102
102 103 104
• Heavy 한 블럭이 Main block 임.
• Uncle block 에 대해서도 보상함. (7/8 ... 1/8)
• Uncle block 의 tracsaction 은 모두 무시됨.
• Uncle block 은 최대 2개 최고 7단계 이전까지만 찾을 수 있음.
프로젝트 입찰
Ethereum
Project Bidding
Smart
Contract
발주자
프리랜서
프로젝트
등록
업무 수락 완료 요청
지불 수락
반환 요청
프로젝트 입찰 – Smart Contract
Ethereum
class JobBidding {
계약계정잔액 = 0;
작업내용 = null;
작업기한 = null;
계약해지날짜 = null;
발주자공개키 = null;
발행토큰 = null;
지불계좌번호 = null;
Constractor(설명, 금액, 기한, 해지날짜, 공개키) {
작업내용 = 설명;
계약계정잔액 = 금액;
작업기한 = 기한;
계약해지날짜 = 해지날짜;
발주자공개키 = 공개키;
}
token 업무수락() {
if(작업기한 < 현재날짜) return null;
if(계약계정잔액 == 0) return null;
if(발행토큰 is not null) return null;
(token.비밀키, token.공개키) = 토큰생성();
발행토큰 = token.공개키;
return token.비밀키;
}
boolean 완료요청(계좌번호, token.비밀키) {
if(작업기한 < 현재날짜) return false;
if(계좌번호 is not null) return false;
if(복호화(암호화(발행토큰 + 계좌번호), token.비밀키)
!= 계좌번호) return false;
지불계좌번호 = 계좌번호;
return true;
}
boolean 지불수락(발주자비밀키) {
if(지불계좌번호 is null) return false;
if(복호화(암호화(발주자공개키 + 지불계좌번호), 발주자비밀키)
!= 지불계좌번호) return false;
계좌이체(지불계좌번호, 계약계정잔액);
계약계정잔액 = 0;
return true;
}
boolean 반환요청(발주자비밀키, 계좌번호) {
if(계약계정잔액 == 0) return false;
if(계약해지날짜 > 현재날짜) return false;
if(복호화(암호화(발주자공개키 + 계좌번호), 발주자비밀키)
!= 계좌번호) return false;
계좌이체(계좌번호, 계약계정잔액);
계약계정잔액 = 0;
return true;
}
}
프로젝트 입찰 – Frontend App
Ethereum
프로젝트 등록
프로젝트 생성
어쩌구 저쩌구업무내용
2018/12/31기한100금액
프로젝트 검색
업무 수락
1) 어쩌구 저쩌구
2) 어쩌구 저쩌구
3) 어쩌구 저쩌구
4) 어쩌구 저쩌구
5) 어쩌구 저쩌구
업무
지불 요청
요청
2A8136C801E74Token
2020/01/01해지A198E1공개키
1023-123-7732계좌번호
지불 수락
수락
2A8136C801E74발주자 비밀키
반환 요청
요청
2A8136C801E74발주자 비밀키
34245-074-3926계좌번호
Account
Ethereum
외부 소유 어카운트 (EOA, Externally Owned Account)
컨트랙트 어카운트(CA , Contract Accounts)
EOA EOA
EOA CA
CA EOA
CA CA
Ether scan
Ethereum
https://etherscan.io/
Dapp search
Ethereum
https://www.stateofthedapps.com/
Ponzi Coin
Ethereum

이더리움과 DApp

  • 1.
  • 2.
    비탈릭 부테린 • Bitcoin의 한계점에 대한 개선 의지가 없음에 실망. • Payload 에 좀 더 다양한 정보를 넣고 싶은 욕구. • Block chain 을 좀 더 다양하게 활용할 수 있는 방법 제공. Ethereum
  • 3.
    Ethereum Ethereum • 2014년 -이더리움 재단 구성, ICO 로 개발 자금 3만 bitcoin 확보 • 2015년 7월 - 이더리움 서비스 개시 • 2016년 4월 - 1.5억 달러 투자금 유치 • 2016년 6월 - DAO 에 대한 해킹사건 발생, Hard fork 진행 • 2017년 6월 - 시장규모 200억 달러(20조), 2위의 암호화폐 • 1단계 프론티어(Frontier) : 네트워크를 형성 단계 • 2단계 홈스테드(Homestead) : 생태계가 구축되는 단계 • 3단계 메트로폴리스(Metropolis) : 대중화를 위한 사회적 인프라가 형성 단 계 • 2017년 10월 16일 4,370,000번째 블록을 기준으로 1차로 비잔티움 (Byzantium) 하드포크가 이루어졌다. • 2018년에 2차로 콘스탄티노플(Constantinople) 하드포크가 진행될 예 정이다 • 4단계 세레니티(Serenity) : 평정을 찾는 마지막 단계
  • 4.
    Ethereum vs Bitcoin Ethereum Block생성시간 15 초 10 분 보상금 5 ETH 12.5 BTC 2년마다 반감기 Consensus PoW -> PoS PoW Payload 스마트 계약 + 거래원장 거래원장
  • 5.
  • 6.
    GAS Ethereum gas는 이더리움에서 송금이나스마트 계약 을 실행할 때 수수료를 책정하기 위해 만든 단위 최대 가스량(Gas Limit) 과 가스 가격(Gas Price) 입력 가스는 채굴자에게 보상으로 주어진다.
  • 7.
    GAS 소모량 Ethereum https://docs.google.com/spreadsheets/d/1n6mRqkBz3iWcOlRem_mO09G tSKEKrAsfO7Frgx18pNU/edit#gid=0 Solidity Smart ContractBuild EVM OP code OP code NodeGas 남음 Gas 부족 에러발생 남는 Gas 환불 모든 Gas 소진, 상태 rollback 남는 Gas 환불, 상태 rollback
  • 8.
  • 9.
    투명한 투표 Ethereum Vote Smart Contract 투표 발행자 후보자 유권자 투표생성 후보자 등록 유권자 등록 투표 결과 확인
  • 10.
    투명한 투표 –Smart Contract Ethereum class CleanVote { 후보자들 = []; Max후보자수 = 0; 유권자들 = []; Max유권자수 = 0; 투표기한 = 0; Constractor(후보자수, 유권자수, 기한) { Max후보자수 = 후보자수; Max유권자수 = 유권자수; 투표기한 = 기한; } boolean 후보자등록(후보자명) { if(투표기한 < 현재날짜) return null; if(Max후보자수 <= 현재후보자수) return false; 후보자들[후보자명] = 0; return true; } token 유권자등록(유권자번호) { if(투표기한 < 현재날짜) return null; if(Max유권자수 <= 현재유권자수) return null; if(유권자들 have 유권자번호) return null; (token.비밀키, token.공개키) = 토큰생성(); 유권자들[유권자번호] = token.공개키; return token.비밀키; } boolean 투표(유권자번호, token.비밀키, 후보자명) { if(투표기한 < 현재날짜) return null; if(유권자들 don't have 유권자번호) return false; if(후보자들 don't have 후보자명) return false; if(복호화(암호화(유권자들[유권자번호] + 유권자번호), token.비밀키) != 유권자번호) return false; 후보자들[후보자명] += 1; 유권자들[유권자번호] = null; return true; } }
  • 11.
    투명한 투표 –Frontend App Ethereum 투표 등록 투표생성 3후보자수 2018/03/31기한 100유권자수 후보자 등록 후보자 등록 2현재 후보자수 김계떡후보자 명 3최대 후보자수 유권자 등록 유권자 등록 김계떡 홍길동 성춘향 현재 후보자 13242유권자 번호 투표 투표 김계떡 홍길동 성춘향 13242유권자 번호 42F0A143ED9A36Token
  • 12.
    Token Ethereum • 내부 화폐: • ICO : 토큰 사전 판매 ICO는 Initial Coin Offering의 약자 • DAO : 탈중앙화된 자율조직 Decentralized Autonomous Organization https://etherscan.io/tokens https://www.iconews.co.kr/
  • 13.
    Uncle blockUncle block 합의알고리즘 Ethereum 99 100 100 101 102 102 103 104 • Heavy 한 블럭이 Main block 임. • Uncle block 에 대해서도 보상함. (7/8 ... 1/8) • Uncle block 의 tracsaction 은 모두 무시됨. • Uncle block 은 최대 2개 최고 7단계 이전까지만 찾을 수 있음.
  • 14.
  • 15.
    프로젝트 입찰 –Smart Contract Ethereum class JobBidding { 계약계정잔액 = 0; 작업내용 = null; 작업기한 = null; 계약해지날짜 = null; 발주자공개키 = null; 발행토큰 = null; 지불계좌번호 = null; Constractor(설명, 금액, 기한, 해지날짜, 공개키) { 작업내용 = 설명; 계약계정잔액 = 금액; 작업기한 = 기한; 계약해지날짜 = 해지날짜; 발주자공개키 = 공개키; } token 업무수락() { if(작업기한 < 현재날짜) return null; if(계약계정잔액 == 0) return null; if(발행토큰 is not null) return null; (token.비밀키, token.공개키) = 토큰생성(); 발행토큰 = token.공개키; return token.비밀키; } boolean 완료요청(계좌번호, token.비밀키) { if(작업기한 < 현재날짜) return false; if(계좌번호 is not null) return false; if(복호화(암호화(발행토큰 + 계좌번호), token.비밀키) != 계좌번호) return false; 지불계좌번호 = 계좌번호; return true; } boolean 지불수락(발주자비밀키) { if(지불계좌번호 is null) return false; if(복호화(암호화(발주자공개키 + 지불계좌번호), 발주자비밀키) != 지불계좌번호) return false; 계좌이체(지불계좌번호, 계약계정잔액); 계약계정잔액 = 0; return true; } boolean 반환요청(발주자비밀키, 계좌번호) { if(계약계정잔액 == 0) return false; if(계약해지날짜 > 현재날짜) return false; if(복호화(암호화(발주자공개키 + 계좌번호), 발주자비밀키) != 계좌번호) return false; 계좌이체(계좌번호, 계약계정잔액); 계약계정잔액 = 0; return true; } }
  • 16.
    프로젝트 입찰 –Frontend App Ethereum 프로젝트 등록 프로젝트 생성 어쩌구 저쩌구업무내용 2018/12/31기한100금액 프로젝트 검색 업무 수락 1) 어쩌구 저쩌구 2) 어쩌구 저쩌구 3) 어쩌구 저쩌구 4) 어쩌구 저쩌구 5) 어쩌구 저쩌구 업무 지불 요청 요청 2A8136C801E74Token 2020/01/01해지A198E1공개키 1023-123-7732계좌번호 지불 수락 수락 2A8136C801E74발주자 비밀키 반환 요청 요청 2A8136C801E74발주자 비밀키 34245-074-3926계좌번호
  • 17.
    Account Ethereum 외부 소유 어카운트(EOA, Externally Owned Account) 컨트랙트 어카운트(CA , Contract Accounts) EOA EOA EOA CA CA EOA CA CA
  • 18.
  • 19.
  • 20.