본문 바로가기

블럭체인

Ethereum and Solidity: The Complete Developer's Guide - 2장

728x90

 

첫 번째는 개발자들이 사용하는 기술입니다.

 

웹 3은 이더리움 네트워크로 가는 포털이나 창이라고 할 수 있습니다.

 

그리고 이것은 돈을 보내고 데이터를 저장하고 계약을 배포하고 본질적으로 네트워크에서 하고자 하는 모든 것을 가능하게 합니다.

 

두 번째로는 반대로 프로그래머가 아닌 이더리움과 작업하고 싶은 사람은 메타 마스크 사용합니다.

 

 

 

 

메타 마스크가 계정을 만들 때 계정을 하나 만들었는데 세가지 정보가 있습니다.

 

계정 주소 , 공개키 , 개인키 이렇게 세가지 정보가 있습니다

 

계정 주소는 이메일과 비슷하게 전 세계 누구와 공유할 수 있는 고유 식별자로 당신이 누군지 다른 사람에게 알려줍니다.

계정을 식별 할 수 있습니다.

 

공개키와 개인키 이 두가지 정보 결합해 암호 같은 걸 형성합니다.

 

공개키와 개인 키를 이용해 다른 계좌로 자금을 송금할 수 있습니다.

 

계좌의 개인 키가 없는 사람은 그 계좌에 할당된 자금에 액세스 할 수 없습니다.

 

계정 주소, 공개키 , 개인키 모드 16진수로 저장돼 있습니다.

 

또한 이더리움 세계에서는 한 계정이 모든 네트워크에 사용됩니다.

 

 

 

 

 

 

 

 

메타마스크에서 주소 입력하고 이더리움을 받는 과정에 대해서 설명하겠습니다.

 

1. 주소을 입력한 후 제출합니다

 

2. 백엔드로 서버로 보내고 백엔드에서는 web3 라이브러리을 통해 이더리움 네트워크에 접속 합니다

또한 web3 라이브러리를 이용해 트랜잭션 객체를 만듭니다

 

2-1 트랜잭션이란 거래에 대한 기록이라고 볼 수 있습니다. 한 계좌가 다른 계좌로 송금을 시도하는 것을 

표현하는 기록입니다.

두 계좌가 상당한 액수의 돈을 교환할 때 거래가 이루어 집니다.

 

만약에 제가 돈을 보냈을때 트랜잭션 개체를 생성해 이더리움 네트워크에 보내 처리 했습니다.

트랜잭션 객체는 할당된 다양한 속성을 갖고 있습니다. 

nonce :발신자가 트랜잭션을 보낸 횟수
예로 들어 한 계자가 1000번 사용됐다고 칩시다. 그럼 1001 번째 거래에 돈을 보내는데 그 거래는 1001의 nonce를 갖는 겁니다

to : 이거 일부 이더리움가 보내질 계좌 주소입니다.

 

방금 발행된 트랜잭션에서 계좌 주소와 동일한 주소를 갖게 됩니다.

 

value :  전송 계정에서 대상 계정으로 보내는 영수증에서 본질적으로 여러분의 계정에 전송하고자 하는 이더리움의 양입니다.

V 생성하기 우해서는 개인 키 에서 R과 S를 생성하는 건 일반적 프로세스로 불리죠

또한 개인 키가 있다면 v , r,s 를 생성할 수 있습니다.

 

하지만 vs가 있다면 개인 키를로 계산할 수 없어요

개인 키가 한 번 사용되었어요

이를 통해 합법적인 거래인지 확인합니다 VRS를 취해서 개인키를 재정의할 수 없습니다

 

 

3. 트랜잭션 개체가 생성되고 나면 동일한 웹 3 라이브러리가 해당 트랜잭션 개체를 해당 네트워크로 전송합니다

 

4. 트랜잭션은 네트워크로 가고 저희는 트랜잭션이 확인되길 기다립니다

 

이더리움 블록체인이 동작하는 순서에 대해서 설명하겠습니다.

 

 

 

 

트랜잭션을 보냈을 때 특정 노드로 갔습니다.

 

아래는 노드 다이어 그램 그림입니다.

 

 

노드가 블록체인의 전체 사본을 갖고 있습니다.

 

