hELLO.

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

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

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

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

    [프로그래머스] #.42587 - 프린터

    프린터 문제 설명 일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린터를 개발했습니다. 이 새롭게 개발한 프린터는 아래와 같은 방식으로 인쇄 작업을 수행합니다. 1. 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다. 2. 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에 넣습니다. 3. 그렇지 않으면 J를 인쇄합니다. 예를 들어, 4개의 문서(A, B, C, D)가 순서대로 인쇄 대기목록에 있고 중요도가 2 1 3 2 라면 C D A B 순으로 인쇄하게 됩니다. 내가 인쇄를 요청한 문서가 몇 번째로 인쇄..

    [프로그래머스] #.12915 - 문자열 내 마음대로 정렬하기

    문자열 내 마음대로 정렬하기 문제 설명 문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다. 제한 조건 strings는 길이 1 이상, 50이하인 배열입니다. strings의 원소는 소문자 알파벳으로 이루어져 있습니다. strings의 원소는 길이 1 이상, 100이하인 문자열입니다. 모든 strings의 원소의 길이는 n보다 큽니다. 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다. 입출력 예 strings n r..

    [프로그래머스] #.12912 - 두 정수 사이의 합

    두 정수 사이의 합 문제 설명 두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요. 예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다. 제한 조건 a와 b가 같은 경우는 둘 중 아무 수나 리턴하세요. a와 b는 -10,000,000 이상 10,000,000 이하인 정수입니다. a와 b의 대소관계는 정해져있지 않습니다. 입출력 예 a b return 3 5 12 3 3 3 5 3 12 문제 해결하기 func solution(a int, b int) int64 제한 조건 중 3번째 조건에 주목하자. a, b의 대소관계는 정해져있지 않다 함은 어떤 것이 더 작거나 큰지 알 수 없다는 것이므로 반복문을 돌..