기본 콘텐츠로 건너뛰기

글

비트코인 블록에서 블록 해시 계산

이 문서에서는 비트코인 블록의 헤더 정보를 기반으로 블록 해시 값을 계산하는 과정과 파이썬 소스 코드를 제시합니다. 비트코인 블록 정보 예제를 위해 선택한 비트코인 블록 99,997 은 2개의 트랜잭션으로 이루어졌고 기본 정보는 아래와 같습니다. 브라우져에서 아래의 URL을 입력하면 JSON 형식의 데이터를 받아 볼 수 있습니다. https://blockchain.info/block-height/99997?format=json {     "blocks":[{         "hash":"000000000001f657aad04f95503e76a6ee02641deea87721de00d34ad3a9f8e8",         "ver":1,         "prev_block":"000000000002b18ac1956a1388ce19d7be29532c2b79104ec172e38bd990be2f",         "mrkl_root":"5140e5972f672bf8e81bc189894c55a410723b095716eaeec845490aed785f0e",         "time":1293623406,         "bits":453281356,         "next_block":["0000000000002103637910d267190996687fb095880d432c6531a527c8ec53d1"],         "fee":0,         "nonce":459819282,         "n_tx":2,         "size":474,   ...

비트코인 블록에서 머클 루트 계산

블록을 구성하는 트랜잭션들의 해시 값들로부터 계산하는 머클 루트는 블록 헤더에 포함됩니다. 이 문서에서는 머클 루트를 계산하는 과정을 소개하고 이를 구현하는 파이썬 소스 코드를 제시합니다. 배경 지식 엔디언 출처:  위키피디어: 엔디언 비트코인 블록 정보 다음은 2개의 트랜잭션으로 이루어진 비트코인 블록 99,997 의 머클 루트 값과 두 트랜잭션의 해시 값입니다. 이 블록의 머클 루트 값은 다음과 같습니다. 5140e5972f672bf8e81bc189894c55a410723b095716eaeec845490aed785f0e 두 트랜잭션의 해시 값은 다음과 같습니다. 0: b86f5ef1da8ddbdb29ec269b535810ee61289eeac7bf2b2523b494551f03897c 1: 80c6f121c3e9fe0a59177e49874d8c703cbadee0700a782e4002e87d862373c6 머클 루트 계산 과정 아래의 1번과 4번 과정은 비트코인 도구가 해시 값을 빅 엔디안으로 표현하고 있기 때문에 필요한 처리 과정입니다. 해시 문자열에서 연속하는 2개의 문자가 한 바이트에 대한 16진 표현에 해당합니다. 1. 트랜잭션의 해시 값을 리틀 엔디안으로 변환하기 (바이트 배열로 표현했을 때 역순으로 재배열) 0: 7c89031f5594b423252bbfc7ea9e2861ee1058539b26ec29dbdb8ddaf15e6fb8 1: c67323867de802402e780a70e0deba3c708c4d87497e17590afee9c321f1c680 2. 두 해시 이어 붙이기 7c89031f5594b423252bbfc7ea9e2861ee1058539b26ec29dbdb8ddaf15e6fb8c67323867de802402e780a70e0deba3c708c4d87497e17590afee9c321f1c680 3. 이어 붙인 해시에 대하여 두 번 연속 SHA256 해시 계산하기 0e5f78ed0a4945c8eeea1657093b7210a...

PlantUML 간단하게 사용하기

PlantUML 간단하게 사용하기 UML 다이어그램을 그릴 때 사용할 수 있는 PlantUML을 PC에 설치하고 이미지 파일을 생성하는 방법을 소개합니다. 1. 설치하기 Java 설치 plantuml.jar 다운로드 2. 실행하기 2.1. 텍스트 파일 작성 텍스트 파일 sequenceDiagram.txt 을 만들고 PlantUML 문법 으로 아래와 같이 내용을 작성하여 저장합니다. @startuml Alice -> Box: test @enduml 2.2. 이미지 파일 생성 위에서 작성한 텍스트파일로 다이어그램 파일을 생성하는 방법 두 가지를 소개합니다. 2.2.1. 명령 프롬프트에서 생성하는 방법 java -jar plantuml.jar sequenceDiagram.txt 텍스트 파일에서 한글을 사용하였고 UTF-8로 저장하였다면 아래와 같이 파일 인코딩 형식을 지정하여 실행하면 다이어그램에서 한글이 정상적으로 표시됩니다. java -Dfile.encoding=UTF-8 -jar plantuml.jar sequenceDiagram.txt 위 명령을 수행하면 해당 디렉토리에 sequenceDiagram.png 이미지 파일이 생성됩니다. 2.2.2 GUI에서 생성하는 방법 java -jar plantuml.jar -gui GUI 프로그램은 작업 디렉토리의 변경을 자동으로 감지하고 이미지 파일을 생성해 줍니다. 참고 자료 PlantUML 간단 요약 PlantUML for the impatient PlantUML GUI Written with StackEdit .

Guava BloomFilter 사용 기초

Guava BloomFilter 사용 기초 사용 환경 Windows 10 Java 1.8 Gradle 7.2 Spring Boot 2.5.4 Oracle DB 19 MyBatis 2.2.0 프로젝트 생성하기 프로젝트 생성 브라우져에서 spring initializr 를 방문하여 아래와 같이 입력하고 GENERATE 버튼을 클릭합니다. Project: Gradle Project Language: Java Spring Boot: 2.5.5 Project Meta: Group: trvoid.bloomfilter Artifact: bloom-filter Name: bloom-filter Package name: trvoid.bloomfilter Packaging: Jar Java: 8 Dependencies: JDBC API MyBatis Framework Oracle Driver 생성된 프로젝트 파일을 다운로드하여 압축을 풉니다. 프로젝트 폴더 구조는 아래와 같습니다. bloom-filter |-src |-main |-java |-trvoid.bloomfilter |-BloomFilterApplication.java |-resources |-application.properties |-test |-java |-trvoid.bloomfilter |-BloomFilterApplicationTests.java |-build.gradle build.gradle 파일에서 의존성 항목을 확인할 수 있습니다. dependencies { implementation 'org.springframework.boot:spring-boot-starter-jdbc' implementation 'org.mybatis.sprin...

당뇨병 발병 예측 - Gaussian Naive Bayes 모델

diabetes-onset-by-gaussian-nb 당뇨병 발병 예측 - Gaussian Naive Bayes 모델 ¶ 이 글에서는 피마 인디언 당뇨병 데이터세트를 사용하여 어떻게 당뇨병 발병을 예측할 수 있는지 베이지안 추론 방식으로 보여줍니다. 이 글의 전개 과정은 아래와 같습니다. 당뇨병 발병 데이터세트를 준비합니다. 발병 여부별로 측정값의 히스토그램을 그려서 분포를 파악합니다. 발병 여부에 따라서 측정값이 어떻게 분포할 수 있는지 설명하는 모델을 정의합니다. 측정값이 주어질 때 발병 여부를 예측하는 분류기를 구현합니다. 데이터 세트를 훈련 데이터와 검증 데이터로 나누어 분류기를 훈련시키고 예측 성능을 구합니다. 라이브러리 준비 ¶ 사용할 파이썬 라이브러리들을 임포트합니다. In [23]: from collections import defaultdict import numpy as np import pandas as pd from sklearn.model_selection import train_test_split from scipy.stats import norm import matplotlib.pyplot as plt % matplotlib inline np . set_printoptions ( precision = 6 ) np . random . seed ( 7 ) 데이터 준비 ¶ UCI Machine Learning 에서 제공하는 Pi...