Module moody.m.b_send.basec

Expand source code
# !/usr/bin/env python
# -*- coding: utf-8 -*-
# pylint: disable=C0116,W0613
# This program is dedicated to the public domain under the CC0 license.
import math

from web3 import Web3

from ... import conf, Bolors


def yes_or_no(question):
    """Simple Yes/No Function."""
    prompt = f'{question} ? (y/n): '
    answer = input(prompt).strip().lower()
    if answer not in ['y', 'n']:
        print("========================================")
        print(f'{answer} is invalid, please try again...')
        return yes_or_no(question)
    if answer == 'y':
        return True
    return False


def PrintNetworkName(network_conf: conf):
    print(f"You are now using network {Bolors.WARNING}{str(network_conf.network_name).upper()}{Bolors.RESET}")


def WriteFile(content, filename: str):
    fo = open(filename, "w")
    fo.write(content)
    fo.close()


class BaseBulk:
    wei = 1000000000000000000
    token_symbol = "xDai"
    fee_set = 9

    def __init__(self):
        self.batch_limit = 250
        self.list_address = list()
        self.list_amount = list()
        self.err_address = list()
        self.err_amount = list()
        self.decimal = 6
        self.total = 0
        self.err_total = 0
        self.transaction_count = 0
        self.processed_count = 0
        self._gas_fee = 0

        self._file_logger = None
        self._tg_logger = None
        self._status_busy = False
        self._program_override = False
        self._logfile = None
        self._batch_contract = False
        self._batch = []
        self._batches_count = 0

    def _enableContractBatch(self) -> None:
        """
        internal use only
        """
        self._batch_contract = True

    def _newBatchSlots(self) -> None:
        """
        internal use only
        """
        self._batch = []

    def weiUpdate(self, decimal: int) -> "BaseBulk":
        """
        This is a chain method
        only update this for the change wei size of the native token.
        :param decimal: the size of wei decimal in native token
        :return: This is a chain method
        """
        self.wei = 10 ** decimal
        return self

    def batchLimitUpdate(self, total_count: int) -> "BaseBulk":
        """
        This is a chain method
        :param total_count: total count of the batch limit for contract transfer only
        :return: This is a chain method
        """
        self.batch_limit = total_count

        if total_count > 255:
            self.batch_limit = 255
            print("⚠️ You cannot set the count total to be more than 255")
        if total_count < 10:
            self.batch_limit = 10
            print("⚠️ You cannot set the count total to be less than 10")

        return self

    def symbolUpdate(self, coin_symbol: str) -> "BaseBulk":
        """
        This is a chain method
        :param coin_symbol: the symbol of the token
        :return: This is a chain method
        """
        self.token_symbol = coin_symbol
        return self

    def withDecimal(self, dec: int) -> "BaseBulk":
        """
        This is a chain method
        the size of the token decimal
        :param dec: number of decimal
        :return: This is a chain method
        """
        self.decimal = dec
        return self

    def setPerTransactionFee(self, fee: float) -> "BaseBulk":
        """
        This is a chain method
        projection of the estimation fee
        :param fee: cost for each transfer
        :return: This is a chain method
        """
        self.fee_set = fee
        return self

    @property
    def getGasFeeCode(self) -> int:
        return int(self._gas_fee * self.wei)

    @property
    def CountAllValidTrans(self) -> int:
        return self.transaction_count

    @property
    def nowSec(self) -> int:
        from datetime import datetime
        import time
        return int(time.mktime(datetime.today().timetuple()))

    @property
    def isBusy(self) -> bool:
        return self._status_busy

    def prep(self) -> None:
        pass

    def getSENDAddresses(self) -> list:
        pass

    def getSENDAmountBalances(self) -> list:
        pass

    def getPlatformVal(self) -> int:
        """
        the cover the number into the digit
        :return:
        """
        return int(self.total / self.wei)

    def getSENDTotal(self) -> int:
        """
        the estimated validated grant sum for transfer
        :return: the amount of token
        """
        return self.total

    def getPlatformErrVal(self) -> int:
        """
        Get the total error amount
        :return: in sum
        """
        return int(self.err_total / self.wei)

    def entryAdd(self, address: str, amount: int) -> None:
        """
        Only adding the validated transaction receiver address and
        the amount of token in code
        """

        self.list_address.append(address)
        self.list_amount.append(amount)
        self.total += int(amount)
        self.transaction_count = self.transaction_count + 1

    def entryErrAdd(self, address: str, amount: int) -> None:
        self.err_address.append(address)
        self.err_amount.append(amount)
        self.err_total += int(amount)

    def calculation(self) -> float:
        return int(self.total / self.wei)

    def _error_too_many(self) -> bool:
        return len(self.err_address) > 50

    def ListErrors(self):
        j = 0
        for h in self.err_address:
            print(f"error {Bolors.FAIL}{h}{Bolors.RESET} -> {Bolors.FAIL}{self.err_amount[j]}{Bolors.RESET}")
            j = j + 1

    def ListErrorsLogger(self):
        j = 0
        for h in self.err_address:
            self._file_logger(f"❌ {h} -> {self.err_amount[j]}")
            j = j + 1

    def ListErrorsLoggerChecker(self):
        if self._error_too_many():
            self._tg_logger("Too much errors. cannot show them all")
            return

        j = 0
        for h in self.err_address:
            self._tg_logger(f"❌ {h} -> {self.err_amount[j]}")
            j = j + 1

    def _line_invalid_address(self, error_address: str) -> None:
        print(f">>>> {Bolors.FAIL}{error_address}{Bolors.RESET}")

    def _line_color_invalid_address(self, error_address: str, digit: int, h: any = None) -> None:
        if h is not None:
            print(f">>>> {Bolors.FAIL}{error_address} > {digit}{Bolors.RESET}, {h}")
        else:
            print(f">>>> {Bolors.FAIL}{error_address} > {digit}{Bolors.RESET}")

    def _line_read_code(self, address: str, amount: float, digit: int) -> None:
        print(f"{address}, read {amount} decimalcode ~> {digit}")

    def _line_color_code(self, address: str, amount: float, digit: int):
        print(f"{address}, read {Bolors.WARNING}{amount}{Bolors.RESET} decimal code> {digit}")

    def _is_valid_address(self, h: str) -> bool:
        if not Web3.isAddress(h):
            return False
        if not Web3.isChecksumAddress(h):
            return False
        return True

    def _batch_preprocess(self):
        if not self._batch_contract:
            return

        batches = math.ceil(self.transaction_count / self.batch_limit)
        batchslots = list()

        w = 0
        for i in range(batches):
            k = 0
            addresses = []
            amountcode = []
            while k < self.batch_limit and w < self.transaction_count:
                c_address = self.list_address[w]
                addresses.append(c_address)
                c_amount_code = self.list_amount[w]
                amountcode.append(c_amount_code)
                k += 1
                w += 1

            batchslots.append([addresses, amountcode])

        print(f"===== batch process - {Bolors.OK}{batches}{Bolors.RESET}")
        self._batch = batchslots
        self._batches_count = batches

    def PreStatement(self) -> None:
        transaction_reserve = self.transaction_count * self.fee_set
        self._gas_fee = transaction_reserve

        if self._file_logger is not None:
            self._file_logger("===============================================")
            self._file_logger(f"Grand total:{self.getPlatformVal()}, decimal code> {self.total}")
            self._file_logger(f"Error total:{self.getPlatformErrVal()}, decimal code> {self.err_total}")
            self._file_logger(f"Trn count:{self.transaction_count}, Est. fee> {transaction_reserve} {self.token_symbol}")

            if self._batch_contract:
                self._file_logger(f"Batch count: {self._batches_count}")

            self._file_logger("===============================================")
            self.ListErrorsLogger()
            self._file_logger("===============================================")

        if self._tg_logger is not None:
            self._tg_logger("===============================================")
            self._tg_logger(f"Grand total:{self.getPlatformVal()}, decimal code> {self.total}")
            self._tg_logger(f"Error total:{self.getPlatformErrVal()}, decimal code> {self.err_total}")
            self._tg_logger(f"Trn count:{self.transaction_count}, Est. fee> {transaction_reserve} {self.token_symbol}")

            if self._batch_contract:
                self._tg_logger(f"Batch count: {self._batches_count}")

            self._tg_logger("===============================================")
            self.ListErrorsLoggerChecker()
            self._tg_logger("===============================================")

        if not self._program_override:
            print("===============================================")
            print(f"Grand total:{Bolors.OK}{self.getPlatformVal()}{Bolors.RESET}, decimal code> {self.total}")
            print(f"Error total:{Bolors.FAIL}{self.getPlatformErrVal()}{Bolors.RESET}, decimal code> {self.err_total}")
            print(f"Trn count:{Bolors.OK}{self.transaction_count}{Bolors.RESET}, Est. fee> {Bolors.WARNING}{transaction_reserve}{Bolors.RESET} {self.token_symbol}")

            if self._batch_contract:
                print(f"Batch count: {Bolors.OK}{self._batches_count}{Bolors.RESET}")

            print("===============================================")
            self.ListErrors()
            print("===============================================")
            r = yes_or_no("Do you confirm the above data?")
            if not r:
                print("let make some adjustment and be sure the data is correct.")
                exit(0)

        self._status_busy = False

    def setLogger(self, logger_to_file) -> None:
        self._file_logger = logger_to_file

    def setLogFile(self, outputfile: str) -> None:
        self._logfile = outputfile
        WriteFile("", outputfile)

    @property
    def getLogFileLocation(self) -> str:
        return self._logfile

    def appendLogLine(self, line: str) -> None:
        file_object = open(self._logfile, 'a')
        file_object.write("{}\n".format(line))
        file_object.close()

    def setCheckLogger(self, check_save) -> None:
        self._tg_logger = check_save

    def setProgramUseOnly(self):
        self._program_override = True

