ブロックチェーンから入金確認
入金確認し残高を反映するにはデータベースが必要になります。
用語
UTXO
- unspent transaction output
- 未使用トランザクション出力
まだ支払いに使っていないトランザクションのこと。
(ビットコインではこれを合計したものが残高です)
TXID
- transaction id
- トランザクションID
トランザクションにつけられたID
VOUT
- value out
- 出力
トランザクション内の出力番号。
一つのトランザクションで複数のアドレスへ送金できるため
トランザクション内の送金番号のようなもの。
入金のフロー
- ビットコインのアドレスに着金したUTXOがあるか確認
- UTXOが存在したらTXIDとVOUTで複合キーまたはユニークIDを作り未承認状態としてデータベースに登録する
- データベースにTXIDとVOUTが存在していたら登録しない
- TXIDで取得したトランザクションが承認されたか確認し承認されたら承認状態とし残高に反映する
- 承認されなかった場合はエラー状態にする
※TXIDは入金の主キーとして使うことはできないので気をつける。
※承認されなかった場合とはトランザクションがTXIDで取得できなくなること。(複数のブロックエクスプローラを参照している場合は片方届いてもう片方届いてない場合もあるので時間差も考慮する)
UTXOのサンプル
insightへアクセスする
https://insight.bitpay.com/api/addr/12c6DSiU4Rq3P4ZxziKxzrL5LmMBrzjrJX/utxo
入金があれば以下のようなUTXOが得られる
[
{
"address":"12c6DSiU4Rq3P4ZxziKxzrL5LmMBrzjrJX",
"txid":"a162df9f7653ad982e8f630c95c7f7c2bd42d38a1fd4ec4588f611fab4d19b53",
"vout":5,
"scriptPubKey":"76a914119b098e2e980a229e139a9ed01a469e518e6f2688ac",
"amount":0.0002023,
"satoshis":20230,
"height":417969,
"confirmations":1666
},{
"address":"12c6DSiU4Rq3P4ZxziKxzrL5LmMBrzjrJX",
"txid":"99d1be2407a19c0bfd5909d7a70cf7267877eaaf1987dc8789efeedb5a6993ad",
"vout":1,
"scriptPubKey":"76a914119b098e2e980a229e139a9ed01a469e518e6f2688ac",
"amount":0.000055,
"satoshis":5500,
"height":411497,
"confirmations":8138
}
]