BitcoinKitでWalletを作り、残高を確認する


Bitcoinを使ったiOSアプリを手軽に使えるようにするBitcoinKit

今回は
- walletの作成
- APIを利用して、残高を確認する

初歩的なところを解説していきます。
ソースコードはこちらにあるので、良かったら参照してください。

ビルド方法

こちらを参照して下さい
「BitcoinKit」のinstall方法

walletの作成

今回は、HDWalletではなく、1つしかアドレスを持たない一番単純なwalletを作ります。

まずはprivate keyを生成し、それを引数にとってwallet作成します。

let privateKey = PrivateKey(network: .testnet)
let wallet = Wallet(privateKey: privateKey)

networkでは、BCH/BTC, Mainnet/Testnetの4種類が選べます。

上のコードでは、省略されていますが、private keyのinitializerの第2引数には、isPublicKeyCompressedが本来あります。

pubkeyには非圧縮と圧縮の2つの形があり、非圧縮のpubkeyは65バイトなのに対して、圧縮公開鍵は33バイトです。非圧縮のpubkeyを使うメリットが基本的に無いので、実装する際は圧縮公開鍵を使いましょう。Libraryでは、デフォルトで圧縮になっているので、気にする必要はありません。

WIF(Wallet Import Format)

生成したprivate keyをkeychainなどに保存したい場合、WIF(Wallet Import Format)に変換すると便利です。Libraryでは以下のコードから、WIFの生成及び、WIFからwalletを復元する方法が示されています。

let wif = privateKey.toWIF()
let wallet = wallet = Wallet(wif: wif)

Addressの表示

walletが作成できたら、walletのpubkeyを使って、アドレスが表示できます。

let pubkey = wallet!.publicKey
let base58Address = pubkey.toAddress()
// mjYvGxpiE9hyXFmkrMr9qyiNfNWSWm58FX
let cashAddr = pubkey.toCashaddr()
// bchtest:qqkrlfjuxtvkldq4pel3zxzc8tzwsyta7smhre48m5

アドレスは、base58でエンコーディングするものと、BCHの新しいアドレス表示方式のcashAddressに対応した2種類があります。

残高を確認する

まずは、Bitcoin Cash Testnetのfaucetにアクセスして、BCHを受け取りましょう(動作がが非常に不安定です)。
受け取れたら、TxIDを教えてくれるので、Bitcoin Cash Testnet Explorerで確認しておくと良いと思います。
今回は、BitPayのInsight APIを利用して、ブロックチェーンから残高を取得していきます。

End pointはこちら

let apiEndPoint = "https://test-bch-insight.bitpay.com/api" 
// Mainnet: "https://bch-insight.bitpay.com/api"

取得するUnspent Outputsの形は、以下のようになります。

struct UnspentOutput: Codable {
    let address: String
    let txid: String
    let vout: Int
    let scriptPubKey: String
    let amount: Decimal
    let satoshis: Int
    let height: Int
    let confirmations: Int
    let ts: Int
}

レスポンスをDecodeして、amountをチェックすれば、残高を確認することが出来ます。

ひとこと

次回は、トランザクションの作成及び、送金のやり方について解説したいと思います!