메모내용

BlcokChain

BlockChain 간단하게 이해하기

블록체인이라고 해도 대단한것이 아니다. 단지 특정 프로그램 언어 (Go,Rust...등) 으로 만들어진 프로그램일 뿐이다. 내부적으로는 데이터를 다루고 이걸 데이터베이스 로서 사용하는데, 여러 컴퓨터 (노드) 에서 이 프로그램을 실행하여 데이터를 공유하여 관리하는 어렵게 말하면 '분산 네트워크' 여러개의 컴퓨터가 같은 데이터를 분산해서 관리하고 있다. 라는 점이 특이할 뿐이다. 모든 노드가 똑같은 데이터 사본을 받고 관리하기 때문에 네트워크를 이루는 컴퓨터가 0개가 될때까지 데이터는 메모리 해지 되지 않고 네트워크 메모리 상에 올라가 있을테니 데이터 베이스로서 사용될 수 있겠지? 이 네트워크에 객체라는 컨트랙트를 선언(Solidity 작성) 배포 (Contract 변수 선언, 즉 블록체인 네트워크 메모리에 올라갔다. CPP 이라면 local 변수로서 메모리를 할당받은 것이라고 볼 수 있겠다.) 된다는 것이다.

블록체인 네트워크와 소통방법

블록체인 네트워크와 소통하기 위해서는 어떤 노드가 ( Node : 블록체인 프로그램을 실행하고 있는 컴퓨터(노드) ) 어떤 연결방법을 제공하고 있는지 ( Provider : geth, infura 등에서 IPC url , HTTP url 등 네트워크를 이루고잇는 노드에 연결할 수 있는 주소를 제공하는 곳) 제공된 주소로 노출된 노드와 어떤 방법으로 소통할것인지 ( web3.js , ethers.js ... ) 아떤것을 할것인지 ( 읽기 (call), 쓰기 (send) ) 알아야 한다.

???

누가 어떤 목적으로 블록체인을 만들었나?

분산 원장기술

동일한 데이터를 가지는 데이터 베이스를 여러 컴퓨터가 가지고 있고 합의를 통해서 블록(데이터) 를 추가한다 동일한 데이터의 분산화 탈 중앙화 "분산 원장 기술"

데이터의 고결성

중요한건 데이터가 유출되느냐 마느냐가 아니라 데이터를 위변조 하는것에 대한 보안이다

합의 방식

일자리를 구하는 방식 누가 블록을 만들(트랜잭션 처리(연산) 하고 블록을 생성) 수 있는지 결정 하는 것을 블록체인에서 합의(합의 알고리즘) 라고 한다. 블록을 만든 노드는 블록을 만드는데 필요한 리소스 사용(노동)에 대한 보상으로 암호화폐를 얻는다 네트워크 참여자 모두, 누구나 블록을 만들 수 있는것은 아니다. 이상한 블록을 만들 수도 있으며, 데이터를 변조하여 만들 수도 있기 때문에 어떻게 데이터를 무결성 없이 유지하면서 위변조 없이 업데이트 할 수 있는지, 신용할 수 있는 노드를 정하게 되는데 그 정하는 방식, 합의 과정을 합의 알고리즘 이라고 한다.

합의 알고리즘의 종류

합의 알고리즘은 여러가지가 있다. 왜냐하면 알고리즘마다 장점과 단점이 있고 그것을 보완하기 위해 새로운 기술이 나오니까.

합의 알고리즘의 종류로는 POW , POS 방식이 있다.

Transaction

Transaction 을 직역하면 '거래' 라는 의미를 가지고 있는데, 블록체인에서는 데이터를 편집하고자 하는 요청사항이라고 할 수 있다. 특정 변수 int a = 10 이었는데, 이 '변수 a = 20 으로 수정 하고자 하는 요청'이 Transaction 이 되는 것이다. 이 트랜잭션을 만드는 방법 또한 있으며, 트랜잭션의 만드는 과정에는 이것을 행하고자 하는 노드(노드가 가진 지갑)의 sign(서명) 이 필요하며, 요청을 수행하는 노드에 대한 보상(가스비(코인)) 이 필요합니다. 요청은 (Transaction) 은 블록체인의 mempool 에 올라가게 되고 합의 조건을 통과한 (합의 알고리즘) 어떤 노드가 이 요청 (Transaction) 에 따라 블록에 있는 데이터를 편집하게 됩니다.

블록체인 분류 1

누가 블록 생성 (합의) 에 참여할 수 있느냐에 따라 블록체인 네트워크가 분류된다.

은행

Token Economy

Token Economy 설명...

코인이 필요한 이유

