블록체인/Mainnet

    Go 언어로 블록체인 메인넷 만들기 - CLI(Command Line Interface)

    메인넷 그 자체와는 관련이 없긴 하다만, 잠깐 쉬어가는 느낌으로 우리가 만든 블록체인을 조금 더 쉽게 조작할 수 있도록 커맨드 라인 프로그램을 만들어보자. 지난 포스트에서 작성한 내용을 테스트하려면 두 번의 실행이 필요하다고 했다. 이를 main() 함수에 작성하려면 코드를 주석처리해야 하는 등 번거롭고 추후를 도모하기 위해서라도 만들어두면 좋을 듯하여 만들어본다. 점점 blockchain_go 에 나온 코드들이 왜 그렇게 쓰였는지 조금씩 알게되는 것 같다. type CLI 이 타입은 CLI 와 관련있는 메서드를 정의하고 동작을 정의하기 위해 존재한다. type CLI struct {} func .createBlockchain() 블록체인을 생성하는 메서드다. 뭔가 이상함이 느껴질지도 모르겠다. NewB..

    Go 언어로 블록체인 메인넷 만들기 - 영속성

    우리는 지금까지 블록체인을 메모리 내부에만 저장했는데, 그렇게 되어서는 프로그램이 동작하는 동안에만 살아있기 때문에 영속성을 유지할 수 없다. 따라서 우리는 Key-Value 를 사용하는 Local Database 를 사용해보기로 하자. 여기서 어떤 데이터베이스를 사용해야 하는지 결정할 필요가 있는데, 비트코인에서 과거에 사용했던 LevelDB 도 있겠지만, 우리는 BoltDB 를 사용해보도록하자. 이는 Go 언어로 작성된 스토어다. github.com/boltdb/bolt boltdb/bolt An embedded key/value database for Go. Contribute to boltdb/bolt development by creating an account on GitHub. github...

    Go 언어로 블록체인 메인넷 만들기 - 작업증명(PoW)

    이번엔 지난 포스트에서 만든 프로토타입 블록체인에 작업증명을 추가해보자. 지금은 블록을 아무런 작업 없이 생성할 수 있게 되어있으나, 비트코인에서는 작업증명 합의 알고리즘을 통해 블록을 생성한다. 퍼블릭 블록체인에서는 채굴자의 참여유도를 위해 블록 생성자에게 코인을 지급하게 되어있는데, 이것을 쉽게 해버리면 지급되는 코인의 가치가 사라지기 때문에 네트워크가 제대로 돌아가지 않을지도 있으므로 이러한 합의 알고리즘을 만드는 것은 중요하다고 할 수 있다. 여담으로 작업증명은 채굴(Mining)이라고도 할 정도로 작업시간이 오래걸릴 수도 있다. 이는 블록체인 내부에서 설정한 난이도에 따라 다르다. 이러한 난이도 설정도 해볼 것이다. 코드를 짜기전에 내용을 이해하는 것은 필수적이다. 작업증명은 단순히 말하자면 끝..

    Go 언어로 블록체인 메인넷 만들기 - 프로토타입

    블록체인을 공부하면서 메인넷이 어떻게 구성되는지는 알아둘 필요가 있다고 생각되어 Go 언어로 블록체인 메인넷을 간단하게 만들어보면 어떨가 싶어 포스트와 함께 진행하기로 했다. 그저 블록체인의 원리를 공부하면서 이를 코드로 구현하는 것 뿐이므로 완벽하다고는 할 수 없을 것이다. 다만 구현에 있어 참고한 것이 있다면 github.com/Jeiwan/blockchain_go 정도가 있다. 메인넷 부분은 이더리움, 클레이튼 등 이미 구현이 되어있는 블록체인 플랫폼 위에서 동작하는 디앱(Dapp)과는 다른 축에 있기 때문에 디앱이 웹개발에서 프론트엔드라면 메인넷은 백엔드 개발이라고 생각하면 편할 것이다. 이더리움의 예를 들때 실제로 디앱을 개발할 때는 web3.js 를 사용하여 이더리움 네트워크와 연결하고 UI ..