本記事は2022年12月13日投稿のXRPL公式ブログ"Introducing xrpl-py version 2.0.0-beta.0“の和訳です。
まえがき
本日、RippleXとXRP Ledger Foundation(XRPLF)はxrpl-py version 2.0.0-beta.0を公開しました。
β版ではウォレットを生成するための3つの新しい方法、レギュラーキーのサポート、Walletクラスへのいくつかの大きな変更が導入されています。
おおまかな変更点
このアップデートに伴う主な変更点は以下の3つです。
1. Walletクラスからsequenceフィールドを削除
これまでのWalletクラスは、トランザクションの送信を容易にするためにsequenceフィールドを含んでいました。しかしながら実際にはこれによって複雑さが増していました。通常、Walletインスタンスを作成する際にはsequence番号を知らないため、各トランザクションの後に手動で番号をインクリメントする必要があったのです。トランザクションを自動入力する際には、真源であるLedgerからsequence番号を取得する方が安全です。
2. シード生成に UTF-8 文字列ではなく、16 進文字列を使用
エントロピー文字列からのシード生成は、UTF-8文字列ではなく16進文字列を取り込むようになりました。これはXUMMウォレットで一般的に用いられているような、XLS-12シークレット番号からウォレットを生成するために特に必要でした。xrpl-pyはエントロピーを UTF-8 値として取り扱っていましたが、すべてのバイト列が有効なUTF-8文字列ではないため問題があり、シード生成のためのランダムなエントロピーの全範囲を利用するための妨げとなっていました。
3. Walletクラスのメソッドは、デフォルトで Ed25519 アルゴリズムを使用
アルゴリズムを指定せずにシードからウォレットを初期化する場合、ライブラリはデフォルトで Ed25519を使用するようになりました。これはsecp256k1アルゴリズムと比較して Ed25519のほうがパフォーマンスや他の便利な特性が優れているためです。以前はxrpl-pyがシードからアルゴリズムを解釈しようとしました。古いエンコーディング方法を使用するには、Walletオブジェクトを初期化するときにalgorithm=secp256k1を指定します。
こまかな変更点
-
Walletクラスsequenceフィールドを削除- 公開鍵と秘密鍵を必須パラメータとして取るようコンストラクタを変更
- デフォルトでクラスメソッドがEd25519暗号アルゴリズムを使用するよう変更
addressとclassic_addressフィールドを読み取り専用に変更
-
コアキーペア
generate_seedメソッドにUTF-8文字列ではなく、16進文字列を指定するように変更- Ed25519鍵の文字列において、長さが32バイト未満の場合はゼロパディングするよう追加
新しく追加された点
Walletクラス- シード/シークレット、エントロピー、XLS-12シークレット番号からウォレットを生成するメソッドを追加
- 通常のキーペアのサポートを追加
classic_addressのエイリアスであるaddressフィールドを追加
移行方法: ウォレット・シーケンス
変更前
OfferCancel(
account=WALLET.classic_address,
sequence=WALLET.sequence,
offer_sequence=OFFER.result["tx_json"]["Sequence"],
),
変更後
OfferCancel(
account=WALLET.classic_address,
sequence=get_next_valid_seq_number(WALLET.address, client),
offer_sequence=OFFER.result["tx_json"]["Sequence"],
),
classic_addressフィールドを省略し、署名前に自動入力を使用することもできます。
移行方法: コアキーペアのシード生成
変更前
DUMMY_BYTES = b"\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10"
seed = generate_seed(DUMMY_BYTES.decode("UTF-8"))
変更後
DUMMY_BYTES = b"\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10"
seed = generate_seed(DUMMY_BYTES.hex())
文字列が16バイトより長い場合、
generate_seed()に渡す前に切り詰めなければなりません。
移行方法: ウォレット・コンストラクタ
変更前
wallet = Wallet("snoPBrXtMeMyMHUVTgbuqAfg1SUTb", sequence=1)
// wallet.classic_address: rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh
変更後
wallet = Wallet.from_seed("snoPBrXtMeMyMHUVTgbuqAfg1SUTb", algorithm="secp256k1")
// wallet.address: rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh
secp256k1アルゴリズムを使ってデコードしていたシードの場合、それを明示的に指定しないと
Wallet.from_seed()は異なるクラシックアドレスと公開鍵/秘密鍵を返します。
ビルド手順
pipを利用してこのβ版をインストールすることができます。
pip install xrpl-py==2.0.0b0
このβ版には、Automated Market-Maker(AMM)およびSidechainsの機能は含まれていません。
Walletの変更をテストするためだけのものです。
あとがき
xrpl-pyを使い始めたばかりの方は、Get Started Using Python、xrpl-pyのソースコードリポジトリ、またはリファレンスドキュメントをご覧ください。
ご質問やご提案がありましたら、ぜひXRPL開発者コミュニティまでご連絡ください!あなたが価値のインターネットを構築することを楽しみにしています。
XRPL開発者コミュニティ(ディスコード)への参加はこちらからどうぞ!