PythonによるSolanaブロックチェーンアプリ開発

PythonによるSolanaブロックチェーンアプリ開発 仮想通貨・暗号資産

「PythonでSolanaブロックチェーンアプリの開発を行いたい」
「PythonでSolana関連のシステムを開発したい」
「Pythonで仮想通貨SOLを扱う仕組みを考えている」

このような場合には、Solana.pyがオススメです。
この記事では、Solana.pyについて解説しています。

本記事の内容

  • Solana.pyとは?
  • Solana.pyのシステム要件
  • Solana.pyのインストール
  • Solana.pyの動作確認

それでは、上記に沿って解説していきます。

Solana.pyとは?

Solana.pyとは、Solana JSON RPCにアクセスするためのPython APIです。
ライブラリとして提供されており、pipでインストールできます。

Solana JSON RPC
https://docs.solana.com/developing/clients/jsonrpc-api

Solana JSON RPCは、Solanaが公式に公開している仕様になります。
Solana.pyを使えば、面倒なコーディングが不要になるということです。

Solanaに関して言えば、実質2021年がスタートと言えます。
そのため、まだまだSolana関連のライブラリが充実しているとは言えません。

しかし、その中でもSolana.pyが現在は最有力と言えます。
これは、Pythonに絞った場合の話になります。

よって、Python使いであればSolana.pyを追いかけるのはアリだと思います。

以上、Solana.pyについて説明しました。
次は、Solana.pyのシステム要件を確認します。

Solana.pyのシステム要件

現時点(2022年2月)でのSolana.pyの最新バージョンは、0.21.0となります。
この最新バージョンは、2022年1月14日にリリースされています。

サポートOSに関しては、以下を含むクロスプラットフォーム対応です。

  • Windows
  • macOS
  • Linux

サポート対象となるPythonのバージョンは、以下となっています。

  • Python 3.7
  • Python 3.8
  • Python 3.9
  • Python 3.10

以下は、Python公式開発サイクルです。

バージョンリリース日サポート期限
3.62016年12月23日2021年12月23日
3.72018年6月27日2023年6月27日
3.82019年10月14日2024年10月
3.92020年10月5日2025年10月
3.102021年10月4日2026年10月

Solana.pyは、Python公式開発サイクルへ完璧に対応しています。
こういう地味なところが、ライブラリへの信頼度に関わると感じます。

ここまでをまとめると、Solana.pyはPythonのバージョンだけに注意です。
それさえ注意すれば、特に問題はないと言いたいのですが・・・

実は、Solana.pyは依存関係のあるパッケージ数が結構多いです。
そのため、Python仮想環境の利用をオススメします。

以上、Solana.pyのシステム要件を説明しました。
次は、Solana.pyのインストールを行います。

Solana.pyのインストール

検証は、次のバージョンのPythonで行います。

$ python -V
Python 3.10.2

まずは、現状のインストール済みパッケージを確認しておきます。

$ pip list
Package    Version
---------- -------
pip        22.0.3
setuptools 60.7.1
wheel      0.36.2

次にするべきことは、pipとsetuptoolsの更新です。
pipコマンドを使う場合、常に以下のコマンドを実行しておきましょう。

python -m pip install --upgrade pip setuptools

では、Solana.pyのインストールです。
Solana.pyのインストールは、以下のコマンドとなります。

pip install solana

インストールは、そこそこ時間がかかります。
では、どんなパッケージがインストールされたのかを確認しましょう。

$ pip list
Package            Version
------------------ ---------
anyio              3.5.0
apischema          0.16.6
attrs              21.4.0
base58             2.1.1
cachetools         4.2.4
certifi            2021.10.8
cffi               1.15.0
charset-normalizer 2.0.11
construct          2.10.67
construct-typing   0.5.2
h11                0.12.0
httpcore           0.13.7
httpx              0.18.2
idna               3.3
jsonrpcclient      4.0.2
jsonrpcserver      5.0.6
jsonschema         3.2.0
OSlash             0.6.3
pip                22.0.3
pycparser          2.21
PyNaCl             1.5.0
pyrsistent         0.18.1
requests           2.27.1
rfc3986            1.5.0
setuptools         60.7.1
six                1.16.0
sniffio            1.2.0
solana             0.21.0
types-cachetools   4.2.9
typing-extensions  3.10.0.2
urllib3            1.26.8
websockets         10.1
wheel              0.36.2

すでに述べた通り、多くのパッケージがインストールされます。
依存関係が多いと、やはりその分だけインストールの難易度は上がります。

以上、Solana.pyのインストールを説明しました。
次は、Solana.pyの動作確認を行います。

Solana.pyの動作確認

WalletのSOL残高を確認してみましょう。
Walletと言えば、最近ではPhantomに勢いがあります。

とにかく、SOLの残高があるWallteを用意しましょう。
残高がある方が、動作確認する際にはわかりやすいです。

なお、開発環境であれば簡単に残高を増やせます。
その方法は、次の記事で説明しています。

以下は、動作確認用のコードになります。

import asyncio
from solana.rpc.async_api import AsyncClient

ENDPOINT = "https://api.devnet.solana.com"
PUBKEY = "あなたのWalletアドレス"


async def main():
    async with AsyncClient(ENDPOINT) as client:
        res = await client.is_connected()
        if res:
            balance = await client.get_balance(PUBKEY)

    print(balance)


asyncio.run(main())

上記コードを実行すると次のように表示されます。

{'jsonrpc': '2.0', 'result': {'context': {'slot': 112738197}, 'value': 2901749956}, 'id': 1}

該当するアドレスのWalletをPhantomで確認します。

Phantomでは四捨五入しているのでしょうかね。
でも、同じ残高のSOLがあると言えます。

上記は、開発環境で確認しました。
本番環境での残高を確認する場合は、次のように変更します。

ENDPOINT = "https://api.mainnet-beta.solana.com"
PUBKEY = "あなたのWalletアドレス"

本番環境に変更してプログラムを実行した結果は、以下。

{'jsonrpc': '2.0', 'result': {'context': {'slot': 119548530}, 'value': 356426609}, 'id': 1}

このときのPhantom上の表記は、次のようになります。

本番環境でも問題なく残高を取得できています。
Solana.pyの動作確認としては、ここまでやれば十分でしょう。

以上、Solana.pyの動作確認について説明しました。

タイトルとURLをコピーしました