Bitcoin Indexer with Extended btcd
Bitcoin Indexer
BTC 거래에서 특정 주소에 대한 입금이 있는지 확인하기 위해
Bitcoin의 블록 데이터를 파싱하여 mysql
에 넣을 수 없는지 조사해 보았습니다.
Golang에서 구현되는 Bitcoin 라이브러리가 성공적으로 확장되도록 구현되었으므로,
그쪽을 이용하여 추가 구현해 보았습니다.
내용
Bitcoin의 블록 데이터를 저장할 위치를 mysql
로 설정합니다.
다음 표에 데이터를 저장하기로 결정합니다.
-- blocks
drop table if exists `blocks`;
create table `blocks` (
`id` int(11) not null auto_increment,
`network` int(11) not null,
`block_len` int(11) not null,
`checksum` varchar(8) character set utf8 not null default '',
`raw_bytes` mediumblob not null,
`hash` varchar(64) character set utf8 not null default '',
`height` int(11) not null default 0,
`block_time` timestamp not null default current_timestamp,
`created` timestamp not null default current_timestamp,
`updated` timestamp not null default current_timestamp on update current_timestamp,
primary key (`id`),
index idx_blocks_01 (`hash`),
index idx_blocks_02 (`height`)
) engine=innodb default character set utf8;
-- transaction_outputs
drop table if exists `transaction_outputs`;
create table `transaction_outputs` (
`id` int(11) not null auto_increment,
`block_id` int(11) not null,
`transaction_id` varchar(64) character set utf8 not null default '',
`amount` bigint not null,
`pk_script_bytes` mediumblob not null,
`pk_script_class` tinyint unsigned not null,
`created` timestamp not null default current_timestamp,
`updated` timestamp not null default current_timestamp on update current_timestamp,
primary key (`id`),
index idx_transaction_outputs_01 (`block_id`),
index idx_transaction_outputs_02 (`transaction_id`)
) engine=innodb default character set utf8;
-- transaction_output_addresses
drop table if exists `transaction_output_addresses`;
create table `transaction_output_addresses` (
`id` int(11) not null auto_increment,
`block_id` int(11) not null,
`tx_out_id` int(11) not null,
`address` varchar(255) character set utf8 not null default '',
`created` timestamp not null default current_timestamp,
`updated` timestamp not null default current_timestamp on update current_timestamp,
primary key (`id`),
index idx_transaction_output_addresses_01 (`address`)
) engine=innodb default character set utf8;
transaction_output_addresses
에 입금 된 주소의 정보가 모여 가서 그를 감시함으로써,
입금을 확인할 수 있게 됩니다.
여기에는 구현한 내용이 들어 있습니다.
동작 확인
build & install
$ go install github.com/btcsuite/btcd
실행
docker 로 mysql을 구축해, user/pass/dbname등을 적시 설정해 둔다.
그런 다음 btcd.conf
를 만들고 명령 줄에서 지정하여 btcd
를 시작합니다.
data_dir=`pwd`/data
./btcd --configfile=${data_dir}/btcd.conf --datadir=${data_dir} --logdir=${data_dir}/logs
[Application Options]
testnet=1
dbtype="mysqlldb"
dbrwconnection="user:pass@tcp(127.0.0.1:3306)/dbname"
dbroconnection="user:pass@tcp(127.0.0.1:3306)/dbname"
; ------------------------------------------------------------------------------
; Debug
; ------------------------------------------------------------------------------
debuglevel="debug"
이런 식으로 실행하면 · ·
다음과 같은 느낌으로 데이터를 얻을 수 있다
주의사항
아직 테스트 단계의 소스이며 운영 실적이 없습니다. 이용은 자기책임으로 부탁합니다. 또, 버그등의 지적은 환영합니다만, 서포트는 하기 어려운 경우가 있습니다.
이상이 됩니다.
Reference
이 문제에 관하여(Bitcoin Indexer with Extended btcd), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/KumanoT/items/e7ada5f52046ea085987
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
-- blocks
drop table if exists `blocks`;
create table `blocks` (
`id` int(11) not null auto_increment,
`network` int(11) not null,
`block_len` int(11) not null,
`checksum` varchar(8) character set utf8 not null default '',
`raw_bytes` mediumblob not null,
`hash` varchar(64) character set utf8 not null default '',
`height` int(11) not null default 0,
`block_time` timestamp not null default current_timestamp,
`created` timestamp not null default current_timestamp,
`updated` timestamp not null default current_timestamp on update current_timestamp,
primary key (`id`),
index idx_blocks_01 (`hash`),
index idx_blocks_02 (`height`)
) engine=innodb default character set utf8;
-- transaction_outputs
drop table if exists `transaction_outputs`;
create table `transaction_outputs` (
`id` int(11) not null auto_increment,
`block_id` int(11) not null,
`transaction_id` varchar(64) character set utf8 not null default '',
`amount` bigint not null,
`pk_script_bytes` mediumblob not null,
`pk_script_class` tinyint unsigned not null,
`created` timestamp not null default current_timestamp,
`updated` timestamp not null default current_timestamp on update current_timestamp,
primary key (`id`),
index idx_transaction_outputs_01 (`block_id`),
index idx_transaction_outputs_02 (`transaction_id`)
) engine=innodb default character set utf8;
-- transaction_output_addresses
drop table if exists `transaction_output_addresses`;
create table `transaction_output_addresses` (
`id` int(11) not null auto_increment,
`block_id` int(11) not null,
`tx_out_id` int(11) not null,
`address` varchar(255) character set utf8 not null default '',
`created` timestamp not null default current_timestamp,
`updated` timestamp not null default current_timestamp on update current_timestamp,
primary key (`id`),
index idx_transaction_output_addresses_01 (`address`)
) engine=innodb default character set utf8;
$ go install github.com/btcsuite/btcd
data_dir=`pwd`/data
./btcd --configfile=${data_dir}/btcd.conf --datadir=${data_dir} --logdir=${data_dir}/logs
[Application Options]
testnet=1
dbtype="mysqlldb"
dbrwconnection="user:pass@tcp(127.0.0.1:3306)/dbname"
dbroconnection="user:pass@tcp(127.0.0.1:3306)/dbname"
; ------------------------------------------------------------------------------
; Debug
; ------------------------------------------------------------------------------
debuglevel="debug"
Reference
이 문제에 관하여(Bitcoin Indexer with Extended btcd), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/KumanoT/items/e7ada5f52046ea085987텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)