Skip to content

Latest commit

 

History

History
315 lines (176 loc) · 10 KB

1회.md

File metadata and controls

315 lines (176 loc) · 10 KB

Klaytn study 1회

활동 내용

  • Bitcoin: A Peer-to-Peer Electronic Cash Sys 논문 읽기
  • 비트코인 논문 읽은 후 더 공부가 필요하겠다고 생각하여 주요개념(비트코인 블록의 구조, 작업 증명, 지갑과 지갑 종류, 거래의 구조, 비트코인 노드 종류) 나눠서 조사 후 2회에 공유하기로 함
  • 인프런 강의(1. 인트로, 2. 기존 블록체인 플랫폼의 약점, 3. 클레이튼 이해하기) 수강
  • 인프런 강의(블록체인과 솔리디티) 수강 후 투표앱 코딩
  • 클레이튼 공부도 더 필요하다고 생각하여 클레이튼 docs 나눠서 읽고 3회차에 공유하기로 함
  • 3회차에 이더리움으로 구현한 투표앱을 클레이튼으로 구현하기로 계획되어있었으나 클레이튼이 솔리디티 기반이라 변하는게 없는 것 같아 클레이튼 docs tutorial에서 klaystagram을 구현하기로 계획 변경함

공부 내용

이더리움과 스마트 컨트랙트

이더리움 : 블록체인 플랫폼. 스마트 컨트랙트를 작성할 수 있음

스마트 컨트랙트: 블록체인 상에 존재하는 계약서. 블록체인 내에 들어감. 솔리디티로 작성할 수 있음.

DApp(Decentralized Application)

블록체인과 이더리움의 문제

  1. privacy : 데이터 조작이 불가능하므로
  2. 트랜잭션 비용: 트랜잭션을 실행시킬 때 gas 비용 발생. 매번 변하는 gas와 수수료는 부담
  3. 트랜잭션 속도 : 중앙화된 시스템에 비해 느림. 1초에 2000개. 이더리움은 1초에 20개를 처리할 수 있다고 알려져 있음. 이
  4. 블록 사이즈 : 모든 채굴자가 모든 블록을 가지고 있어야하기 때문에 (2기가)

따라서 중앙화되어야하는지 탈중앙화되어야하는지 잘 생각해봐야함

솔리디티

스마트 컨트랙트를 만들기 위한 언어. 고수준 언어. EVM(ethereum virtual machine)을 타겟으로 디자인

특징

  1. 튜링완전 : 반복문과 제어문 사용 가능
  2. msg.sender: 메시지를 보낸 사람, msg.value : 메시지 보낸 값

스마트 컨트랙트 구조

// 1. 컨트랙트 선언
contract Sample {
    // 2. 상태 변수 선언
    uint256 data;
    address owner;
    
    // 3. 이벤트 정의
    event logData(uint256 dataToLog);
    
    // 4. 함수 변경자 정의
    modifier onlyOwner() {
        if(msg.sender != owner) revert();
        _;
    }
    
    // 5. 생성자
    function Sample(uint256 initData, address initOwner) {
        data = initData;
        onwer = initOwner;
    }
    
    // 6. 함수(메소드) 정의
    function getData() returns (uint256 returned) {
        return data;
    }
    function setData(uint256 newData) onlyOwner {
        logData(newData);
        data = newData;
    }
}

데이터 타입

string(utf-8로 인코딩), bytes12

mapping : 키와 value의 쌍

동적배열과 정적배열 모두 사용 가능.

인터페이스 사용 가능

데이터 위치

storage - 상태변수, 로컬변수 (블록체인에 저장)

memory - 로컬변수 (사용 후 증발)

가시성

누가 접근할 수 있는지를 정의할 수 있음

external - this.f()를 통해 호출

public - 모든 방법으로 접근 가능

internal - 내부적으로만 접근 가능. this 사용 불가능

private - internal과 비슷하지만 상속된 contract에서 사용 불가능

가스

  • 가스 리밋 : 수수료의 한계치. 낮게 설정하면 일을 끝마치기 전에 수수료를 다 쓰면 일을 취소시키고 수수료를 환불해주지 않음.
  • 가스 프라이스 : 가스당 가격. 비싸지면 먼저 채굴되는 경향이 있음
  • 가스 프라이스 * 가스 사용량 = 수수료

클레이튼

  • 블록 생성 시간 1초
  • 초당 트랜잭션 3000+
  • 저렴한 트랜잭션 수수료
  • 확장성 & privacy
  • solidity, truffle framework 지원

기존 블록체인 플랫폼의 약점 : scalability(확장성)

TPS+block interval

TPS(transaction per second) : 초당 몇 개의 거래 처리

  • visa tps 1700
  • 비트코인 tps 7(현실적으로는 2~3)
  • 이더리움 tps 12~20

block interval : 블록 생성 간격

  • 비트코인 10분
  • 이더리움 15초~20초

이더리움 20tps + 15초 block interval

20 * 15 = 300 transactions

tps가 10000 & block interval 10분이면? 재수없으면 친구한테 송금이 최대 10분 걸릴 수 있음.

기존의 블록체인은 왜 느린가?

참여하는 노드가 많아진다고 해서 더 빨라지는 것은 아니다 (원래는 서버를 늘림. 블록체인에서는 해당x)

모든 노드가 똑같은 일을 해야됨.

비트코인 & 이더리움

  • 많은 양의 트랜잭션 처리하기 부족
  • 네트워크 자체 속도 느림

기존 블록체인 플랫폼의 약점 : Finality : 거래가 변경 불가라는 합리적인 보장받기까지 기다려야 되는 시간

