Node: A single instance in a decentralized network.
분산된 네트워크의 단일 인스턴스
Anyone can join the network
누구나 네트워크에 가입할 수 있다.
Blockchains are resilient.
블록체인은 복원력이 뛰어나다.
- 블록체인 분산네트워크로 이루어져 있기 때문에 노드 하나가 이상이 있더라도 다른 노드에 영향을 끼치지 않는다.
- 피어간 비교를 통해 오류가 있는 피어는 배제시킬 수 있다.
BlockChanin nodes keep lists of the transactions that occur.
BlockChanin 노드는 발생하는 트랜잭션 목록을 보관합니다.
- 트랜잭션이 변경된 경우 피어간 비교를 통하여 변경된 사항을 알 수 있고, 조작된 트랙잭션도 알 수 있다.
Consensus
합의,증명 과정
Consensus is the mechanism used to agree on the state of a blockchain
컨센서스는 블록체인의 상태에 대해 합의하는 데 사용되는 메커니즘이다.
- 위에서 설명한 하나의 피어의 블록체인이 변경된 경우 다른 노드에서 합의를 통해 해당 블록체인을 배제할 수 있다.
1. Chanin Selection
2. Sybil Resistance
블록체인 합의 알고리즘
blockchain consensus algorism
P2P 네트워크에서는 정보의 지연과 미 도달 사태를 피할 수 없고 데이터를 변조할 의도가 없다 해도 이중송신에 따른 처리 중복이나 잘못된 정보에 의한 오작동 등의 위험이 있어 정확한 정보를 공유하기 어렵기 마련입니다.
블록체인과 같은 P2P 네트워크 시스템에서 각 노드간 정보 도달의 시간차이가 있을 때, 생성된 블록의 정당성을 검토하고 해당 블록을 블록체인에 연결하기 위해 네트워크 참가자들의 합의를 얻기 위한 알고리즘이 필요합니다.
1. 퍼블릭 블록체인
작업증명 (Proof of Work, PoW) 블록체인에서 가장 보편적으로 사용중인 합의 알고리즘으로 컴퓨팅 파워를 이용하여 특정 난이도의 해시값을 역함수를 해시화 하여 Nonce 값을 계산해내고 이를 검증하는 것으로 합의를 도출합니다.
지분증명 (Proof of Stake, PoS) PoW의 컴퓨팅 파워 낭비 문제를 해결하고자 개발된 합의 알고리즘으로 노드가 보유한 자산을 기준으로 권한을 분배하여 합의를 도출하고 보상을 분배하는 알고리즘입니다
https://github.com/smartcontractkit/full-blockchain-solidity-course-py
SOLIDITY Plugin을 설치한다.
Solidity 에서도 다른언어와 동일하게 string , int , uint 사용이 가능했다.
address는 현재 내 메타마스그 계정의 주소를 사용하고 있다.
함수를 선언할 시에는 아래와 같은 방법으로 선언한다.
Deploy를 할때마다 GAS 비용이 소모되는 것을 확인하였다.
선언한 변수를 public으로 선언해주었더니 Deploy할때 버튼이 하나 더 생성 되었다.
해당 변수의 값을 알 수 있었다. (초기화 되는 값은 0 이구나)
fuction과 state의 public , external , internal , private에 대한 설명이 나와있다.
https://docs.soliditylang.org/en/v0.8.13/contracts.html
오호라 함수를 사용하면 state에 값이 할당되었다!
함수 사용할 때에도 GAS가 소모된다.
함수의 view 와 pure 에 대해 배웠다.
view는 읽기만 할 수 있다.
public된 state 의 값을 알 수 있는 것과 동일한 기능을 한다.
아마 생각되기를 public 되지않은 state값을 참조하고 싶을때 사용될 것 같다.
위 설명을 하면서 pure , view , 기본 함수의 차이가 무엇인지 이해가 되지 않았다.
강의를 하나 찾아서 이해할 수 있었다.
pure: 함수 scope 밖의 변수들을 읽지도 쓰지도 못한다.
view: 함수 scope 밖의 변수들을 읽기만 가능하다.
기본적 함수(pure와 view)를 쓰지 않을때 : 함수 scope 밖의 변수를 읽을 수도, 변경할 수 도 있다
- 하지만, pure와 view 는 GAS가 소모되지않지만 변수를 변경할 경우에는 GAS가 소모된다.
구조체를 만들 수 도 있다.
constructor도 있겠지?
key 값을 생략하고 넣어도 된다, 순서는 지켜줘야한다.
배열 선언도 가능하다.
뭐 솔리디티도 똑같구만 그냥 언어구나
조금 고생했던 Point
처음에는 addPerson 함수를 사용해서 바로 people 배열에 값을 push하여 해당 배열의 값을 읽으려고했다.
public이라 당연히 가능할 것이라고 생각했는데 원하는대로 되지 않았다.
get 함수를 view로 하나 만들어야 문제가 해결이 가능했었다.
Storage vs Memory
- Storage 변수는 블록체인에 영구적으로 저장되는 변수를 말한다.
- Memory 변수는 임시로 외부 함수가 특정한 계약에 호출될 때 메모리형 변수가 제거된다.
'공부기록 > 블록체인 스터디' 카테고리의 다른 글
[블록체인 스터디] Fund Me (1) (0) | 2022.05.27 |
---|---|
This contract may be abstract, not implement an abstract parent's methods completely or not invoke an inherited contract's constructor correctly (0) | 2022.05.27 |
[블록체인 스터디] Solidity Local Storage (0) | 2022.05.26 |
블록체인 개념 (0) | 2022.05.12 |
블록체인 1주차 (0) | 2022.04.09 |