Bitcoinをさくっと開発するためのJSON神パッケージを作ったよ


はじめに

本記事はGo言語でJSON-RPCライブラリを開発したものをまとめ、以下の内容を取り上げています。

  • どのようにBitcoinアプリケーションを開発するか
  • このパッケージで何ができるか
  • どのようにこのパッケージを使うか
  • このパッケージに貢献するにはどうしたらいいか

ソースコードはこちらです。

要約

  • めちゃ使いやすいパッケージだよ
  • 世の中のほとんどのブロックチェーン開発はAPI叩くゲームだよ
  • 誰でもできるよ、簡単
  • 汎用的なJSON-RPCのラッパーだよ

動機
単純にいろんなものを検索しましたが、直感的に使うことのできるパッケージがほとんどなかったらです。
既存のJSON-RPCのパッケージだと汎用性がある分、ベーシック認証や他のメタ情報をつけるのに以下のように冗長になっていまいます。

// クライアントを作成するコード
// ベーシック認証用のコード
// 送信
// ...

あとの使い方で紹介しますがめちゃめちゃ使いやすくなっています。
このような面で、WalletやWebサービスなどいろんな人に開発していただきたいので書きました。

どのようにBitcoinアプリケーションを開発するか

Bitcoin開発にはノードとクライアントが必要になり、それらはJSON-RPCで通信をします。
以下のような構図です。

また、ブロックチェーン開発といえど、何も気にすることはありません。
Bitcoinには公式APIがあるのでサーバーを叩くだけで使えます。

ほとんどブロックチェーンはこれらを使ったサービスであり、本質的には何もブロックチェーンではないです。
また確かに暗号は使われていますが、実際にエンジニアはライブラリを使ってアドレス生成や公開鍵暗号方式などを使えるのでWebサービスと何も変わらないので安心してください

実際に「ブロックチェーン開発」といえるようなものは、実際に独自通貨を作っている人だけです。

このパッケージで何ができるか

このパッケージでは2018/02/20段階では以下のことができます。

  • Addressを生成すること
  • Transactionを取得したり、デコードすること
  • Blockの情報を取得する

今後も精力的に開発は進めていって、Bitcoin開発が民主化することを目指しています。

どのようにこのパッケージを使うか

めちゃめちゃ簡単です

package main

import (
  "github.com/KeisukeYamashita/go-btcrpc"
)

func main() {
    basicAuth := &BasicAuth{
        Username: os.Getenv("USERNAME"),
        Password: os.Getenv("PASSWORD"),
    }
    c := NewRPCClient(os.Getenv("BTCD_ENDPOINT"), basicAuth)
    address := "my88QLpf2RYYDdNMmDwYvfx6TFc6NXaELa" //sample
    balance := c.GetBalance(address)
    print(balance) // 0.13514 BTC
}

たったこれだけです!!!

コード解説をします。
ベーシック認証を通るよう設定して、JSON-RPCクライアントを初期化します。

     basicAuth := &BasicAuth{
        Username: os.Getenv("USERNAME"),
        Password: os.Getenv("PASSWORD"),
    }
    c := NewRPCClient(os.Getenv("BTCD_ENDPOINT"), basicAuth)

そしてメソッドを叩きます。戻り値として結果が返ってきます。

address := "my88QLpf2RYYDdNMmDwYvfx6TFc6NXaELa"
balance := c.GetBalance(address)

// c.<メソッド名>で用意されています。今回は残高取得という主要コマンドを叩いています。今後全機能対応予定

それだけです。
これで誰でも簡単に開発を始めることができます。神。

このパッケージに貢献するにはどうしたらいいか

これから色んなメソッドを追加していき、最終的には完全なBitcoinパッケージになればいいなと思います。

開発者はPull RequestやIssueを出してくださると対応いたします。
より良いパッケージにしてきたいです。
今後はEthereum、Ripple, Nem, Liskの順番で出だしていきます。

最後までありがとうございました!

ソースコードはこちらです。