Python - pywavesメモ

まえがき

WavesノードはREST APIを備えており、それを介してWavesブロックチェーンおよびDEX(Matcher)にアクセスできる。
ライトクライアントもこれを使っている。
pythonでは、ライブラリがあるのでそれを使うと楽である。

現時点ではpublic-apiのみ。
private-api使いたい場合は直接APIを叩く。

インストール

pip でインストール

$ pip3 install pywaves

使い方

pywavesのドキュメントはコードサンプルもあり分かりやすいと思うので、それに従うのが良い。
大量に処理する場合は自分用のノードを立て、そこにアクセスすると行儀が良い。
pywavesはmainnet/testnetのみ対応のため、customで使いたい場合は、pywaves中のCHAIN_IDを書き換える。
アドレスを生成して処理をおこなっていく。

import pywaves as pw

# ノードを切り替える
pw.setNode('http://127.0.0.1:6869', 'mainnet')

# custom用にする。confファイルの設定値を一致させること
pw.CHAIN_ID = 'Z'

# custom用のアドレスが生成される
addr = pw.Address()

# 以降、アドレスを使った処理を記述

MatcherおよびDatafeedのデータはノードごとに独立であることに注意。
pywaves初期設定ではライトクライアントと同じところを見ている。
自分の立てたノードに変更するとOrderbookは空っぽになる(そのノードには誰も注文を出していないので)。
後、そもそもDatafeedの機能はノードには含まれていない。たぶん、オープンにもなっていない。

ほとんどの操作には署名が必要なので、PrivateKey以上が必要。
PublicKey以下で確認できるのはbalanceくらい。

import pywaves as pw

addr1 = pw.Address(address='xxxx')
addr2 = pw.Address(publicKey='yyyy')
addr3 = pw.Address(privateKey='zzzz')
addr4 = pw.Address(seed='wwww')

# WAVES送信したりできるのは、addr3, 4のみ
# 送り先は addr1, 2でOK

アドレスの話はこちらを参照

リース、アセット生成、DEXオーダーなどするとトランザクションIDが得られる。
キャンセルはIDを指定して行うし、アセット生成の場合はそのIDがアセットIDになるので、 覚えておくこと。 忘れるとめんどくさいことになる。

数値の表現は最小単位(1WAVES = 100000000)。
アセットの場合は、生成時のdecimalによるので気をつける。
送信、リース、アセット生成、DEXなど指定誤りのないように。

以上。
気づいたら追記するかもしれない。


See also