2021-03-27 19:23:38 +00:00
|
|
|
# WOWlet WS Client
|
|
|
|
|
|
|
|
Sample Python asyncio websocket client for communicating with
|
|
|
|
wowlet running in "background mode" via websockets.
|
|
|
|
|
|
|
|
This library was made in a few hours, so it's not complete, and should
|
|
|
|
serve as an example and PoC.
|
|
|
|
|
|
|
|
## Example
|
|
|
|
|
|
|
|
First, start [wowlet](https://git.wownero.com/wowlet/wowlet/):
|
|
|
|
|
|
|
|
./wowlet --background 127.0.0.1:42069
|
|
|
|
|
|
|
|
Then run the following script, it will:
|
|
|
|
|
|
|
|
1. Open a wallet
|
|
|
|
2. Request a receiving address listing
|
|
|
|
3. Run forever
|
|
|
|
|
|
|
|
```python
|
|
|
|
import asyncio
|
|
|
|
|
|
|
|
from wowlet_ws_client.client import WowletWSClient
|
|
|
|
|
|
|
|
|
2021-03-28 20:51:13 +01:00
|
|
|
wowlet = WowletWSClient(
|
|
|
|
host="127.0.0.1", port=1234, password="sekrit", debug=True)
|
|
|
|
|
|
|
|
|
|
|
|
@wowlet.event("passwordIncorrect")
|
|
|
|
async def on_password_incorrect(data):
|
|
|
|
print(data)
|
|
|
|
|
|
|
|
|
|
|
|
@wowlet.event("passwordSuccess")
|
|
|
|
async def on_password_success(data):
|
|
|
|
print(data)
|
2021-03-27 19:23:38 +00:00
|
|
|
|
|
|
|
|
|
|
|
@wowlet.event("walletList")
|
|
|
|
async def on_wallet_list(data):
|
|
|
|
print("wallet listing received")
|
|
|
|
print(data)
|
|
|
|
|
|
|
|
|
|
|
|
@wowlet.event("addressList")
|
|
|
|
async def on_address_list(data):
|
|
|
|
print("address listing received")
|
|
|
|
print(data)
|
|
|
|
|
|
|
|
|
|
|
|
@wowlet.event("transactionHistory")
|
|
|
|
async def on_transaction_history(data):
|
|
|
|
print(data)
|
|
|
|
|
|
|
|
|
|
|
|
@wowlet.event("addressBook")
|
|
|
|
async def on_address_book(data):
|
|
|
|
print(data)
|
|
|
|
|
|
|
|
|
|
|
|
@wowlet.event("synchronized")
|
|
|
|
async def on_synchronized(data):
|
|
|
|
# called when the wallet is synchronized with the network
|
|
|
|
print(data)
|
|
|
|
|
|
|
|
|
|
|
|
@wowlet.event("transactionCommitted")
|
|
|
|
async def on_transaction_commited(data):
|
|
|
|
# when a transaction was sent
|
|
|
|
print(data)
|
|
|
|
|
|
|
|
|
|
|
|
async def main():
|
|
|
|
await wowlet.connect()
|
2021-03-28 20:51:13 +01:00
|
|
|
await asyncio.sleep(3)
|
|
|
|
await wowlet.authenticate()
|
|
|
|
await asyncio.sleep(3)
|
2021-03-27 19:23:38 +00:00
|
|
|
|
|
|
|
await wowlet.open_wallet("/home/user/Wownero/wallets/wstest.keys", "test")
|
|
|
|
|
|
|
|
await asyncio.sleep(3)
|
|
|
|
await wowlet.address_list(0, 0)
|
|
|
|
|
|
|
|
# hack to keep the script running
|
|
|
|
while True:
|
|
|
|
await asyncio.sleep(1)
|
|
|
|
|
|
|
|
loop = asyncio.get_event_loop()
|
|
|
|
loop.run_until_complete(main())
|
|
|
|
```
|
|
|
|
|
|
|
|
## Creating a wallet
|
|
|
|
|
|
|
|
Default directory = wowlet's default wallet directory
|
|
|
|
|
|
|
|
```python
|
|
|
|
@wowlet.event("walletCreated")
|
|
|
|
async def on_wallet_created(data):
|
|
|
|
print(data)
|
|
|
|
|
|
|
|
@wowlet.event("walletCreatedError")
|
|
|
|
async def on_wallet_created_error(data):
|
|
|
|
print("error")
|
|
|
|
print(data)
|
|
|
|
|
|
|
|
await wowlet.create_wallet("cool_wallet", password="sekrit")
|
|
|
|
```
|
|
|
|
|
|
|
|
## Creating a transaction
|
|
|
|
|
|
|
|
```python
|
|
|
|
address = "WW2cyFaAu4NSpZdpEP3egWcK99QqU8afJEpfZW1HNxofB9sH86Nir5pes7ofwAE3ZWVNdgxFrWeSiSiSLumSeZ7538zCXb6gp"
|
|
|
|
await wowlet.send_transaction(
|
|
|
|
address=address,
|
|
|
|
amount=2,
|
|
|
|
description="test transaction from Python")
|
|
|
|
```
|
|
|
|
|
|
|
|
## QR
|
|
|
|
|
|
|
|
This library can also generate QR codes because why not.
|
|
|
|
|
|
|
|
```python
|
|
|
|
import aiofiles
|
|
|
|
from wowlet_ws_client.qr import qr_png
|
|
|
|
|
|
|
|
addr = "some_address_here"
|
|
|
|
qr_image = qr_png(addr)
|
|
|
|
|
|
|
|
async with aiofiles.open('output.png', mode="wb") as f:
|
|
|
|
await f.write(qr_image.getbuffer())
|
|
|
|
```
|
|
|
|
|
|
|
|
## License
|
|
|
|
|
|
|
|
BSD
|