Functions

def PrintNetworkName(network_conf: moody.conf' from '/Users/hesdx/Documents/piplines/moodyeth/moody/conf.py'>)
Expand source code
def PrintNetworkName(network_conf: conf):
    print(f"You are now using network {Bolors.WARNING}{str(network_conf.network_name).upper()}{Bolors.RESET}")
def WriteFile(content, filename: str)
Expand source code
def WriteFile(content, filename: str):
    fo = open(filename, "w")
    fo.write(content)
    fo.close()
def yes_or_no(question)

Simple Yes/No Function.

Expand source code
def yes_or_no(question):
    """Simple Yes/No Function."""
    prompt = f'{question} ? (y/n): '
    answer = input(prompt).strip().lower()
    if answer not in ['y', 'n']:
        print("========================================")
        print(f'{answer} is invalid, please try again...')
        return yes_or_no(question)
    if answer == 'y':
        return True
    return False

Classes

class BaseBulk
Expand source code
class BaseBulk:
    wei = 1000000000000000000
    token_symbol = "xDai"
    fee_set = 9

    def __init__(self):
        self.batch_limit = 250
        self.list_address = list()
        self.list_amount = list()
        self.err_address = list()
        self.err_amount = list()
        self.decimal = 6
        self.total = 0
        self.err_total = 0
        self.transaction_count = 0
        self.processed_count = 0
        self._gas_fee = 0

        self._file_logger = None
        self._tg_logger = None
        self._status_busy = False
        self._program_override = False
        self._logfile = None
        self._batch_contract = False
        self._batch = []
        self._batches_count = 0

    def _enableContractBatch(self) -> None:
        """
        internal use only
        """
        self._batch_contract = True

    def _newBatchSlots(self) -> None:
        """
        internal use only
        """
        self._batch = []

    def weiUpdate(self, decimal: int) -> "BaseBulk":
        """
        This is a chain method
        only update this for the change wei size of the native token.
        :param decimal: the size of wei decimal in native token
        :return: This is a chain method
        """
        self.wei = 10 ** decimal
        return self

    def batchLimitUpdate(self, total_count: int) -> "BaseBulk":
        """
        This is a chain method
        :param total_count: total count of the batch limit for contract transfer only
        :return: This is a chain method
        """
        self.batch_limit = total_count

        if total_count > 255:
            self.batch_limit = 255
            print("⚠️ You cannot set the count total to be more than 255")
        if total_count < 10:
            self.batch_limit = 10
            print("⚠️ You cannot set the count total to be less than 10")

        return self

    def symbolUpdate(self, coin_symbol: str) -> "BaseBulk":
        """
        This is a chain method
        :param coin_symbol: the symbol of the token
        :return: This is a chain method
        """
        self.token_symbol = coin_symbol
        return self

    def withDecimal(self, dec: int) -> "BaseBulk":
        """
        This is a chain method
        the size of the token decimal
        :param dec: number of decimal
        :return: This is a chain method
        """
        self.decimal = dec
        return self

    def setPerTransactionFee(self, fee: float) -> "BaseBulk":
        """
        This is a chain method
        projection of the estimation fee
        :param fee: cost for each transfer
        :return: This is a chain method
        """
        self.fee_set = fee
        return self

    @property
    def getGasFeeCode(self) -> int:
        return int(self._gas_fee * self.wei)

    @property
    def CountAllValidTrans(self) -> int:
        return self.transaction_count

    @property
    def nowSec(self) -> int:
        from datetime import datetime
        import time
        return int(time.mktime(datetime.today().timetuple()))

    @property
    def isBusy(self) -> bool:
        return self._status_busy

    def prep(self) -> None:
        pass

    def getSENDAddresses(self) -> list:
        pass

    def getSENDAmountBalances(self) -> list:
        pass

    def getPlatformVal(self) -> int:
        """
        the cover the number into the digit
        :return:
        """
        return int(self.total / self.wei)

    def getSENDTotal(self) -> int:
        """
        the estimated validated grant sum for transfer
        :return: the amount of token
        """
        return self.total

    def getPlatformErrVal(self) -> int:
        """
        Get the total error amount
        :return: in sum
        """
        return int(self.err_total / self.wei)

    def entryAdd(self, address: str, amount: int) -> None:
        """
        Only adding the validated transaction receiver address and
        the amount of token in code
        """

        self.list_address.append(address)
        self.list_amount.append(amount)
        self.total += int(amount)
        self.transaction_count = self.transaction_count + 1

    def entryErrAdd(self, address: str, amount: int) -> None:
        self.err_address.append(address)
        self.err_amount.append(amount)
        self.err_total += int(amount)

    def calculation(self) -> float:
        return int(self.total / self.wei)

    def _error_too_many(self) -> bool:
        return len(self.err_address) > 50

    def ListErrors(self):
        j = 0
        for h in self.err_address:
            print(f"error {Bolors.FAIL}{h}{Bolors.RESET} -> {Bolors.FAIL}{self.err_amount[j]}{Bolors.RESET}")
            j = j + 1

    def ListErrorsLogger(self):
        j = 0
        for h in self.err_address:
            self._file_logger(f"❌ {h} -> {self.err_amount[j]}")
            j = j + 1

    def ListErrorsLoggerChecker(self):
        if self._error_too_many():
            self._tg_logger("Too much errors. cannot show them all")
            return

        j = 0
        for h in self.err_address:
            self._tg_logger(f"❌ {h} -> {self.err_amount[j]}")
            j = j + 1

    def _line_invalid_address(self, error_address: str) -> None:
        print(f">>>> {Bolors.FAIL}{error_address}{Bolors.RESET}")

    def _line_color_invalid_address(self, error_address: str, digit: int, h: any = None) -> None:
        if h is not None:
            print(f">>>> {Bolors.FAIL}{error_address} > {digit}{Bolors.RESET}, {h}")
        else:
            print(f">>>> {Bolors.FAIL}{error_address} > {digit}{Bolors.RESET}")

    def _line_read_code(self, address: str, amount: float, digit: int) -> None:
        print(f"{address}, read {amount} decimalcode ~> {digit}")

    def _line_color_code(self, address: str, amount: float, digit: int):
        print(f"{address}, read {Bolors.WARNING}{amount}{Bolors.RESET} decimal code> {digit}")

    def _is_valid_address(self, h: str) -> bool:
        if not Web3.isAddress(h):
            return False
        if not Web3.isChecksumAddress(h):
            return False
        return True

    def _batch_preprocess(self):
        if not self._batch_contract:
            return

        batches = math.ceil(self.transaction_count / self.batch_limit)
        batchslots = list()

        w = 0
        for i in range(batches):
            k = 0
            addresses = []
            amountcode = []
            while k < self.batch_limit and w < self.transaction_count:
                c_address = self.list_address[w]
                addresses.append(c_address)
                c_amount_code = self.list_amount[w]
                amountcode.append(c_amount_code)
                k += 1
                w += 1

            batchslots.append([addresses, amountcode])

        print(f"===== batch process - {Bolors.OK}{batches}{Bolors.RESET}")
        self._batch = batchslots
        self._batches_count = batches

    def PreStatement(self) -> None:
        transaction_reserve = self.transaction_count * self.fee_set
        self._gas_fee = transaction_reserve

        if self._file_logger is not None:
            self._file_logger("===============================================")
            self._file_logger(f"Grand total:{self.getPlatformVal()}, decimal code> {self.total}")
            self._file_logger(f"Error total:{self.getPlatformErrVal()}, decimal code> {self.err_total}")
            self._file_logger(f"Trn count:{self.transaction_count}, Est. fee> {transaction_reserve} {self.token_symbol}")

            if self._batch_contract:
                self._file_logger(f"Batch count: {self._batches_count}")

            self._file_logger("===============================================")
            self.ListErrorsLogger()
            self._file_logger("===============================================")

        if self._tg_logger is not None:
            self._tg_logger("===============================================")
            self._tg_logger(f"Grand total:{self.getPlatformVal()}, decimal code> {self.total}")
            self._tg_logger(f"Error total:{self.getPlatformErrVal()}, decimal code> {self.err_total}")
            self._tg_logger(f"Trn count:{self.transaction_count}, Est. fee> {transaction_reserve} {self.token_symbol}")

            if self._batch_contract:
                self._tg_logger(f"Batch count: {self._batches_count}")

            self._tg_logger("===============================================")
            self.ListErrorsLoggerChecker()
            self._tg_logger("===============================================")

        if not self._program_override:
            print("===============================================")
            print(f"Grand total:{Bolors.OK}{self.getPlatformVal()}{Bolors.RESET}, decimal code> {self.total}")
            print(f"Error total:{Bolors.FAIL}{self.getPlatformErrVal()}{Bolors.RESET}, decimal code> {self.err_total}")
            print(f"Trn count:{Bolors.OK}{self.transaction_count}{Bolors.RESET}, Est. fee> {Bolors.WARNING}{transaction_reserve}{Bolors.RESET} {self.token_symbol}")

            if self._batch_contract:
                print(f"Batch count: {Bolors.OK}{self._batches_count}{Bolors.RESET}")

            print("===============================================")
            self.ListErrors()
            print("===============================================")
            r = yes_or_no("Do you confirm the above data?")
            if not r:
                print("let make some adjustment and be sure the data is correct.")
                exit(0)

        self._status_busy = False

    def setLogger(self, logger_to_file) -> None:
        self._file_logger = logger_to_file

    def setLogFile(self, outputfile: str) -> None:
        self._logfile = outputfile
        WriteFile("", outputfile)

    @property
    def getLogFileLocation(self) -> str:
        return self._logfile

    def appendLogLine(self, line: str) -> None:
        file_object = open(self._logfile, 'a')
        file_object.write("{}\n".format(line))
        file_object.close()

    def setCheckLogger(self, check_save) -> None:
        self._tg_logger = check_save

    def setProgramUseOnly(self):
        self._program_override = True

Subclasses

Class variables

var fee_set
var token_symbol
var wei

Instance variables

var CountAllValidTrans : int
Expand source code
@property
def CountAllValidTrans(self) -> int:
    return self.transaction_count
var getGasFeeCode : int
Expand source code
@property
def getGasFeeCode(self) -> int:
    return int(self._gas_fee * self.wei)
var getLogFileLocation : str
Expand source code
@property
def getLogFileLocation(self) -> str:
    return self._logfile
var isBusy : bool
Expand source code
@property
def isBusy(self) -> bool:
    return self._status_busy
var nowSec : int
Expand source code
@property
def nowSec(self) -> int:
    from datetime import datetime
    import time
    return int(time.mktime(datetime.today().timetuple()))

Methods

def ListErrors(self)
Expand source code
def ListErrors(self):
    j = 0
    for h in self.err_address:
        print(f"error {Bolors.FAIL}{h}{Bolors.RESET} -> {Bolors.FAIL}{self.err_amount[j]}{Bolors.RESET}")
        j = j + 1
def ListErrorsLogger(self)
Expand source code
def ListErrorsLogger(self):
    j = 0
    for h in self.err_address:
        self._file_logger(f"❌ {h} -> {self.err_amount[j]}")
        j = j + 1
def ListErrorsLoggerChecker(self)
Expand source code
def ListErrorsLoggerChecker(self):
    if self._error_too_many():
        self._tg_logger("Too much errors. cannot show them all")
        return

    j = 0
    for h in self.err_address:
        self._tg_logger(f"❌ {h} -> {self.err_amount[j]}")
        j = j + 1
def PreStatement(self) ‑> NoneType
Expand source code
def PreStatement(self) -> None:
    transaction_reserve = self.transaction_count * self.fee_set
    self._gas_fee = transaction_reserve

    if self._file_logger is not None:
        self._file_logger("===============================================")
        self._file_logger(f"Grand total:{self.getPlatformVal()}, decimal code> {self.total}")
        self._file_logger(f"Error total:{self.getPlatformErrVal()}, decimal code> {self.err_total}")
        self._file_logger(f"Trn count:{self.transaction_count}, Est. fee> {transaction_reserve} {self.token_symbol}")

        if self._batch_contract:
            self._file_logger(f"Batch count: {self._batches_count}")

        self._file_logger("===============================================")
        self.ListErrorsLogger()
        self._file_logger("===============================================")

    if self._tg_logger is not None:
        self._tg_logger("===============================================")
        self._tg_logger(f"Grand total:{self.getPlatformVal()}, decimal code> {self.total}")
        self._tg_logger(f"Error total:{self.getPlatformErrVal()}, decimal code> {self.err_total}")
        self._tg_logger(f"Trn count:{self.transaction_count}, Est. fee> {transaction_reserve} {self.token_symbol}")

        if self._batch_contract:
            self._tg_logger(f"Batch count: {self._batches_count}")

        self._tg_logger("===============================================")
        self.ListErrorsLoggerChecker()
        self._tg_logger("===============================================")

    if not self._program_override:
        print("===============================================")
        print(f"Grand total:{Bolors.OK}{self.getPlatformVal()}{Bolors.RESET}, decimal code> {self.total}")
        print(f"Error total:{Bolors.FAIL}{self.getPlatformErrVal()}{Bolors.RESET}, decimal code> {self.err_total}")
        print(f"Trn count:{Bolors.OK}{self.transaction_count}{Bolors.RESET}, Est. fee> {Bolors.WARNING}{transaction_reserve}{Bolors.RESET} {self.token_symbol}")

        if self._batch_contract:
            print(f"Batch count: {Bolors.OK}{self._batches_count}{Bolors.RESET}")

        print("===============================================")
        self.ListErrors()
        print("===============================================")
        r = yes_or_no("Do you confirm the above data?")
        if not r:
            print("let make some adjustment and be sure the data is correct.")
            exit(0)

    self._status_busy = False
def appendLogLine(self, line: str) ‑> NoneType
Expand source code
def appendLogLine(self, line: str) -> None:
    file_object = open(self._logfile, 'a')
    file_object.write("{}\n".format(line))
    file_object.close()
def batchLimitUpdate(self, total_count: int) ‑> BaseBulk

This is a chain method :param total_count: total count of the batch limit for contract transfer only :return: This is a chain method

Expand source code
def batchLimitUpdate(self, total_count: int) -> "BaseBulk":
    """
    This is a chain method
    :param total_count: total count of the batch limit for contract transfer only
    :return: This is a chain method
    """
    self.batch_limit = total_count

    if total_count > 255:
        self.batch_limit = 255
        print("⚠️ You cannot set the count total to be more than 255")
    if total_count < 10:
        self.batch_limit = 10
        print("⚠️ You cannot set the count total to be less than 10")

    return self
def calculation(self) ‑> float
Expand source code
def calculation(self) -> float:
    return int(self.total / self.wei)
def entryAdd(self, address: str, amount: int) ‑> NoneType

Only adding the validated transaction receiver address and the amount of token in code

Expand source code
def entryAdd(self, address: str, amount: int) -> None:
    """
    Only adding the validated transaction receiver address and
    the amount of token in code
    """

    self.list_address.append(address)
    self.list_amount.append(amount)
    self.total += int(amount)
    self.transaction_count = self.transaction_count + 1
def entryErrAdd(self, address: str, amount: int) ‑> NoneType
Expand source code
def entryErrAdd(self, address: str, amount: int) -> None:
    self.err_address.append(address)
    self.err_amount.append(amount)
    self.err_total += int(amount)
def getPlatformErrVal(self) ‑> int

Get the total error amount :return: in sum

Expand source code
def getPlatformErrVal(self) -> int:
    """
    Get the total error amount
    :return: in sum
    """
    return int(self.err_total / self.wei)
def getPlatformVal(self) ‑> int

the cover the number into the digit :return:

Expand source code
def getPlatformVal(self) -> int:
    """
    the cover the number into the digit
    :return:
    """
    return int(self.total / self.wei)
def getSENDAddresses(self) ‑> list
Expand source code
def getSENDAddresses(self) -> list:
    pass
def getSENDAmountBalances(self) ‑> list
Expand source code
def getSENDAmountBalances(self) -> list:
    pass
def getSENDTotal(self) ‑> int

the estimated validated grant sum for transfer :return: the amount of token

Expand source code
def getSENDTotal(self) -> int:
    """
    the estimated validated grant sum for transfer
    :return: the amount of token
    """
    return self.total
def prep(self) ‑> NoneType
Expand source code
def prep(self) -> None:
    pass
def setCheckLogger(self, check_save) ‑> NoneType
Expand source code
def setCheckLogger(self, check_save) -> None:
    self._tg_logger = check_save
def setLogFile(self, outputfile: str) ‑> NoneType
Expand source code
def setLogFile(self, outputfile: str) -> None:
    self._logfile = outputfile
    WriteFile("", outputfile)
def setLogger(self, logger_to_file) ‑> NoneType
Expand source code
def setLogger(self, logger_to_file) -> None:
    self._file_logger = logger_to_file
def setPerTransactionFee(self, fee: float) ‑> BaseBulk

This is a chain method projection of the estimation fee :param fee: cost for each transfer :return: This is a chain method

Expand source code
def setPerTransactionFee(self, fee: float) -> "BaseBulk":
    """
    This is a chain method
    projection of the estimation fee
    :param fee: cost for each transfer
    :return: This is a chain method
    """
    self.fee_set = fee
    return self
def setProgramUseOnly(self)
Expand source code
def setProgramUseOnly(self):
    self._program_override = True
def symbolUpdate(self, coin_symbol: str) ‑> BaseBulk

This is a chain method :param coin_symbol: the symbol of the token :return: This is a chain method

Expand source code
def symbolUpdate(self, coin_symbol: str) -> "BaseBulk":
    """
    This is a chain method
    :param coin_symbol: the symbol of the token
    :return: This is a chain method
    """
    self.token_symbol = coin_symbol
    return self
def weiUpdate(self, decimal: int) ‑> BaseBulk

This is a chain method only update this for the change wei size of the native token. :param decimal: the size of wei decimal in native token :return: This is a chain method

Expand source code
def weiUpdate(self, decimal: int) -> "BaseBulk":
    """
    This is a chain method
    only update this for the change wei size of the native token.
    :param decimal: the size of wei decimal in native token
    :return: This is a chain method
    """
    self.wei = 10 ** decimal
    return self
def withDecimal(self, dec: int) ‑> BaseBulk

This is a chain method the size of the token decimal :param dec: number of decimal :return: This is a chain method

Expand source code
def withDecimal(self, dec: int) -> "BaseBulk":
    """
    This is a chain method
    the size of the token decimal
    :param dec: number of decimal
    :return: This is a chain method
    """
    self.decimal = dec
    return self