cryptocurrency 9

Go로 만드는 블록체인 part 8 - Network

현재 구현하고 있는 암호화폐는 기본적으로 분산 네트워크에서 각각의 참여자들이 원장을 공유하며, 거래의 데이터를 합의를 통해 관리하는 탈중앙화 기술이다. 하나의 데이터베이스에 데이터를 저장하던 기존의 구조와 다르게 분산한 것이 가장 큰 특징이다. 이는 P2P 네트워크와 블록체인에 기초하며 분산 원장 기술을 사용한다. 분산 원장이란, 여러 사람이 액세스 할 수 있는 사이트 및 지역 등에서 합의하여 공유 및 동기화되는 데이터베이스를 뜻한다. 중앙화 되어있는 데이터베이스와 달리 탈중앙화 된 원장은 본질적으로 보안적 측면에서 더 안전하며, 합의 알고리즘을 통하여 데이터의 위변조를 방지한다. P2P 네트워크 P2P 네트워크란 무엇일까? P2P는 Peer to Peer를 뜻하는데, 여기서 Peer란 동등/대등한 지위..

Blockchain 2022.02.08

Go로 만드는 블록체인 part 7 - Merkle Tree

이전 포스트와 비슷한 맥락에서, 이번엔 다른 개념을 사용하여 조금 더 최적화해보도록 하겠다. Block Structure 우선 Bitcoin의 블록 구조를 살펴보도록 하겠다. 블록은 크게 Header와 Body로 나누어 살펴볼 수 있다. 이 둘은 서로 정보를 비교하며 무결성을 높이게 된다. Bitcoin의 block body에는 Transaction이 담겨있다. 아래의 표는 Bitcoin의 block header 구조이다. Version 버전 Target Bits 작업 증명 난이도 Previous Block Hash 이전 블록의 해시 Time Stamp 블록 생성 시간 Merkle Root 트랜잭션 해시 값 Nonce 작업 증명을 위한 임의의 값 type Block struct { TimeStampint..

Blockchain 2022.02.03

Go로 만드는 블록체인 part 6 - UTXO 집합

지금까지는 BoltDB에 저장된 블록의 수가 그리 많지 않았다. UTXO를 계산할 때 모든 블록을 순회하며 확인하고 있는데, 지금은 문제가 없지만 만약 블록이 실제 비트코인만큼 존재한다면 엄청난 과부하를 피할 수 없을 것이다. 그래서 이번 포스트에서는 UTXO들만 따로 저장하여 계산하는 방식으로 개선해보도록 하겠다 UTXO란? Part 4에서도 다뤘었지만 한번 더 짚고 넘어가도록 하겠다. Unspent Transaction Output의 약자로, 소비되지 않은 Transaction의 출력이란 뜻이다. 이 UTXO를 새로운 chainstate라는 이름의 bucket을 생성하고 따로 저장해 줄 것이다. UTXO의 소유권 이동 원리 vin ScriptSig []byte // Unlock script 다른 사람..

Blockchain 2022.02.01

Go로 만드는 블록체인 part 5 - Wallet

지금까지는 사용자를 특정 짓는 데에 단순한 문자열을 사용하였지만 이제는 지갑을 사용해보도록 하겠다. Bitcoin에서의 지갑이란 무엇일까? A Bitcoin address is a 160-bit hash of the public portion of a public/private ECDSA keypair. Using public-key cryptography, you can "sign" data with your private key and anyone who knows your public key can verify that the signature is valid. 거래를 위해서는 사용자를 식별할 수 고유한 무언가가 필요하다. 은행의 경우 계좌번호로 생각해도 무방하다. 추가로 자신의 코인을 사용하기 위..

Blockchain 2022.01.29

Go로 만드는 블록체인 part 4 - Transactions

이제 가장 중요한 부분이라 할 수 있는 Transaction을 구현할 것이다. 블록체인이란 무엇이었는지 다시 한번 살펴보겠다. 블록체인(Blockchain)이란 데이터 분산 저장 기술의 일종으로 관리 대상의 데이터를 block 단위로 P2P(peer to peer) 방식을 기반으로 chain 형태로 연결하여 저장하는 기술이다. 저장된 데이터는 모든 참여 노드에 기록되며 운영자에 의한 임의 조작이 불가능하다. 그렇다면 여기서 관리 대상의 데이터란 무엇일까? 비트코인에서는 블록 내에 거래 내역을 담아 서명하고 처리하여 관리하는데, 이러한 외부 거래를 기록하기 위해 컴퓨터 시스템 내에서 처리하는 과정에서 전송되는 데이터가 있다. 바로 Transaction이다. (암호화폐 상에서의 트랜잭션은 코인을 송금하는 거..

Blockchain 2022.01.26

Go로 만드는 블록체인 part 3 - Persistence

지금까지는 블록을 생성해도 매번 실행 시마다 코드 상의 변수에 블록들을 저장했기 때문에 프로그램 실행 중에만 데이터들이 유효했다가 종료 시에 전부 사라졌었다. 그래서 이번에는 데이터베이스를 활용하여 '영속성'을 부여해줄 것이다. 그렇다면 어떤 DB를 사용해야 할까? 구글에 열심히 찾아보았지만 bitcoin이 어떤 DB를 사용하는지 찾을 수 없었다.(일단 나는..) 그래서 Jeiwan이란 분이 사용하신 bolt란 db를 나도 사용하도록 하기로 했다. Jeiwan의 설명에 따르면 이유는 아래와 같다. 1. It’s simple and minimalistic. 2. It’s implemented in Go. 3. It doesn’t require to run a server. 4. It allows to bu..

Blockchain 2022.01.23

Go로 만드는 블록체인 part 2 - Proof of Work

이번엔 작업증명(Proof of Work)을 추가해보겠다. 현 상황에서는 블록을 추가할 때 아무런 과정없이 그냥 추가할 수 있지만, 실제 블록체인에서는 합의 알고리즘을 통해 블록을 생성한다. 합의 알고리즘은 암호 화폐 네트워크의 무결성과 보안을 유지하기 위해 중요하다. 합의 알고리즘은 분산화된 각각의 노드들이 서로 누가 진짜인지 합의할 수 있게 한다. Consensus algorithm 합의 알고리즘 - 해시넷 합의 알고리즘(consensus algorithm)이란 다수의 참여자들이 통일된 의사결정을 하기 위해 사용하는 알고리즘을 말한다. 합의 모델, 합의 방식, 합의 메커니즘 또는 합의 프로토콜이라고도 한다. 블록 wiki.hash.kr 작업 증명은 새로운 블록을 블록체인에 추가하는 ‘작업’을 완료했음..

Blockchain 2022.01.10

Go로 만드는 블록체인 part 1 - Base of Blockchain

이제 본격적으로 GO를 이용하여 암호화폐를 구현해볼 것이다. Type block, blockchain block과 blockchain의 type을 선언하겠다. type block struct { timeStamp int64 `validate:"required"` hash string `validate:"required"` prevHash string `validate:"required"` data string `validate:"required"` } type blockchain struct { blocks []*block } time stamp hash previous hash data 초기 단계에서의 블록은 위와 같은 요소를 가진다. 이전 포스트에서 다룬 typescript로 구현해본 blockcha..

Blockchain 2021.12.09

Go로 만드는 블록체인 part 0

블록체인을 공부하기 위해 계획하던 중 블록체인을 직접 구현해보면 더 자세히 공부할 수 있겠다란 생각에 시작하게 된 가벼운 프로젝트이다. 무작정 시작하기 전 정보 수집을 위해 구글링을 하던 중 https://github.com/Jeiwan/blockchain_go를 발견하게 되었고, 주로 해당 Repo를 참고하며 진행하였다. GitHub - Jeiwan/blockchain_go: A simplified blockchain implementation in Golang A simplified blockchain implementation in Golang. Contribute to Jeiwan/blockchain_go development by creating an account on GitHub. githu..

Blockchain 2021.12.05