wormhole/sui/tests/ws.py

95 lines
3.2 KiB
Python

import websocket
import _thread
import time
import rel
import os
import pprint
import json
import base64
# https://github.com/MystenLabs/sui/pull/5113
# {
# "jsonrpc": "2.0",
# "method": "sui_subscribeEvent",
# "params": {
# "subscription": 1805876586195140,
# "result": {
# "timestamp": 1666704112752,
# "txDigest": "ckB13AaG+OHrO0Ha3I8IK3ERanYHmHAI0jSXnqk9R+I=",
# "event": {
# "moveEvent": {
# "packageId": "0xbd99019f3c8f9d08b5498fedcc97e1c24cddff88",
# "transactionModule": "wormhole",
# "sender": "0xdc2f7334400a353c6a9303235b578477202809c6",
# "type": "0xbd99019f3c8f9d08b5498fedcc97e1c24cddff88::state::WormholeMessage",
# "fields": {
# "consistency_level": 0,
# "nonce": 400,
# "payload": "Ag==",
# "sender": "0xdc2f7334400a353c6a9303235b578477202809c6",
# "sequence": 19,
# "timestamp": 0
# },
# "bcs": "3C9zNEAKNTxqkwMjW1eEdyAoCcYTAAAAAAAAAJABAAAAAAAAAQIAAAAAAAAAAAA="
# }
# }
# }
# }
# }
# curl -s -X POST -d '{"jsonrpc":"2.0", "id": 1, "method": "sui_getEventsByTransaction", "params": ["KgsiF8pCF61N02zX2oMFYLWQdrbxkOD1ypBxND752No=", 2]}' -H 'Content-Type: application/json' http://127.0.0.1:9000 | jq
# {
# "jsonrpc": "2.0",
# "result": [
# {
# "timestamp": 1666704112752,
# "txDigest": "ckB13AaG+OHrO0Ha3I8IK3ERanYHmHAI0jSXnqk9R+I=",
# "event": {
# "moveEvent": {
# "packageId": "0xbd99019f3c8f9d08b5498fedcc97e1c24cddff88",
# "transactionModule": "wormhole",
# "sender": "0xdc2f7334400a353c6a9303235b578477202809c6",
# "type": "0xbd99019f3c8f9d08b5498fedcc97e1c24cddff88::state::WormholeMessage",
# "bcs": "3C9zNEAKNTxqkwMjW1eEdyAoCcYTAAAAAAAAAJABAAAAAAAAAQIAAAAAAAAAAAA="
# }
# }
# }
# ],
# "id": 1
# }
def on_message(ws, message):
v = json.loads(message)
print(json.dumps(v, indent=4))
if "params" in v:
tx = v["params"]["result"]["txDigest"]
#tx = base64.standard_b64decode(tx)
print(tx + " -> " + base64.standard_b64decode(tx).hex())
pl = v["params"]["result"]["event"]["moveEvent"]["fields"]["payload"]
pl = base64.standard_b64decode(pl)
print(pl.hex())
def on_error(ws, error):
print(error)
def on_close(ws, close_status_code, close_msg):
print("### closed ###")
def on_open(ws):
print("Opened connection")
ws.send("{\"jsonrpc\":\"2.0\", \"id\": 1, \"method\": \"sui_subscribeEvent\", \"params\": [{\"Package\": \"" + os.getenv("WORM_PACKAGE") + "\"}]}")
if __name__ == "__main__":
ws = websocket.WebSocketApp("ws://localhost:9001",
on_open=on_open,
on_message=on_message,
on_error=on_error,
on_close=on_close)
ws.run_forever(dispatcher=rel) # Set dispatcher to automatic reconnection
rel.signal(2, rel.abort) # Keyboard Interrupt
rel.dispatch()