정보를 블록이라고 하는 단위로 저장하여 (해시를 통해) 저장된 블록을 체인 형태로 묶는 저장기술.
리스트 같지만 조금 다름 다음 블럭(2)은 헤더에 이전 블록(1)의 해시를 기억(해시 포인터)하고 어떤 블럭 앞에 오는지 알 수 있고 이는 곧 순서를 결정 할 수 있음.
이전 블럭의 해시의 주소값을 기억하고 있는 것임.
P2P 네트워크로 참여자(shem) 모두 동일한 순서의 블록체인을 유지하고 있는 네트워크 망
- 자격(ex. PoW, PoC) 있는 참여자가 새로운 블록을 제안할때 이것이 옳은 제안인지 판별하는 것.
- 블록이 새롭게 추가됨 => 참여자가 자격을 받음 => 합의 알고리즘 통과함 => 참여자들이 새 블럭을 자신의 체인에 추가함.
- 이 과정이 사실 탈중앙화 되어있음을 의미함.
- Public : 정보가 공개되어있고, 네트워크가 정한 기준에 따라 기록을 요청할 수 있다.
- Private : 정보가 공개 X , 미리 자격을 득한 사용자만 정보를 기록할 수 있음.
- Permissionless: 네트워크 참여에 제한 X
- Permissioned : 네트워크 참여에 제한 O
전자 서명은 보낸 사람의 비밀키(유일)로 생성 -> 받는 사람은 공개키로 해당 서명을 통해 누구에게서 온 것인지 확인 가능
- (보낼때) 수신자의 공개키로 암호한 메시지 + 본인의 비밀키로 만든 서명
- (받을때) 본인의 비밀키로 메시지 복호화 + 송신자의 공개키로 서명 복호화
- UTXO는 돈 자체에 주소를 주고 암호화 되어있고 돈을 쓸 때 전자서명을 주는 것
- 어카운트에 주소를 주고 밸런스를 가지고 있어서 어느 어카운트를 사용하기 위해 전자서명을 낸다.
- UTXO : 유효성 검사가 쉽고 보안성도 좋고 병렬화가 가능. But 이자 같은것도 utxo 로 관리 되기 때문에 불필요한 공간이 많아지게 되는 것.
- 어카운트 -> 어카운트 기반은 순서대로 해야함(병렬화 X) But 상태가 생겨서 스마트 컨트랙트를 사용할 수 있음. (프로그램에 상태값이 없으면 일회성 프로그램 밖에 되질 않음)
- 어카운트 : 엔티티를 표현하고 그 상태를 기록하는데 사용.
- EOA: 사용자가 사용하는 것으로 어카운트 주소를 암호화해 eoa를 생성.
- 스마트컨트랙트: 개인간의 원하는 계약체결을 위한 기능. 외부함수..?API 같은 느낌.
블록체인 내에서 저장의 단위
- 블록은 트랜잭션을 일정한 순서로 정렬한 컨테이너임
- 원장의 거래내역 같은 st 이더에서는 특히 순서가 중요.
- Finality(불변성)
- 블록의 완결성을 의미.
- 합의를 통해 생성된 블록이 번복되지 않음을 의미(Pow는 안됨.)
- Confirmation: 체인의 경쟁을 최소 6블록이내 결판이 나기 때문에 체결할때 6컨펌 거친 블록체인에 붙음.
- BFT는 블록의 완결성이 보장
- 네트워크가 동기화 되어있어서
- Pow보다 빠르고 경제적.
- 단점
- 일정 수 이상 넘어가면 시간이 느려짐(네트워크 오버헤드)
- 네트워크 사용량이 높음 (동기화때문)
- 매 블록마다 새로운 커미티를 뽑아 내부적으로 BFT실행.
- 새로운 커미티는 VRF로 구해진 랜덤값
- 기존의 BFT에서 확장성을 개선함.
블록체인 : 초기 상태에서 변경사항을 적용하며 변화하는 상태기계
- Tx는 어카운트를 생성하거나 변경.
- Tx가 반영되는 과정에서 다른 Tx의 개입은 제한됨.(순서대로 해야 같은 결과를 보장하기 때문..)
- External Account(EOA) : 사용자가 사용하는 어카운트
- Contract Account : 스마트 컨트랙트를 표현하는 어카운트
- 트랜잭션의 목적: 블록체인의 상태변경 , to에 따라 세분화.
- EOA : 사용자
- Contract : 해당 컨트랙트가 실행됨.
- 없음 :
- GAS : TX를 처리하는데 발생하는 비용.
- Tx 처리에 발생한 수수료
- 보내는 쪽에서 부담하고 Gas Fee라고 정의.
- 높게 적을수록 이더넷에서 빨리 처리해줌 (Klaytn은 아님)
- A 👉 B
- A가 TX 생성, 서명해서 B에 전달
- 데이터를 온전히 전달하기 위해 RLP 알고리즘으로 TX를 직렬화
- A와 B는 같은 프로토콜로 통신
- B 👉 A
- 올바른 TX 수신했으면 TX 해시를 반환
- 체결 완료시 Recipt(소요된 gas, tx해시, input의 기록)을 반환
어카운트에서 트랜잭션을 또 보내는 것을 방지하기 위해 순서를 매긴 값임. 어카운트 기반에서는 병렬화를 막아줌. 즉, 어카운트가 몇번째 트랜잭션을 보내주는지 말해주는것
작업 증명에서 어려운 문제를 풀기 위한 정답 값
특정 주소에 있는 실행 가능한 코드로 함수, 상태로 나눠져 있고 함수는 상태를 변경하거나(TX 생성해 블록에 추가) 변경하지 않는 함수(노드에서 실행)로 분류됨.
- 지갑은 키를 관리하는 프로그램이다.
- 키를 보관하고 BApp이 요청할 때마다 보관중인
- 마이이더월렛(은행창구 직원): 웹 월렛으로 키를 암호화한 스토어인 keystore 의 비밀번호를 입력하면 Tx 생성과 전송이 가능한 지갑과 가장 유사한 동작을 했음 but 이더에서는 조금 복잡해서 메타마스크가 생김. (완전 탈중앙화)
- 메타마스크 : 크롬 플러그인으로 월렛과 사용 로직이 조금 분리 되어있는 형태 플러그인이니까 다소 크롬에 종속적임. (세미 탈중앙화)
: SHA-256 , Keccak256
: NBLab이 고안한 알고리즘은 블록체인을 통해 공정한 난수 생성이 가능함과 동시에 유저가 많아져도 확장이 가능합니다.
: 상속은 자식 클래스를 점진적으로 추가해서 기능을 확장하는 데는 용이하지만 높은 결합도로 인해 부모 클래스를 점진적으로 개선하는 것은 어렵게 만든다. 취약한 기반 클래스 문제는 캡슐화를 약화시키고 결합도를 높인다. 그래서 부모 클래스의 코드를 하위로 내리지 말고, 자식 클래스의 코드를 상위 계층으로 올려라. 추상적인 메서드를 부모 클래스에 두면 재사용성과 응집도의 측면에서 더 나은 결과를 얻을 수 있다.
: 과거의 거래장부내역을 다시 돌아가 볼 수 없도록 하는 것입니다. Finality는 어느정도의 시간을 기다려야 블록체인에 거래내역이 Finality 상태가 되도록 기다리지 않음. 그래서 보안 뿐만 아니라 상용화에 있어서 중요함.
:
높아지면 탈 중앙화의 본질을 해칠 수 있음. 합의 알고리즘 , 스마트 컨트랙트의 연산 향상