diff --git a/lib/functions.py b/lib/functions.py index e081ab8c6ac6340ca5716ded10a16e5d325dd0be..6fab9d91eeb5ab6e36ce2a4e88403b65377c5e4f 100644 --- a/lib/functions.py +++ b/lib/functions.py @@ -196,3 +196,48 @@ def get_blocks(leveldb_path: str) -> list: blocks.append(sample) return blocks + + +def get_tx(leveldb_path: str) -> list: + """ + Get tx, + return a list of tx + """ + # Get wallets balances data + blocks_repo = LevelDBBlocksRepository(leveldb_path) + txs = [] + for num, block in blocks_repo: + if num % 100000 == 0: + print(num) + for tx in block.get("transactions"): + outputs = tx["outputs"] + issuers = tx["issuers"] + comment = tx["comment"] + timestamp = tx["blockstampTime"] + # loop on issuers + for issuer in issuers: + # loop on outputs + for output in outputs: + outputparts = output.split(":") + amount = outputparts[0] + receiver = outputparts[2] + # ignore non trivial unlock sources + # https://git.duniter.org/tools/py-g1-migrator/-/issues/3 + if "&&" in receiver or "||" in receiver: + print(num) + print("ignoring " + receiver) + continue + receiver = receiver.split("SIG(")[1].split(")")[0] + sample = { + "blockNumber": num, + "timestamp": timestamp, + "from": issuer, + "to": receiver, + "amount": amount, + "comment": comment, + } + # do not include outputs that go back to sender + if sample["from"] != sample["to"]: + txs.append(sample) + + return txs diff --git a/squid-block.py b/squid-block.py index 465b9e49c5a9834cdaaad929d132b0595d136091..4710aa4d7d47095f669fe0092cd4ceb5f1fee3e0 100755 --- a/squid-block.py +++ b/squid-block.py @@ -2,7 +2,6 @@ import json import os -import sys from lib.functions import get_blocks diff --git a/squid-tx.py b/squid-tx.py new file mode 100755 index 0000000000000000000000000000000000000000..70ba4b87b10c7097115f3f7b9c2f3d268651bff9 --- /dev/null +++ b/squid-tx.py @@ -0,0 +1,26 @@ +#!/usr/bin/env python3 + +import json +import os + +from lib.functions import get_tx + +DEFAULT_LEVELDB_PATH = "./leveldb" +LEVELDB_PATH = os.getenv("LEVELDB_PATH", DEFAULT_LEVELDB_PATH) + + +def main(): + # get blocks + tx_hist = get_tx(LEVELDB_PATH) + + # Dump JSON to file + print("Exporting...") + tx_hist_json = json.dumps(tx_hist, indent=2).encode() + gtest_json = open("output/tx_hist.json", "wb") + gtest_json.write(tx_hist_json) + + +if __name__ == "__main__": + print("Prepare tx for squid") + main() + print("Done\n")