Bitcoin Indexer with Extended btcd

12403 단어 5MySQLBitcoin

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"

이런 식으로 실행하면 · ·
다음과 같은 느낌으로 데이터를 얻을 수 있다







주의사항



아직 테스트 단계의 소스이며 운영 실적이 없습니다. 이용은 자기책임으로 부탁합니다. 또, 버그등의 지적은 환영합니다만, 서포트는 하기 어려운 경우가 있습니다.

이상이 됩니다.

좋은 웹페이지 즐겨찾기