블록이 Final하다는 것은? 블록에 담긴 거래가 바뀔 수 없다는 걸 보증

비트코인과 이더리움은 최종성 부족

트랜잭션이 바로 처리되지 않음. 하지만 나중에 될 것이라는 확률론적 최종성만 제공(나중에 안되어있을 수 있음)

  • 비트코인 블록 채굴 평균시간 10분. Finality까지의 평균시간 60분 (6번의 검증)
  • 이더리움 블록채굴 평균시간 15초. Finality까지의 평균시간 6분(25번의 검증)

기존 블록체인 플랫폼의 약점 : Fork(블록들의 연결이 2개 이상의 분기로 나눠지는 현상)

pow(작업증명) 방식

  • 블록체인에 블록 추가하기 위해 문제를 품(Hash값 찾기)
  • 여러 노드가 같이 풀었다면 분기 발생
  • 서로 풀었다고 알리게 됨. 각자 받은 블록이 다르게 됨. --> Longest chain rule
    • 하지만 내가 전체 컴퓨터 파워의 51%를 가지고 있다면 더 많은 블록을 내가 채굴할 수 있음(악용 소지)

클레이튼 이해하기

  1. 합의(Consensus)

    public 블록체인 : pow, pos 등등

    private 블록체인: pBFT, Raft 등등

    BFT(비잔티움 결함 허용)

    • 참여 노드 수 제한/ 성능 높임
    • 분산화 약화/ 투명성 저하

    클레이튼 합의 알고리즘 IBFT(이스탄불 비잔티움 결함 허용)

    • 공개를 통한 개인적인 합의 신뢰 모델
    • 합의 달성 소수 private 노드와 블록 생성결과 접근 및 검증 노드로 구성되어있음
    1. propose 노드 중 하나가 proposer로 선정

    2. pre-prepare proposer노드가 블록을 만들어서 다른 노드들에게 제안하게 됨.

    3. preparer 검증자 노드들이 proposer에게 메시지를 받으면 자신을 제외한 다른 노드들에게 믈록을 잘 받았다고 메시지를 보내게 됨.

    4. commit 블록을 수락할 것인지 다른 노드와 소통하면서 결정함. 괜찮다고 생각한는지 각자 응답을 보냄. 만약 3분의 2이상이 합의했으면 블록 승인을 하게 됨.(Finality 결정)

    • 장점 : 노드들끼리 합의하게 됨
  2. 블록 생성 사이클(cycle)

    • 블록 생성 주기 = 라운드(round)
    • 블록 생성 간격 약 1초

    제안자와 위원회 선택

    • 제안자를 무작위 & 결정적으로 Governance Council 노드들 중 뽑음
    • 각각의 합의 노드가 가장 최근의 블록 헤더에서 파생된 난수 사용 자기가 라운드에 선택됐는지 증명함
    • 제안자라는 것을 증명하기 위해 제안자의 공개키 통해 입증가능한 암호 증명을 사용
    • 누가 제안자고 누가 위원회인지 파악이 되면 제안자가 블록 만들고(tx pool에서 선택) 합의

    블록 전파

    • 위원회의 3분의 2 이상의 합의를 받아야 블록 생성
    • 프록시 노드 통해 엔드포인트 노드들에게 전달됨
  3. 네트워크 구조

    CNN: Consensus node network

    • cn은 서로 연결되어있음. 합의 과정에서 최대한 빨리 커뮤니케이션을 하기 위해. cn은 외부와 직접적으로 접촉 불가능함. 접근은 core cell 참여자로써 proxy node를 내세움

    PNN: Proxy node network

    ENN: Endpoint node network : core cell network와 연결되어있음. 아무나 en가 될 수 있음.

    core cell network

    CN bootnode

    PN bootnode

    EN bootnode : 어떤 프록시 노드와 연결해야할지 정보 제공

  4. 코어 셀(core cell)

    사용자가 많아져서 확장이 필요할 때

    • 일반적 : 서버늘리고 request 분할 처리
    • 노드가 늘어난다고 성능 늘어나는 것 x
    • 클레이튼 : 노드 자체의 성능(램, cpu 등)을 늘림

    CN(합의 노드) 참여 조건

    • physical core가 40개 이상
    • 256기가 램
    • 1년치 데이터 약 14테라바이트 저장
    • 10g 네트워크

    Core cell 구조 : 하나의 CN과 여러 대의 pn으로 이루어짐

    • cN은 연결에 필요한 자원이 한정적.
    • pn을 이용해서 endpoint와 연결(cn은 이 연결때문에 합의에 문제생기면 안됨)
  5. 서비스 체인

    메인넷과 분리되어 운용되는 서비스 체인

    언제 쓰이나?

    • 특별한 노드환경에서 설정
    • 보안 수준 맞춤형으로 설정
    • 많은 처리량 요구/메인넷 배포시 경제성 낮음

    독립된 서비스 공간을 구축해서 필요할 때 메인넷에 신뢰를 고정

    서비스 체인에서는 gas 비용 안받게 설정 가능함

  6. 이더리움과 클레이튼 차이

    이더리움

    • 단일 네트워크(누구나 블록 생성 가능)
    • 가장 먼저 블록을 만들고 많이 전파해야함
    • PoW(작업증명)
    • 마이닝 노드 : 블록을 쓰고 네트워크에 전파한 노드
    • 어떤 노드든 채굴할 수 있어 최대한 많이 연결시켜야함

    클레이튼

    • Two layer architecture trust model
    • 매 라운드마다 합의 노드들 중 하나가 뽑혀서 블록을 씀
    • cn이 블록을 생성하기 때문에 endpoint가 core cell에 붙음