• Home
  • ビットコインのトランザクションをNode.jsで調べる

ビットコインのトランザクションをNode.jsで調べる

ビットコインのデータはブロック(トランザクション内の移動記録)が積み重なることにより出来ている。つまり、あるトランザクションを確認したり、さかのぼることで送信元や送信先のアドレスが分かる仕組みとなっている。

● getrawtransaction 結果から送信元アドレスの調査

getrawtransaction では指定したトランザクションが VIN(inputとなったトランザクション)を使用しVOUT(送信先アドレス)にいくら送信したか、という情報が取得できる。しかし、送信元のアドレスは記載されていないため過去のトランザクションを確認することで調査する。

getrawtransaction による情報取得

この例では Tran abc*** は VIN0(Tran123***)、VIN1(Tran456***)を使用し、VOUT0(アドレスA)に送信を行っている。
VIN0 は Tran123*** の VOUT1(アドレスY)、
VIN1 は Tran456*** の VOUT0(アドレスZ) の を送信元としていることが分かる。

node.js による getrawtransaction からの送信元アドレスの取得

1. getrawtransaction の VIN 情報を取得

const bitcore = require('bitcore-lib');
const RpcClient = require('bitcoind-rpc');
const config = 'http://user:pass@111.11.1.1:1111/';
const rpc = new RpcClient(config);
const transactionid = process.argv[2];

rpc.getrawtransaction(transactionid, 1, function (error, response, body) {
let transaction_vin = Object.keys(response["result"]["vin"]);
transaction_vin.forEach( function(value, index) {
console.log(response["result"]["vin"][index]);
});
});

2. txid および vout の確認

txid: ‘TXID’、vout: numericを確認する。(複数の可能性も有り)

3. getrawtransaction の VOUT 情報を取得(2で取得したtxid分繰り返す)

const bitcore = require('bitcore-lib');
const RpcClient = require('bitcoind-rpc');
const config = 'http://user:pass@111.11.1.1:1111/';
const rpc = new RpcClient(config);
const transactionid = process.argv[2];

rpc.getrawtransaction(transactionid, 1, function (error, response, body) {
let transaction_vout = Object.keys(response["result"]["vout"]);
transaction_vout.forEach( function(value, index) {
console.log(response["result"]["vout"][index]);
});
});

node getRawT_vout.js TXIDTXIDに含まれるVOUT情報が出力される。

{ value: 0.05,
n: 0,
scriptPubKey:
{ asm: 'OP_DUP OP_HASH160 4f0de331e868344fc7f15446186bcec18cae4a1d OP_EQUALVERIFY OP_CHECKSIG',
hex: '76a9144f0de331e868344fc7f15446186bcec18cae4a1d88ac',
reqSigs: 1,
type: 'pubkeyhash',
addresses: [ '18D125Gkt694EB7MocFMPPWvpgNv2UZs8G' ] } }
{ value: 196.6,
n: 1,
scriptPubKey:
{ asm: 'OP_DUP OP_HASH160 97bc9d0d6fc0d1fa65494060a01edbc3d7c8380e OP_EQUALVERIFY OP_CHECKSIG',
hex: '76a91497bc9d0d6fc0d1fa65494060a01edbc3d7c8380e88ac',
reqSigs: 1,
type: 'pubkeyhash',
addresses: [ '1EqJz4YmWwUVoq7a1cz2zm9SnwQKkSNSwR' ] } }

この結果の n: numeric に対応する addresses が送信元アドレスである。

ご相談・お見積もり

03-5207-2689