指定したアドレスで何BTCを受け取ったのかブロックチェーンから計算する
はじめに
ビットコインのアービトラージシステムに触れる機会があり
ブロックチェーンに少し興味を持ちました。
ビットコインも買ってみて
アービトラージで運用して増やしてみたりする中で
自分でもブロックチェーンを使って何かできるかなと思って
やってみることにしました。
ブロックチェーン
正直何にも知りません・・・焦
とりあえずAPIがあったので一通り確認したところ
アドレスを指定してそのアドレスで何ビット受け取っているのかを確認するぐらいであれば
すぐにできそうだったのでやってみました^^
まずはブラウザから試してみる
このURLで表示。
https://blockchain.info/ja/rawaddr/{{.Address}}
おぉ、色んな情報が取れますね。
(値はリファレンスに乗っているものをそのまま転記しています。)
{
"hash160":"660d4ef3a743e3e696ad990364e555c271ad504b",
"address":"1AJbsFZ64EpEfS5UAjAfcUG8pH8Jn3rn1F",
"n_tx":17,
"n_unredeemed":2,
"total_received":1031350000,
"total_sent":931250000,
"final_balance":100100000,
"txs":[--Array of Transactions--]
}
{
"hash":"b6f6991d03df0e2e04dafffcd6bc418aac66049e2cd74b80f14ac86db1e3f0da",
"ver":1,
"vin_sz":1,
"vout_sz":2,
"lock_time":"Unavailable",
"size":258,
"relayed_by":"64.179.201.80",
"block_height, 12200,
"tx_index":"12563028",
"inputs":[
{
"prev_out":{
"hash":"a3e2bcc9a5f776112497a32b05f4b9e5b2405ed9",
"value":"100000000",
"tx_index":"12554260",
"n":"2"
},
"script":"76a914641ad5051edd97029a003fe9efb29359fcee409d88ac"
}
],
"out":[
{
"value":"98000000",
"hash":"29d6a3540acfa0a950bef2bfdc75cd51c24390fd",
"script":"76a914641ad5051edd97029a003fe9efb29359fcee409d88ac"
},
{
"value":"2000000",
"hash":"17b5038a413f5c5ee288caa64cfab35a0c01914e",
"script":"76a914641ad5051edd97029a003fe9efb29359fcee409d88ac"
}
]
}
APIからやってみる
Goで書いています。
バッチリできました。
func main() {
addr := "調べたいアドレス"
body, err := GET(fmt.Sprintf("https://blockchain.info/ja/rawaddr/%s", addr), nil)
if err != nil {
fmt.Print(err)
}
// リファレンスに合わせた構造体を作っておいてjson.Unmarshal
res := blockchain.Address{}
json.Unmarshal(body, &res)
sum := float64(0)
for _, txs := range res.Txs {
// 今回は受け取ったものだけ見ていく
for _, out := range txs.Out {
// 対象のアドレスだったら
if out.Addr == addr {
// 足す
sum += float64(out.Value)
}
}
}
// APIから取れるのはsatoshiなのでBTCに変換
fmt.Println(sum / 100000000)
}
func GET(endpoint string, values url.Values) ([]byte, error) {
req, _ := http.NewRequest("GET", endpoint, strings.NewReader(""))
req.Header.Set("Content-Type", "application/json; charset=UTF-8")
req.URL.RawQuery = values.Encode()
return Request(req)
}
func Request(req *http.Request) (body []byte, err error) {
client := &http.Client{Timeout: time.Duration(30 * time.Second)}
res, err := client.Do(req)
if err != nil {
return
}
defer res.Body.Close()
body, err = ioutil.ReadAll(res.Body)
if err != nil {
return
}
return
}
最後に
折角なのでAPIの申請をして
ビットコインの決済システムを作ってみようと思います。
ご興味ある方がいたら是非ご連絡ください!^^
今よりも高い単価 or お給料でエンジニアさん大募集中です✨
ブロックチェーンの勉強会+交流会もやっています。
気軽に参加できるものになっていますので
こちらでも是非お待ちしています。
https://beyond-stereotype.connpass.com/
Author And Source
この問題について(指定したアドレスで何BTCを受け取ったのかブロックチェーンから計算する), 我々は、より多くの情報をここで見つけました https://qiita.com/courage-liberty/items/a802bd8724e145e47510著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .