Skip to content

Instantly share code, notes, and snippets.

@nnamon
Created April 19, 2019 13:57
Show Gist options
  • Save nnamon/6c0536fc77b0a09a2f0ed9a1ae87040d to your computer and use it in GitHub Desktop.
Save nnamon/6c0536fc77b0a09a2f0ed9a1ae87040d to your computer and use it in GitHub Desktop.
Transfer by Percentage
#!/usr/bin/env python
from pyzil.zilliqa import chain
from pyzil.account import Account
from pyzil.zilliqa.units import Qa
import multiprocessing
from itertools import repeat
import argparse
PROCESS_SIZE = 80
chain.set_active_chain(chain.MainNet)
def main():
parser = argparse.ArgumentParser(description='Check the balance of multiple Zilliqa addresses.')
parser.add_argument('--privkeys', required=True,
help='Specify the file containing a list of private keys to send from.')
parser.add_argument('--receipient', required=True, help='The receiving address to send to.')
parser.add_argument('--percentage', required=True, help='The percentage to send.', type=float)
args = parser.parse_args()
mass_transfer(args.privkeys, args.receipient, args.percentage)
def mass_transfer(filename, receipient, percentage):
entries = open(filename).read().strip().split("\n")
pool = multiprocessing.Pool(PROCESS_SIZE)
results = pool.map(send, zip(entries, repeat(receipient), repeat(percentage)))
for privkey, result in zip(entries, results):
print(privkey, result)
def send(args):
privkey, receipient, percentage = args
account = Account(private_key=privkey)
min_gas = Qa(chain.active_chain.api.GetMinimumGasPrice())
balance = Qa(account.get_balance_qa() - min_gas)
if balance <= 0:
return "Balance is zero."
amount = Qa(percentage * balance)
try:
result = account.transfer(receipient, amount)
return result
except ValueError:
return "Insufficient balance."
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment