Files
carrotcoin/list-open-transactions.py
2025-12-13 23:41:07 +01:00

57 lines
1.8 KiB
Python
Executable File

#! /usr/bin/env python3
import base64, socket, sys
def get_transaction(s, i):
request = b"\0\0\0\0\x05" + i.to_bytes(2, "big")
for _ in range(10):
s.sendto(request, ("::1", 62039))
try:
while True:
msg, sender = s.recvfrom(4096)
if sender[0:2] == ("::1", 62039) and len(msg) == 156 and msg[0:5] == b"\0\0\0\0\x06" and msg[5:7] == i.to_bytes(2, "big"):
return msg[7:156]
except TimeoutError:
pass
return None
def format_addr(raw_addr):
return base64.b64encode(raw_addr).decode()
def format_amount(raw_amount):
int_amount = int.from_bytes(raw_amount, "big")
coins = int_amount // 100
cents = int_amount % 100
return f"{coins},{cents:02} cc"
def main():
s = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM)
s.settimeout(1)
for i in range(1024):
transaction = get_transaction(s, i)
if transaction is None:
print("- no response from local node -", file=sys.stderr)
exit(1)
if transaction == 149 * b"\0":
return
if transaction[0] == 1:
sender = format_addr(transaction[5:37])
receiver = format_addr(transaction[37:69])
amount = format_amount(transaction[69:77])
fee = format_amount(transaction[77:85])
elif transaction[0] == 2:
sender = format_addr(transaction[5:37])
receiver = "(gambling)" + 33 * " "
amount = format_amount(transaction[37:45])
fee = format_amount(transaction[45:53])
elif transaction[0] == 3:
print("- reveal transaction -")
sender = None
else:
sender = None
if sender is not None:
print(f"{sender} {receiver} {amount:>13} {fee:>10}")
if __name__ == '__main__':
main()