3주차
방화벽이 없어 신뢰성이 없음
모든 데이터의 복제
블록체인 용어
의견일치 알고리즘
-BFT, Pow, Pos
데이터구조
-체인
-DAG(다이렉트 비순화적 그래프)
계좌모델
-UTXO
-계좌기반
처리모델
-비트코인 스크립트
-EVM
-Wasm
컨센서스 알고리즘
-분산 컴퓨팅과 다인자 시스템에서의 근본적인 문제
-여러 프로세스에서 같은 값을 갖는 합의에 도달하는 알고리즘
비잔틴 장군 문제
-세명의 장군이 메신저를 통해 통신 : 배신자가 될 수 있음
-장군 중 2/3가 배신가 아니어야 해결가능
-N >= 3f+1 : f는 배신 노드, 2f+1은 정직 노드
결점
-일반 결점 : 충돌(응답 없음)
-비잔틴 결점 : 충돌 or 오작동(일관성 없는 응답 반환)
블록체인 네트워크
-누구든 네트워크에 조인 가능
-누구든 블록 제안 가능
-누구든 정직노드가 될수있으나, 노드작동에 전문적 지식이 없을 수있음/ 해커가 될수있음/ 네트워크 파괴를 원하는 적이될수있음
-비잔틴장군문제와 정확히 매칭됨
PBFT : 실질적 비잔틴 장애 허용
-실질적 해결책
-비동기 네트워크에서 배신자 노드가 f개 있을 때, 총 노드 개수가 3f+1개 이상이면 해당 네트워크에서 이루어지는 합의는 신뢰할 수 있다는 것을 수학적으로 증명한 알고리즘
Pow : 작업 증명
-해시 알고리즘의 성질 사용 : 해시의 역함수를 찾는 것이 불가능
-20개의 주요한 제로를 갖는 블록의 해시된 값을 찾음
-작업증명은 엄밀하게 합의 알고리즘은 아님 : 참여자들 간에 합의 존재
-가장 긴 체인이 표준 체인임
-네트워크 보안은 연산 파워를 제공함으로써 보장됨(해시파워)
-해시파워가 있을수록, 더 안전한 네트워크임
장점
-몇개의 노드가 참여하고 있는지 알필요 없음
-몇개의 토큰이 분산되어 있는지 알필요 없음
단점
-높은 에너지 소모
-비례적 최종성 : 51프로 공격의 도임
-독특한 하드웨어를 요구하기때문에 노드를 작동시키기 어려움 : 그래서 사람들은 마이닝 풀에 돈을 투자함
Pos : 지분증명
검증인
-네이티브 토큰의 적당량을 점유함
-블럭을 제안할수있음
-제안된 블록을 검증할수있음
-행동을 기반으로 보상 받음
지분증명 자체로는 합의에 이르는 과정을 설명할 수 없음
-블럭 제안자를 어떻게 선택하는가
-검증인으로투버 검증결과를 어떻게 모으는가
채굴자들이 블록체인에 블록을 추가하기 위해 복잡한 수학적 문제를 해결하고 보상을 받기 위해 경쟁하는 PoW와 달리, PoS 검증자들은 보유하고 있는 암호화폐의 양을 기준으로 블록체인에 블록을 추가하도록 선택되며, 이를 담보로 '지분' 의사가 있다. 이것이 그것이 지분 증명이라고 불리는 이유이다.
출처: https://proprogrammer.tistory.com/312 [우리 모두 창업합시다!:티스토리]
장점
-장기간동안 네이티브 토큰을 잠금
-조인이쉬움
-낮은 에너지 소모
단점
-떠나기 쉬움
-돈으로 체인을 조작하기 쉬움
데이터구조
-어떻게 트랜잭션의 조직되고 연결되는가
-데이터가 조작되지 않음을 어떻게 보장하는가
블럭체인 : 블럭의 체인
DAG : 다이렉트 비순환적 그래프
제네시스 블럭
어떻게 블럭의 데이터 조작을 막을수있는가?
해시 함수
DAG : 방향성 비사이클 그래프
블럭체인은 단순함
-특정 트랜잭션 전에 어떤 트랜잭션이 처리되었는지 구별하기 쉬움
DAG는 보다 복잡함
-구별을 위한 메커니즘을 만들어 주어야함
-트랜잭션은 확인된 다른 트랜잭션에 의해 참조되어야함
-혹은 글로벌 동기화포인트인 펜스를 가져야 함
3와4 사이에 엄격한 순서가 없음
5는 잊혀질 수 있음, 다른 트랜잭션에 의해 참조되지 않음
DAG기반 플랫폼:
히드라, iost, 수이, 팬텀
계좌모델
어떻게 저장소 레이아웃을 저장소 계자처럼 보이게 하는가
블록체인의 데이터는 계좌 잔고 정보임:
엘리스는 토큰을 얼마 가지고있는가
UTXO : 사용되지않은 트랜잭션 아웃풋
계좌조회 불편
거래내역 편리
변동을 받기 원하는 경우라면?
10을 갖고 있고 5를 엘리스에게 준 후 다시 남은 5를 나에게 보냄
여러개의 UTXO를 가진 경우 어떻게 내 잔고를 아는가?
계좌 모델 - 계좌기반 모델
계좌조회 편리
거래내역 불편
엘리스의 트랜잭션 히스토리는 어떻게 만드는가?
비트코인 스크립트
인풋 + 아웃풋 스크립트
인풋 : 방해물을 해결하기 위해 사용자에 의해 제공됨
아웃풋 : 트랜잭션 아웃풋에서 발견됨. 아웃풋을 보내기위해 필요한 장애물임
예제
이더리움 랭귀지
솔리디티 바이퍼 율 페
솔리디티
Solidity는 스마트 컨트랙트 구현을 위한 고수준 객체 지향 언어이며, 스마트 컨트랙트는 이더리움 State의 account들의 동작을 제어하는 프로그램이라는 것입니다.
스마트 컨트랙트에 대해 간단히 설명하자면, 블록체인 상에서 작동되는 일종의 코드입니다. 'Alice가 Bob에게 1 이더를 주면, Bob은 Alice에게 물건을 전송한다.' 와 같은 현실의 계약이 코드로 작성되어, 조건이 맞는 경우 자동으로 집행되게 하는 것이죠. 그래서 컨트랙트, 즉 '계약'이라는 명칭이 붙었습니다.
바이퍼
Ethereum에서 Vyper라는 새로운 프로그래밍 언어를 발표했다.
현재 출시된 버전은 Vyper v0.1.0-beta.1로 베타 버전이고, Solidity와 유사한 EVM(Ethereum Virtual Machine) 바이트 코드로 컴파일되고, 코딩의 구성이 Python과 비슷하다.
다시 말해 Vyper는 EVM-이더리움의 가상 머신 바이트 코드로 컴파일 된다는 것이 특징이다.
보다 더 전체 프로세스를 보다 쉽고 사용자에게 친숙한 환경이다.
Vyper의 특징은 스마트 계약에 대한 이해를 단순화하는 것이다. Ethereum의 핵심인 스마트 계약이 완벽하고 효과적으로 실행되기 위해서 코드는 매우 효율적이어야 한다. 이 요구 사항을 충족시키지 못하면 여러 문제가 발생한다.
출처: https://allblackk.tistory.com/359 [Allblackk:티스토리]
Yul
-이더리움을 위함 중간언어
-EVM과 Ewasm을 지원
Yul+
-저수준이며, 율을 효율적으로 확장한 언어
Fe
-이더리움 가상머신을 위한 정적 타입의 모델
EVM : 이더리움 가상머신
머신상태 : 트랜잭션 발생시 생성 후 소멸
가상 롬, 저장소 : 계속 유지
이더리움의 컴파일러 시스템
Wasm : 웹 어셈블리
WASM은 WebAssembly의 약자입니다[1]. 이름에서 짐작할 수 있듯, Web-웹 환경에서 Assembly-네이티브 어셈블리에 근접한 성능을 목표로 하는 표준 코드 스팩입니다.
Assembly란 대게 CPU가 이해할 수 있는 OPCODE 바로 직전, 이를 사람이 읽고 작성할 수 있는 최종 수준 언어를 의미합니다.
즉, 서로 이질적으로 느껴지는 상위 레이어 웹과 코어 레이어 네이티브, 두 구간을 연결하기 위한 최소한의 중간 단계를 정의하는 것을 목표로 합니다.