2020/09/14
[ADA]cardano-serialization-lib from Python その2
概要
ADAの決済やdepositのシステムを構築するのに、HDWalletを自作する必要が出てきたので、対応しました。
前回の続きです。
以下を対応しました。
- 生成したaddressにあるUTXOを使って、Transactionを作成して署名する関数を作成
- setup.pyでビルド&インストールできるようだったので、組み込みました
実装
以下のPRで対応しました。
- feat: adding tx builder. by KumanoTanaka · Pull Request #1 · kumanote/cardano-serialization-lib
- feat: expose sending function to python. by KumanoTanaka · Pull Request #2 · kumanote/cardano-serialization-lib
setup.pyの部分
ビルドするために、事前に setuptools_rust
をインストールしておきます。
% pip install setuptools_rust
from setuptools import setup
from setuptools_rust import Binding, RustExtension
setup(
name='cardano_serialization_lib',
version='0.1',
rust_extensions=[RustExtension('cardano_serialization_lib', 'rust/Cargo.toml', binding=Binding.PyO3)],
zip_safe=False
)
これで、以下を実行すると、 cardano_serialization_lib
が自動的にインストールされます。
% python setup.py install
% pip list
Package Version
------------------------- -------
cardano-serialization-lib 0.1
実行
インストールに成功すると、 cardano_serialization_lib
をimportすることができるようになります。
あとは、自作した関数(generate_transaction_from_bip32_enterprise_address
)を使って、Transactionを作成して、hexな文字列として取得することができます。
import cardano_serialization_lib
# get bip32 enterprise address string in bech32 format.
phrase = "art forum devote street sure rather head chuckle guard poverty release quote oak craft enemy"
password = ""
network = 0
account = 0
chains = 0
index = 0
address = cardano_serialization_lib.generate_bip32_enterprise_address(phrase, password, network, account, chains, index)
# get raw signed transaction bytes
utxo_list = [
(
bytes.fromhex("64887f4d5a17571af19c0a73495c17d5dd2627951e50e39ecd7e674621f42d2e"), # transaction_hash bytes
0, # transaction_index
3000000, # value
"addr_test1vpu5vlrf4xkxv2qpwngf6cjhtw542ayty80v8dyr49rf5eg57c2qv", # address
phrase, # bip32_phrase
password, # bip32_password
account, # bip32_account
chains, # bip32_chains
index # bip32_index
)
]
to_address = "addr_test1vq0a2lgc2e0r597dr983jrf5ns4hxz027u8n7wlcsjcw4ks96yjys"
send_amount = 1000000
ttl = 410000
change_address = "addr_test1vrq9aq9aeun8ull8ha9gv7h72jn95ds9kv42aqcw6plcu8qkyz99l"
tx_str = cardano_serialization_lib.generate_transaction_from_bip32_enterprise_address(
network,
utxo_list,
to_address,
send_amount,
ttl,
change_address,
)
print(tx_str)
実行結果
83a4008182582064887f4d5a17571af19c0a73495c17d5dd2627951e50e39ecd7e674621f42d2e00018282581d601fd57d18565e3a17cd194f190d349c2b7309eaf70f3f3bf884b0eada1a000f424082581d60c05e80bdcf267e7fe7bf4a867afe54a65a3605b32aae830ed07f8e1c1a001cadca021a0001d6b6031a00064190a10081825820489ef28ea97f719ee7768645fc74b811c271e5d7ef06c2310854db30158e945d584070b622f8b0c2c18976e2d36f52ef1c50627cadf40a3cf324245a639058798a9e1927f0f60955c85ba4de41d80e5f295e34a23ae5c96392ae0e5720f6d569910cf6
以上です。
関連する記事
Concordiumノードをローカルで動かしてみた
Concordiumの調査のために、ローカルでソースコードをビルドしてノードを動かしてみました
[Rust]axumとdragonflyを使ったWebsocket Chatのサンプル実装
redis互換のdragonflyをPUBSUBとして利用して、Websocket Chatアプリのサンプル実装を行いました。
[Rust]TiDBを使ったサンプルアプリケーションの実装
RustからTiDBを使ったアプリケーションの実装を行いました。
[Rust]Google Cloud Storageを利用する
GCSやNFSのファイルを扱えるpackageをRustで実装しました。