거래가 이 해당 노드로 왔습니다. 하지만 노드는 하나만 있는 것이 아닙니다

 

위에 그림은 세가지 트랜잭션이 동시에 노드로 들어온 경우 입니다.

 

아래 그림은 트랜잭션을 블록에 생성된 다이어그램입니다.

 

 

노드가 해당 블록에서 유효성 로직을 실행합니다. 유효성 로직은 30초면 됩니다.

유효성 검사 로직은 반응이 오는 데 아주 오래 걸립니다 모든 게 이동한 것처럼 보입니다

 

아래는 사이트 블럭체인에 쉽게 이해 할 수 있는 사이트 입니다.

 

https://andersbrownworth.com/blockchain/hash

 

 

 

 

1. 블럭체인은 자료에 있는 값을 해시 작업을 진행합니다.

 

 

 

 

블록에서 해시칸에 "0000" 값에 자리가 아닌 경우 유효하지 않은 블록이라고 합니다.

 

마이닝 작업을 통해 nonce에서 1부터 올바른  "0000" 값들어간 유효한  해시값을 찾는 행위 입니다.

 

 

 

 

 

마이닝 작업이 끝난 경우 올바른 난스와 올바른 해시 형식으로된 값을 추출되어서 유효한 블럭이라고 할 수 있습니다.

 

 

블록체인

 

 

5번 블록체인은 이전값은 4번 블록의 해시값을 의미합니다.

 

예로 들어 4번 블록 데이터 값을 입력하면 해시값이 수정되고 5번 블록에서도 마찬가지로 이전 값을 수정이 됩니다.

 

 

 

 

유효하지않은 4번 블록을 유효한 해시값으로 수정하기 위해 마이닝 작업도 진행합니다. 또한 5번 블록도 마찬가지로 마이닝 작업을 진행 해야합니다.

 

 

분산 블록체인으 위로 그림처럼 여러 복사본 블록체인을 가지고 있습니다. 그중 하나의 블럭체인에서 유효하지 않은 블럭을 발견된다면 쉽게 수정 할 수 있습니다.

 

 

토큰 

 

 

 

 

토큰은 Darcy가 Bingley에게 원화 25원을 줬습니다. 위에 그림에서는 "누가" 누구에서 전송내역에 대해서 데이터을 담고 있습니다. 하지만 이 경우 Darcy가 25원을 있는 경우인지 알 수 가 있습니다.

 

 

 

 

 

코인 베이스을 통해서 anders라는 사람이 100 원을 가지고 있어 2번 블록에서 andres가 sophia에거 10원을 전송 이력이 있습니다. 

 

이를 통해서 anders는 코인베이스으로 100원 가지고 있고 sophia에게 돈을 전송 했다는 내용을 해석할 수 있습니다.

 

 

 

주의 사항 해쉬값  무조건 "0000" 값이 있다고 해서 유효한것은 아닙니다. 알기 쉽게 이해하기 위함 입니다. 

 

조금 깊게 설명하자면 아래 그림으로 설명하겠습니다.

 

 

 

 

맨 오른쪽 타켓 숫자인 1000보다 같은 값을 찾아가는 과정이 마이닝 과정이라고 생각됩니다.

 

Output Hash을 10진수로 변경하면  오른쪽 칸에 10진수로 변환되어 있습니다.

 

또한 0에서부터  타켓 숫자까지 해시을 실행하는 데 걸리는 시간이거나 올바른 해시 값을 찾는 시간을 "블록 타임" 이라고 합니다.

 

이더리움 네트워크에서는 가장 이상적인건 블록 하나를 계산하는 데 15초안으로 되어야 합니다.

 

 

 

첫번째 블록에서 타켓이 1000보다 낮은 값으로 찾는데 20초 걸렸습니다. 이는 좋은 시간대가 아닙니다.

 

두번째 블록에서 타켓이 10000보다 낮은 값으로 올렸는데 5초가 걸려서 너무 빨라 좋은 시간대 가  압니다.

 

네번째 블록에서 타켓을 4000으로 설정하니 15초가 걸립니다. 

 

이처럼 난이도로 해쉬 값을 계산하는 시간을 유동적으로 조정되어야 합니다.

 

아래 사이트 이더리움이 블록 시간을 볼 수 잇는 시간입니다.

 

https://etherscan.io/chart/blocktime