Byzantine Fault Tolerance
- 분산 시스템에서 컴퓨터의 일부가 고의로 작동하거나 악의적인 행동을 할 때에도 전체 시스템이 안전하게 동작하는 방법을 제공하는 알고리즘이다
PeerReview
- 노드 E는 클라이언트 D를 위해 객체를 저장한다
- 노드 E는 클라이언트 B에게 숨기려고 시도한다
- 두 클라이언트는 E에서 얻은 인증자를 브로드 캐스트한다
- 나중에 A는 E를 감사하고 불일치를 발견하며 E를 드러낸다
- 마침내 노드 A는 E에 대한 증거를 브로드캐스트하여 다른 노드가 E를 드러낼 수 있도록 한다
pBFT
- 모델이 작동하려면 네트워크의 악의적인 노드가 특정 기간에 전체 노드의 1/3과 동시에 동등하거나 초과하지 않아야 한다
- pBFT합의의 각 라운드는 4단계로 구성된다
- 클라이언트는 서비스 작업을 호출하기 위해 리더 노드에 요청
- 리더 노드는 요청을 백업 노드에게 멀티캐스트
이더리움 합의 알고리즘
- 검증자 참여: 검증자로 참여하려면 32ETH를 예치하고, 실행 합의 검증자 클라이언트를 실행해야한다
- 활성화 큐: 예치한 후 사용자는 활성화 큐에 참여하여 네트워크에 참여하는 새로운 검증자의 속도를 제한한다
- 검증자 역할: 활성화된 검증자는 이더리움 네트워크에서 피어로부터 새로운 블록을 수신한다. 거래는 블록에 포함될 수 있는지 확인하기위해 재실행되고 블록 서명이 확인된다. 그런 다음 검증자는 블록에 대한 찬성을 네트워크에게 전송한다
- Staking
- 블록체인 네트워크에서 자신이 가진 일정량의 암호화폐를 걸어두고, 이를 통해 네트워크의 운영에 참여하여 보상을 받는 프로세스를 의미한다
- 32이더 스테이킹
- 랜덤 밸리데이터 선정
- 블록 제안 및 검증: 선택된 밸리데이터는 새로운 블록을 생성하고 이를 검증한다
- 보상 및 벌칙: 밸리데이터는 블록 생성에 성공하면 보상을 받고, 부정행위 시 일부 또는 전체 스테이킹 자산을 잃을 수 있다
이더리움 pos
일정 기간을 에포크라고 하며, 에포크는 여러 슬롯으로 나누어진다
벨리데이터는 슬롯에서 블록을 생성하거나 확인하게 된다
- 트랜잭션 생성 및 서명
- 사용자는 자신의 지갑에서 새로운 트랜잭션을 생성
- 사용자는 개인 키를 사용하여 트랜잭션을 서명
- 트랜잭션 검증
- 사용자가 생성한 트랜잭션은 네트워크에 브로드캐스트된다
- 노드들은 이 트랜잭션을 검증하고, 서명이 유효하며 잔액이 충분한 경우에만 허용
- 블록제안
- 벨리데이터 선출:
- 에포크(일정 기간) 시작 시, 스테이킹된 사용자들 중에서 일부가 벨리데이터로 선출
- 벨리데이터는 해당 에포크 동안 블록 생성에 참여할 권한을 얻게 된다
- 벨리데이터 선출:
- 블록 생성
- 선출된 벨리데이터는 새로운 블록을 생성한다
- 블록검증
- 벨리데이터는 생성한 블록을 다른 노드들에게 브로드캐스트한다
- 다른 벨리데이터들은 이 블록을 검증하고 합의한다
- 블록최종화
포크 선택
- 포크란: 이더리움 블록체인에서 여러 블록이 동시에 생성되는 현상
- 포크 선택 알고리즘(LMD-GHOST): 이 알고리즘은 각 노드가 블록에 대한 확인을 수집하고 블록의 가중치를 계산하여 블록체인의 가장 긴 유효한 가지를 선택한다
FINALITY
- 최종성이란? 블록이 한번 최종화되면 해당 블록은 더이상 변경될 수 없다는 개념이다
- 이더리움에서는 에포크의 시작에서 체크포인트가 만들어지며, 두 체크포인트 쌍에 대한 투표가2/3이상인 경우 해당 체크포인트가 최종화된다
- 거래가 “finality”를 갖는다는 것은 해당 거래가 포함된 블록이 큰 양의 ETH를 소모하지 않고는 변경될 수 없을 때를 의미
- Pos Ethereum에서는 이를 체크포인트 블록을 사용하여 관리한다. 각 epoch의 첫번째 블록은 체크포인트이다
- validators는 유효하다고 생각하는 체크포인트 쌍에 투표한다. 해당 쌍이 전체 예치된 ETH의 삼분의 이 이상을 나타내는 투표를 받으면 체크포인트가 업그레이드 된다
Inactivity Leak
- 이더리움 pos에서는 네트워크가 최종화를 못 이룰 경우를 대비해 비활동 누출 메커니즘이 도입되었다
- 비활동 누출 작동 원리: 네트워크가 최종화를 못 이룰 경우, 비활동 누출이 활성화된다.이때, 특정 기간 동안 스테이킹된 이더리움이 일부 소멸된다
crypto-economic security of pos
이더리움 Transactions
- 단지 은행거래와 같아 - 심플하고 효율적
- 이더리움 Accounts
- 외부 소유 계정(EOA): 개인키를 가진 누구나 컨트롤할 수 있음
- 계약 계정: 네트워크에 배포된 스마트 계약으로 코드에 의해 제어됨
- 차이점
- 트랜잭션은 계정에서 암호화된 서명된 명령으로 시작
- 트랜잭션은 EVM(이더리움 가상 머신)의 상태를 변경하는 암호화된 서명된 명령이다
Types of transactions
- 일반거래
- 계약 배포 거래
- 계약 실행 거래
On gas
- 스마트 계약과 트랜잭션 처리를 위한 특정 단위
- 가스 수수료= (baseFeePerGas+maxpriorityFeePerGas) * 가스 제한
- 발신자 계정에서 1ETH를 수신자인 엘리스에게 전송하기 위해 bob이 190 gwei의 baseFeePerGas 및 10 gwei의 maxpriorityFeePerGas로 다음과 같은 수수료를 지불해야 한다
- (190 + 10) * 21000 = 4,200,000 gwei 또는 0.0042 ETH
스마트 컨트랙트 소개:
- 스마트 컨트랙트란?
- 스마트 컨트랙트는 계약 조건을 컴퓨터 코드로 디지털화하여 계약 조건이 충족될 때 자동으로 실행되도록 하는 것입니다.
- 블록체인에 저장된 컴퓨터 프로그램으로, 전통적인 계약을 디지털로 변환하는 데 사용됩니다.
- 스마트 컨트랙트는 매우 논리적으로 작동하며 "만약 이면 그것" 구조를 따릅니다. 이는 프로그래밍된 대로 동작하며 변경할 수 없다는 것을 의미합니다.
- 닉 샤보(Nick Szabo)는 1994년에 "스마트 컨트랙트"라는 용어를 만들었습니다.
- 계약의 특성:
- 자동 실행:
- 스마트 컨트랙트의 가장 큰 이점 중 하나는 계약 조건이 충족되면 결과가 자동으로 실행된다는 것입니다.
- 인간이 결과를 실행하기 위해 기다릴 필요가 없습니다.
- 예를 들어 어린이를 위해 자금을 에스크로에 보관하는 스마트 컨트랙트를 작성할 수 있습니다. 특정 날짜 이전에 자금을 인출하려고 하면 스마트 컨트랙트가 실행되지 않습니다.
- 예측 가능한 결과:
- 인간 요소는 전통적인 계약에서 가장 큰 결함 중 하나입니다.
- 예를 들어 두 명의 판사가 전통적인 계약을 각기 다른 방식으로 해석할 수 있습니다. 그들의 해석은 서로 다른 결정과 다른 결과로 이어질 수 있습니다.
- 스마트 컨트랙트는 다양한 해석의 가능성을 제거합니다. 대신 스마트 컨트랙트는 코드 내에서 작성된 조건에 따라 정확히 실행됩니다.
- 공개 기록:
- 스마트 컨트랙트는 감사 및 추적에 유용합니다. 이더리움 스마트 컨트랙트는 공개 블록체인에 있으므로 누구나 자산 이전 및 관련 정보를 즉시 확인할 수 있습니다.
- 예를 들어 누군가가 당신의 주소로 돈을 보냈는지 확인할 수 있습니다.
- 개인 정보 보호:
- 스마트 컨트랙트는 개인 정보를 보호할 수도 있습니다.
- 이더리움은 익명의 네트워크이므로 거래가 사용자의 고유한 암호화 주소에 공개적으로 연결되고 사용자의 신원은 공개되지 않습니다.
- 가시적인 조건:
- 마지막으로, 계약처럼 스마트 컨트랙트의 조건을 서명하기 전(또는 상호 작용하기 전)에 확인할 수 있습니다.
- 더 나아가 계약 내의 조건이 공개적으로 투명하게 표시되므로 누구나 그 내용을 검토할 수 있습니다.
- 자동 실행:
스마트 컨트랙트 사용 사례:
- 스마트 컨트랙트는 사실상 다른 컴퓨터 프로그램이 할 수 있는 모든 일을 수행할 수 있습니다.
- 계산 수행, 통화 생성, 데이터 저장, NFT 발행, 통신 전송 및 그래픽 생성과 같은 다양한 실제 예제들이 있습니다.
- 몇 가지 인기 있는 실제 사용 사례:
- Stablecoins(스테이블코인): 안정적인 가치를 유지하는 암호화폐.
- 고유 디지털 자산 생성 및 분배:
- 자동 및 개방형 통화 거래소:
- 탈중앙화된 게임:
- 자동으로 지급되는 보험 정책:
- 맞춤형, 상호 운용 가능한 통화 생성:
스마트 컨트랙트 언어:
- 이더리움에서는 상대적으로 개발자 친화적인 언어로 스마트 컨트랙트를 프로그래밍할 수 있습니다.
- 두 가지 주요 언어는 다음과 같습니다:
- Solidity(솔리디티):
- 스마트 컨트랙트를 구현하기 위한 객체 지향, 고수준 언어.
- C++에 큰 영향을 받은 중괄호 언어.
- 정적으로 타입이 지정됨(변수의 유형은 컴파일 시간에 알려짐).
- 상속 지원, 라이브러리 지원 및 복잡한 사용자 정의 유형을 지원합니다.
- Vyper(바이퍼):
- 파이썬 스타일의 프로그래밍 언어.
- 강력한 유형 지정.
- 작고 이해하기 쉬운 컴파일러 코드.
- 스마트 컨트랙트를 더 안전하고 감사하기 쉽게 만들기 위해 Solidity보다 적은 기능을 지원합니다. (상속, 재귀 호출, 무한 길이 루프 등은 지원되지 않음)
- Solidity(솔리디티):
스마트 컨트랙트 예시:
- Remix(레믹스):
- Remix IDE는 이더리움과 유사한 블록체인을 위해 스마트 컨트랙트를 개발, 배포 및 관리할 수 있게 해줍니다.
- Remix에서의 스마트 컨트랙트 예시
이를 통해 스마트 컨트랙트의 개념, 특성, 사용 사례 및 프로그래밍 언어에 대한 이해를 얻을 수 있습니다.
'전공 > 블록체인' 카테고리의 다른 글
[블록체인] DeFi, Stablecoins이란 (1) | 2023.12.21 |
---|---|
[블록체인] Ripple, Dapp이란 (0) | 2023.12.21 |
[블록체인] 블록체인 개념정리 Hashchain과 Hashcash (1) | 2023.11.18 |
[블록체인] BitCoin Transaction - UTXO (0) | 2022.10.24 |
[블록체인] - 암호화폐, Asset Registration Technology, Asset Centric Technology, Application Stacks (0) | 2022.10.24 |