From a7a802fa994dddb7a09f323789e2bc2100e36a91 Mon Sep 17 00:00:00 2001 From: Neeraj Kashyap Date: Tue, 13 Dec 2022 13:00:38 -0800 Subject: [PATCH] Added batch minting ability to scripts/mint_batch.py This also adds the ability to read recipients from file. --- scripts/mint_badge.py | 61 +++++++++++++++++++++++++++++-------------- 1 file changed, 41 insertions(+), 20 deletions(-) diff --git a/scripts/mint_badge.py b/scripts/mint_badge.py index b25ba97..8d97dec 100644 --- a/scripts/mint_badge.py +++ b/scripts/mint_badge.py @@ -26,7 +26,12 @@ parser.add_argument( help="ID of Terminus pool representing the badge", ) parser.add_argument( - "--recipients", nargs="+", help="Addresses that badge should be minted to" + "--recipients", nargs="*", help="Addresses that badge should be minted to" +) +parser.add_argument( + "--recipients-file", + type=argparse.FileType("r"), + help="(Optional) File containing addresses to mint badges to, one address per line. The addresses in this file are added to the addresses passed with the --recipients argument.", ) parser.add_argument( "-y", @@ -34,6 +39,12 @@ parser.add_argument( action="store_true", help="Set this flag to signal y on all confirmation prompts", ) +parser.add_argument( + "--batch-size", + type=int, + default=200, + help="Number of recipients to mint badges to per transaction.", +) args = parser.parse_args() @@ -42,36 +53,46 @@ if args.address is None: "Please specify the address of a Terminus contract using the --address argument." ) -if len(args.recipients) > 200: - raise ValueError("This script can process at most 200 recipients at a time.") +if args.batch_size > 200: + raise ValueError("This script can process at most 200 recipients per batch.") network.connect(args.network) recipients = list(set(args.recipients)) +batches = [] +for i in range(0, len(recipients), args.batch_size): + batches.append(recipients[i : i + args.batch_size]) + terminus = TerminusFacet.TerminusFacet(args.address) pool_uri = terminus.uri(args.pool_id) -balances = zip( - recipients, - terminus.balance_of_batch(recipients, [args.pool_id for _ in recipients]), -) - -valid_recipients = [recipient for recipient, balance in balances if balance == 0] print( f"Badge information -- Terminus address: {args.address}, pool ID: {args.pool_id}, pool URI: {pool_uri}" ) -print("\n- ".join(["Intended recipients:"] + valid_recipients)) -if not args.yes: - permission_check = input("Proceed? (y/N)") - if permission_check.strip().lower() != "y": - raise Exception("You did not wish to proceed") +for i, batch in enumerate(batches): + balances = zip( + batch, + terminus.balance_of_batch(recipients, [args.pool_id for _ in recipients]), + ) -amounts = [1 for _ in valid_recipients] -transaction_config = TerminusFacet.get_transaction_config(args) -transaction_info = terminus.pool_mint_batch( - args.pool_id, valid_recipients, amounts, transaction_config -) + valid_recipients = [recipient for recipient, balance in balances if balance == 0] + if not valid_recipients: + print("No valid recipients in this batch") + continue -print(transaction_info) + print("\n- ".join([f"Batch {i} -- intended recipients:"] + valid_recipients)) + + if not args.yes: + permission_check = input("Proceed? (y/N)") + if permission_check.strip().lower() != "y": + raise Exception("You did not wish to proceed") + + amounts = [1 for _ in valid_recipients] + transaction_config = TerminusFacet.get_transaction_config(args) + transaction_info = terminus.pool_mint_batch( + args.pool_id, valid_recipients, amounts, transaction_config + ) + + print(transaction_info)