상황에 따라 코인이 필요없다. 토큰 이코노미의 중점은 퍼블릭이냐에 중점이 있다. 네트워크를 유지하기 위해서는 네트워크를 유지하는 노드들에게 보상을 주고 네트워크를 유지할 필요가 있는데, 그런게 아니라면 돈을 줄 필요가 없다. (private 나 네트워크 유지 자체를 목적으로 하고 있는 집단이 있다면, 보상이 없어도 네트워크를 유지하기위해 노력할테니) 토큰이코노미의 필요성은 퍼블릭 여부와 와 관계가 깊다. 누가나 참여할 필요가 없다면 코인이 필요가 없다. 코인 은 네트워크 유지를 위해 다른 사람들을 끌어들여 네트워크 유지, 검증에 에 참여시키기 위한 경제적 요소. 네트워크의 검증과 보완에 얼굴도 신원도 모르는 사람에게 일을 시키려면 보상 (돈, 코인) 을 줘야 하기 때문이다. 은행은 국가의 경제 시스템을 유지하기 위한 활동을 합니다. 해당 은행을 이용하는 고객으로부터 일정의 수수료(보상)를 받는다. 그만큼 은행은 신용있는 데이터를 관리하는데서 오는 보상을 받는것이다. 은행시스템 처럼 거래 기록을 기록한 컴퓨터(노드) 의 노동에 대한 보상 신용있는 네트워크를 유지하는데 기여한 컴퓨터(노드) 에 대한 보상 으로서 코인(암호화폐) 를 제공한다.

코인의 사용처

코인은 해당 코인을 발급한 네트워크에서 여러가지 일을 할 수 있는 화폐로서 활용됩니다. 네트워크에 절대 위변조 할 수 없는(신용할수 있는) 데이터를 보관한다거나 네트워크를 플랫폼으로 하는 프로그램(App)을 올린다거나. 또한 코인이 현실에서의 가치와 바꿀수 있다면 암호화폐로서 현실의 화폐와 교환할 수 있겠다.

코인을 얻는 방법

코인은 여러가지 방법을 통해서 얻을 수 있다. 코인은 네트워크를 유지를 위해 활동함으로서 얻을 수 있는데, 그 활동은 네트워크에 데이터의 데이터를 편집( Transaction 처리 ) 하는 할동 데이터를 검증하는 활동 다음 데이터 블록을 추가하기 위해 해시값을 찾아내는 활동 등 여러가지가 있다.

  1. 채굴
    • 다음 데이터 블록을 연결하기 위해 특정한 조건을 갖춘 해시값을 찾아내는 활동

암호화폐

블록체인 네트워크 유지에 기여한 노드에 대한 보상 중개자 없이 직접 화폐를 사거나 팔거나 환전할 수 있는 디지털 화폐 시스템

코인과 토큰의 구분

코인과 토큰은 하나의 독자적인 플랫폼을 가질수 있느냐에 따라서 구분하 수 있다. 코인은, 코인을 사용하는 네트워크를 가지고 있으며 토큰은 아니다. 토큰은 특정 코인이 사용하는 네트워크 안에서 또다른 화폐를 사용하는 영역을 만드는 수단일 뿐이다. 코인이 달러, 한화, 위안, 엔 을 사용하는 국가(미국, 한국, 중국, 일본)의 내 시스템에 사용되는 화폐라면 토큰은 한국 내에서 사용되는 지역화폐 (경남지역 상품권, 경기지역상품권, 신세계 백화점 상품권, 부산 전통시장 상품권 등) 이다.

코인의 구현

코인의 구현

코인은 ERC20 을 상속하여 구현된다.

ERC20 을 사용하는 컨트랙트 예시

                        
                            import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
    
                            contract MyContract is ERC20{
    
                                // 코인 변수 생성 방법인데 검증이 필요하다.
                                IERC20 public immutable Coin;
                                Coin = IERC20(address addr);
                            }
                        
                    

토큰의 구현

토큰은 ERC721 을 상속하여 구현된다.

ERC721 을 사용하는 컨트랙트 예시

                        
                            import "@openzeppelin/contracts/token/ERC721/ERC721.sol";

                            constract MyContract is ERC721
                            {
                                // 토큰 변수 생성 방법인데 검증이 필요하다
                                IERC721 public immutable Token;
                                Token = Token(address addr);

                            }
                        
                    

Block

Header
0x3910...

Transaction
Transaction
Transaction
...
Hash
(0x3215...)
Header
0x3215...

Transaction
Transaction
Transaction
...
Hash
(0x2314...)
Header
0x2314...

Transaction
Transaction
Transaction
...

Ethereum 프로그램 폴더 구조

머클투트, 머클트리

데이터의 무결성을 검증하기 위한 값

wallet

블록체인 네트워크에서 활동하기 위한 계정 블록체인 네트워크에서 활동을 위한 암호화폐 를 저장하기 위한 지갑 이다.

블록체인 네트워크를 유지하는데 기여한 노드는 등록한 지갑으로 암호화폐를 답고 블록체인의 데이터를 편집하거나 새로운 내용(컨트랙트) 를 올리기 위해서는 지갑내에서 암호화폐를 꺼내 지불해야 한다.

이 지갑은 주인 외에 아무나 사용할 수 없도록 암호화 되어 있으며 니모닉 코드 들 통해 암호화 되어 있다.

컨트랙트 배포하기