Update parsing.py
Made the functions more modular
This commit is contained in:
parent
4febedb1d2
commit
a93e6633ef
533
parsing.py
533
parsing.py
@ -1021,241 +1021,169 @@ stream_handler.setFormatter(formatter)
|
|||||||
logger.addHandler(file_handler)
|
logger.addHandler(file_handler)
|
||||||
logger.addHandler(stream_handler)
|
logger.addHandler(stream_handler)
|
||||||
|
|
||||||
def parse_flodata(text, blockinfo, net):
|
# Processing functions for each categorization
|
||||||
if net == 'testnet':
|
def process_tokensystem_C(first_classification, processed_text, clean_text, stateF_mapping, is_testnet):
|
||||||
is_testnet = True
|
# Resolving conflict for 'tokensystem-C'
|
||||||
else:
|
tokenname = first_classification['wordlist'][0][:-1]
|
||||||
is_testnet = False
|
if not check_regex("^[A-Za-z][A-Za-z0-9_-]*[A-Za-z0-9]$", tokenname):
|
||||||
|
|
||||||
if text == '':
|
|
||||||
return outputreturn('noise')
|
return outputreturn('noise')
|
||||||
|
|
||||||
clean_text, processed_text = text_preprocessing(text)
|
isNFT = check_word_existence_instring('nft', processed_text)
|
||||||
# System state
|
|
||||||
print("Processing stateF")
|
|
||||||
stateF_mapping = isStateF(processed_text)
|
|
||||||
first_classification = firstclassification_rawstring(processed_text)
|
|
||||||
parsed_data = None
|
|
||||||
|
|
||||||
|
isInfinite = check_word_existence_instring('infinite-token', processed_text)
|
||||||
|
tokenamount = apply_rule1(extractAmount_rule_new, processed_text)
|
||||||
|
|
||||||
if first_classification['categorization'] == 'tokensystem-C':
|
## Cannot be NFT and normal token and infinite token. Find what are the conflicts
|
||||||
# Resolving conflict for 'tokensystem-C'
|
# if its an NFT then tokenamount has to be integer and infinite keyword should not be present
|
||||||
tokenname = first_classification['wordlist'][0][:-1]
|
# if its a normal token then isNFT and isInfinite should be None/False and token amount has to be present
|
||||||
if not check_regex("^[A-Za-z][A-Za-z0-9_-]*[A-Za-z0-9]$", tokenname):
|
# if its an infinite token then tokenamount should be None and isNFT should be None/False
|
||||||
return outputreturn('noise')
|
# The supply of tokenAmount cannot be 0
|
||||||
|
|
||||||
isNFT = check_word_existence_instring('nft', processed_text)
|
##################################################
|
||||||
|
|
||||||
isInfinite = check_word_existence_instring('infinite-token', processed_text)
|
if (not tokenamount and not isInfinite) or (isNFT and not tokenamount.is_integer() and not isInfinite) or (isInfinite and tokenamount is not False and isNFT is not False) or (not isInfinite and tokenamount<=0):
|
||||||
tokenamount = apply_rule1(extractAmount_rule_new, processed_text)
|
return outputreturn('noise')
|
||||||
|
operation = apply_rule1(selectCategory, processed_text, send_category, create_category)
|
||||||
## Cannot be NFT and normal token and infinite token. Find what are the conflicts
|
if operation == 'category1' and tokenamount is not None:
|
||||||
# if its an NFT then tokenamount has to be integer and infinite keyword should not be present
|
if isNFT:
|
||||||
# if its a normal token then isNFT and isInfinite should be None/False and token amount has to be present
|
return outputreturn('nft_transfer',f"{processed_text}", f"{tokenname}", tokenamount, stateF_mapping)
|
||||||
# if its an infinite token then tokenamount should be None and isNFT should be None/False
|
else:
|
||||||
# The supply of tokenAmount cannot be 0
|
return outputreturn('token_transfer',f"{processed_text}", f"{tokenname}", tokenamount, stateF_mapping)
|
||||||
|
elif operation == 'category2':
|
||||||
##################################################
|
if isInfinite:
|
||||||
|
return outputreturn('infinite_token_create',f"{processed_text}", f"{tokenname}", stateF_mapping)
|
||||||
if (not tokenamount and not isInfinite) or (isNFT and not tokenamount.is_integer() and not isInfinite) or (isInfinite and tokenamount is not False and isNFT is not False) or (not isInfinite and tokenamount<=0):
|
else:
|
||||||
return outputreturn('noise')
|
if tokenamount is None:
|
||||||
operation = apply_rule1(selectCategory, processed_text, send_category, create_category)
|
return outputreturn('noise')
|
||||||
if operation == 'category1' and tokenamount is not None:
|
|
||||||
if isNFT:
|
if isNFT:
|
||||||
return outputreturn('nft_transfer',f"{processed_text}", f"{tokenname}", tokenamount, stateF_mapping)
|
nft_hash = extract_NFT_hash(clean_text)
|
||||||
|
if nft_hash is False:
|
||||||
|
return outputreturn('noise')
|
||||||
|
return outputreturn('nft_create',f"{processed_text}", f"{tokenname}", tokenamount, f"{nft_hash}", stateF_mapping)
|
||||||
else:
|
else:
|
||||||
return outputreturn('token_transfer',f"{processed_text}", f"{tokenname}", tokenamount, stateF_mapping)
|
return outputreturn('token_incorporation',f"{processed_text}", f"{first_classification['wordlist'][0][:-1]}", tokenamount, stateF_mapping)
|
||||||
elif operation == 'category2':
|
else:
|
||||||
if isInfinite:
|
return outputreturn('noise')
|
||||||
return outputreturn('infinite_token_create',f"{processed_text}", f"{tokenname}", stateF_mapping)
|
|
||||||
else:
|
|
||||||
if tokenamount is None:
|
|
||||||
return outputreturn('noise')
|
|
||||||
if isNFT:
|
|
||||||
nft_hash = extract_NFT_hash(clean_text)
|
|
||||||
if nft_hash is False:
|
|
||||||
return outputreturn('noise')
|
|
||||||
return outputreturn('nft_create',f"{processed_text}", f"{tokenname}", tokenamount, f"{nft_hash}", stateF_mapping)
|
|
||||||
else:
|
|
||||||
return outputreturn('token_incorporation',f"{processed_text}", f"{first_classification['wordlist'][0][:-1]}", tokenamount, stateF_mapping)
|
|
||||||
else:
|
|
||||||
return outputreturn('noise')
|
|
||||||
|
|
||||||
if first_classification['categorization'] == 'smart-contract-creation-C':
|
|
||||||
# Resolving conflict for 'smart-contract-creation-C'
|
|
||||||
operation = apply_rule1(selectCategory, processed_text, create_category, send_category+deposit_category)
|
|
||||||
if not operation:
|
|
||||||
return outputreturn('noise')
|
|
||||||
|
|
||||||
contract_type = extract_special_character_word(first_classification['wordlist'],'*')
|
def process_smart_contract_creation_C(first_classification, processed_text, clean_text, blockinfo, stateF_mapping, is_testnet):
|
||||||
if not check_existence_of_keyword(['one-time-event'],[contract_type]):
|
# Resolving conflict for 'smart-contract-creation-C'
|
||||||
return outputreturn('noise')
|
operation = apply_rule1(selectCategory, processed_text, create_category, send_category+deposit_category)
|
||||||
|
if not operation:
|
||||||
|
return outputreturn('noise')
|
||||||
|
|
||||||
contract_name = extract_special_character_word(first_classification['wordlist'],'@')
|
contract_type = extract_special_character_word(first_classification['wordlist'],'*')
|
||||||
if not check_regex("^[A-Za-z][A-Za-z0-9_-]*[A-Za-z0-9]$", contract_name):
|
if not check_existence_of_keyword(['one-time-event'],[contract_type]):
|
||||||
return outputreturn('noise')
|
return outputreturn('noise')
|
||||||
|
|
||||||
contract_token = extract_special_character_word(first_classification['wordlist'],'#')
|
contract_name = extract_special_character_word(first_classification['wordlist'],'@')
|
||||||
if not check_regex("^[A-Za-z][A-Za-z0-9_-]*[A-Za-z0-9]$", contract_token):
|
if not check_regex("^[A-Za-z][A-Za-z0-9_-]*[A-Za-z0-9]$", contract_name):
|
||||||
return outputreturn('noise')
|
return outputreturn('noise')
|
||||||
|
|
||||||
contract_address = extract_special_character_word(first_classification['wordlist'],'$')
|
contract_token = extract_special_character_word(first_classification['wordlist'],'#')
|
||||||
contract_address = find_original_case(contract_address, clean_text)
|
if not check_regex("^[A-Za-z][A-Za-z0-9_-]*[A-Za-z0-9]$", contract_token):
|
||||||
if not check_flo_address(contract_address, is_testnet):
|
return outputreturn('noise')
|
||||||
return outputreturn('noise')
|
|
||||||
|
|
||||||
contract_conditions = extract_contract_conditions(processed_text, contract_type, contract_token, blocktime=blockinfo['time'])
|
contract_address = extract_special_character_word(first_classification['wordlist'],'$')
|
||||||
if contract_conditions == False or not resolve_incategory_conflict(contract_conditions,[['userchoices','payeeAddress']]):
|
contract_address = find_original_case(contract_address, clean_text)
|
||||||
return outputreturn('noise')
|
if not check_flo_address(contract_address, is_testnet):
|
||||||
else:
|
return outputreturn('noise')
|
||||||
contractAmount = ''
|
|
||||||
if 'contractAmount' in contract_conditions.keys():
|
|
||||||
contractAmount = contract_conditions['contractAmount']
|
|
||||||
try:
|
|
||||||
if float(contractAmount)<=0:
|
|
||||||
return outputreturn('noise')
|
|
||||||
except:
|
|
||||||
return outputreturn('noise')
|
|
||||||
minimum_subscription_amount = ''
|
|
||||||
if 'minimumsubscriptionamount' in contract_conditions.keys():
|
|
||||||
minimum_subscription_amount = contract_conditions['minimumsubscriptionamount']
|
|
||||||
try:
|
|
||||||
if float(minimum_subscription_amount)<=0:
|
|
||||||
return outputreturn('noise')
|
|
||||||
except:
|
|
||||||
return outputreturn('noise')
|
|
||||||
maximum_subscription_amount = ''
|
|
||||||
if 'maximumsubscriptionamount' in contract_conditions.keys():
|
|
||||||
maximum_subscription_amount = contract_conditions['maximumsubscriptionamount']
|
|
||||||
try:
|
|
||||||
if float(maximum_subscription_amount)<=0:
|
|
||||||
return outputreturn('noise')
|
|
||||||
except:
|
|
||||||
return outputreturn('noise')
|
|
||||||
|
|
||||||
if 'userchoices' in contract_conditions.keys():
|
contract_conditions = extract_contract_conditions(processed_text, contract_type, contract_token, blocktime=blockinfo['time'])
|
||||||
return outputreturn('one-time-event-userchoice-smartcontract-incorporation',f"{contract_token}", f"{contract_name}", f"{contract_address}", f"{clean_text}", f"{contractAmount}", f"{minimum_subscription_amount}" , f"{maximum_subscription_amount}", f"{contract_conditions['userchoices']}", f"{contract_conditions['expiryTime']}", contract_conditions['unix_expiryTime'], stateF_mapping)
|
if contract_conditions == False or not resolve_incategory_conflict(contract_conditions,[['userchoices','payeeAddress']]):
|
||||||
elif 'payeeAddress' in contract_conditions.keys():
|
return outputreturn('noise')
|
||||||
contract_conditions['payeeAddress'] = find_word_index_fromstring(clean_text,contract_conditions['payeeAddress'])
|
else:
|
||||||
|
contractAmount = ''
|
||||||
# check if colon exists in the payeeAddress string
|
if 'contractAmount' in contract_conditions.keys():
|
||||||
if ':' in contract_conditions['payeeAddress']:
|
contractAmount = contract_conditions['contractAmount']
|
||||||
colon_split = contract_conditions['payeeAddress'].split(':')
|
try:
|
||||||
if len(colon_split)%2 != 0:
|
if float(contractAmount)<=0:
|
||||||
return outputreturn('noise')
|
|
||||||
split_total = 0
|
|
||||||
payeeAddress_split_dictionary = {}
|
|
||||||
for idx, item in enumerate(colon_split):
|
|
||||||
if idx%2 == 0:
|
|
||||||
# Check if floid
|
|
||||||
if not check_flo_address(item, is_testnet):
|
|
||||||
return outputreturn('noise')
|
|
||||||
# Add check to make sure payeeAddress is not contractAddress
|
|
||||||
if contract_address == item:
|
|
||||||
logger.debug('payeeAddress is same as contract address')
|
|
||||||
return outputreturn('noise')
|
|
||||||
|
|
||||||
if idx%2 == 1:
|
|
||||||
# check if number
|
|
||||||
try:
|
|
||||||
item = float(item)
|
|
||||||
if item <= 0:
|
|
||||||
return outputreturn('noise')
|
|
||||||
payeeAddress_split_dictionary[colon_split[idx-1]] = item
|
|
||||||
#split_total += item
|
|
||||||
split_total = perform_decimal_operation('addition', split_total, item)
|
|
||||||
except:
|
|
||||||
return outputreturn('noise')
|
|
||||||
|
|
||||||
if split_total != 100:
|
|
||||||
return outputreturn('noise')
|
|
||||||
else:
|
|
||||||
contract_conditions['payeeAddress'] = payeeAddress_split_dictionary
|
|
||||||
return outputreturn('one-time-event-time-smartcontract-incorporation',f"{contract_token}", f"{contract_name}", f"{contract_address}", f"{clean_text}", f"{contractAmount}", f"{minimum_subscription_amount}" , f"{maximum_subscription_amount}", contract_conditions['payeeAddress'], f"{contract_conditions['expiryTime']}", contract_conditions['unix_expiryTime'], stateF_mapping)
|
|
||||||
else:
|
|
||||||
if not check_flo_address(contract_conditions['payeeAddress'], is_testnet):
|
|
||||||
return outputreturn('noise')
|
|
||||||
|
|
||||||
# Add check to make sure payeeAddress is not contractAddress
|
|
||||||
if contract_address == contract_conditions['payeeAddress']:
|
|
||||||
logger.debug('payeeAddress is same as contract address')
|
|
||||||
return outputreturn('noise')
|
|
||||||
|
|
||||||
contract_conditions['payeeAddress'] = {f"{contract_conditions['payeeAddress']}":100}
|
|
||||||
return outputreturn('one-time-event-time-smartcontract-incorporation',f"{contract_token}", f"{contract_name}", f"{contract_address}", f"{clean_text}", f"{contractAmount}", f"{minimum_subscription_amount}" , f"{maximum_subscription_amount}", contract_conditions['payeeAddress'], f"{contract_conditions['expiryTime']}", contract_conditions['unix_expiryTime'], stateF_mapping)
|
|
||||||
|
|
||||||
if first_classification['categorization'] == 'smart-contract-participation-deposit-C':
|
|
||||||
# either participation of one-time-event contract or
|
|
||||||
operation = apply_rule1(select_category_reject, processed_text, send_category, deposit_category, create_category)
|
|
||||||
if not operation:
|
|
||||||
return outputreturn('noise')
|
|
||||||
else:
|
|
||||||
tokenname = first_classification['wordlist'][0][:-1]
|
|
||||||
if not check_regex("^[A-Za-z][A-Za-z0-9_-]*[A-Za-z0-9]$", tokenname):
|
|
||||||
return outputreturn('noise')
|
|
||||||
|
|
||||||
contract_name = extract_special_character_word(first_classification['wordlist'],'@')
|
|
||||||
if not check_regex("^[A-Za-z][A-Za-z0-9_-]*[A-Za-z0-9]$", contract_name):
|
|
||||||
return outputreturn('noise')
|
|
||||||
|
|
||||||
contract_address = extract_special_character_word(first_classification['wordlist'],'$')
|
|
||||||
if contract_address is False:
|
|
||||||
contract_address = ''
|
|
||||||
else:
|
|
||||||
contract_address = find_original_case(contract_address, clean_text)
|
|
||||||
if not check_flo_address(contract_address, is_testnet):
|
|
||||||
return outputreturn('noise')
|
return outputreturn('noise')
|
||||||
|
except:
|
||||||
|
return outputreturn('noise')
|
||||||
|
minimum_subscription_amount = ''
|
||||||
|
if 'minimumsubscriptionamount' in contract_conditions.keys():
|
||||||
|
minimum_subscription_amount = contract_conditions['minimumsubscriptionamount']
|
||||||
|
try:
|
||||||
|
if float(minimum_subscription_amount)<=0:
|
||||||
|
return outputreturn('noise')
|
||||||
|
except:
|
||||||
|
return outputreturn('noise')
|
||||||
|
maximum_subscription_amount = ''
|
||||||
|
if 'maximumsubscriptionamount' in contract_conditions.keys():
|
||||||
|
maximum_subscription_amount = contract_conditions['maximumsubscriptionamount']
|
||||||
|
try:
|
||||||
|
if float(maximum_subscription_amount)<=0:
|
||||||
|
return outputreturn('noise')
|
||||||
|
except:
|
||||||
|
return outputreturn('noise')
|
||||||
|
|
||||||
if operation == 'category1':
|
if 'userchoices' in contract_conditions.keys():
|
||||||
tokenamount = apply_rule1(extractAmount_rule_new1, processed_text, 'userchoice:', 'pre')
|
return outputreturn('one-time-event-userchoice-smartcontract-incorporation',f"{contract_token}", f"{contract_name}", f"{contract_address}", f"{clean_text}", f"{contractAmount}", f"{minimum_subscription_amount}" , f"{maximum_subscription_amount}", f"{contract_conditions['userchoices']}", f"{contract_conditions['expiryTime']}", contract_conditions['unix_expiryTime'], stateF_mapping)
|
||||||
if not tokenamount:
|
elif 'payeeAddress' in contract_conditions.keys():
|
||||||
|
contract_conditions['payeeAddress'] = find_word_index_fromstring(clean_text,contract_conditions['payeeAddress'])
|
||||||
|
|
||||||
|
# check if colon exists in the payeeAddress string
|
||||||
|
if ':' in contract_conditions['payeeAddress']:
|
||||||
|
colon_split = contract_conditions['payeeAddress'].split(':')
|
||||||
|
if len(colon_split)%2 != 0:
|
||||||
return outputreturn('noise')
|
return outputreturn('noise')
|
||||||
try:
|
split_total = 0
|
||||||
if float(tokenamount)<=0:
|
payeeAddress_split_dictionary = {}
|
||||||
return outputreturn('noise')
|
for idx, item in enumerate(colon_split):
|
||||||
except:
|
if idx%2 == 0:
|
||||||
|
# Check if floid
|
||||||
|
if not check_flo_address(item, is_testnet):
|
||||||
|
return outputreturn('noise')
|
||||||
|
# Add check to make sure payeeAddress is not contractAddress
|
||||||
|
if contract_address == item:
|
||||||
|
logger.debug('payeeAddress is same as contract address')
|
||||||
|
return outputreturn('noise')
|
||||||
|
|
||||||
|
if idx%2 == 1:
|
||||||
|
# check if number
|
||||||
|
try:
|
||||||
|
item = float(item)
|
||||||
|
if item <= 0:
|
||||||
|
return outputreturn('noise')
|
||||||
|
payeeAddress_split_dictionary[colon_split[idx-1]] = item
|
||||||
|
#split_total += item
|
||||||
|
split_total = perform_decimal_operation('addition', split_total, item)
|
||||||
|
except:
|
||||||
|
return outputreturn('noise')
|
||||||
|
|
||||||
|
if split_total != 100:
|
||||||
return outputreturn('noise')
|
return outputreturn('noise')
|
||||||
userchoice = extract_userchoice(processed_text)
|
else:
|
||||||
# todo - do we need more validations for user choice?
|
contract_conditions['payeeAddress'] = payeeAddress_split_dictionary
|
||||||
if not userchoice:
|
return outputreturn('one-time-event-time-smartcontract-incorporation',f"{contract_token}", f"{contract_name}", f"{contract_address}", f"{clean_text}", f"{contractAmount}", f"{minimum_subscription_amount}" , f"{maximum_subscription_amount}", contract_conditions['payeeAddress'], f"{contract_conditions['expiryTime']}", contract_conditions['unix_expiryTime'], stateF_mapping)
|
||||||
|
else:
|
||||||
|
if not check_flo_address(contract_conditions['payeeAddress'], is_testnet):
|
||||||
return outputreturn('noise')
|
return outputreturn('noise')
|
||||||
|
|
||||||
return outputreturn('one-time-event-userchoice-smartcontract-participation',f"{clean_text}", f"{tokenname}", tokenamount, f"{contract_name}", f"{contract_address}", f"{userchoice}", stateF_mapping)
|
# Add check to make sure payeeAddress is not contractAddress
|
||||||
|
if contract_address == contract_conditions['payeeAddress']:
|
||||||
elif operation == 'category2':
|
logger.debug('payeeAddress is same as contract address')
|
||||||
tokenamount = apply_rule1(extractAmount_rule_new1, processed_text, 'deposit-conditions:', 'pre')
|
|
||||||
if not tokenamount:
|
|
||||||
return outputreturn('noise')
|
return outputreturn('noise')
|
||||||
try:
|
|
||||||
if float(tokenamount)<=0:
|
contract_conditions['payeeAddress'] = {f"{contract_conditions['payeeAddress']}":100}
|
||||||
return outputreturn('noise')
|
return outputreturn('one-time-event-time-smartcontract-incorporation',f"{contract_token}", f"{contract_name}", f"{contract_address}", f"{clean_text}", f"{contractAmount}", f"{minimum_subscription_amount}" , f"{maximum_subscription_amount}", contract_conditions['payeeAddress'], f"{contract_conditions['expiryTime']}", contract_conditions['unix_expiryTime'], stateF_mapping)
|
||||||
except:
|
|
||||||
return outputreturn('noise')
|
|
||||||
deposit_conditions = extract_deposit_conditions(processed_text, blocktime=blockinfo['time'])
|
|
||||||
if not deposit_conditions:
|
|
||||||
return outputreturn("noise")
|
|
||||||
return outputreturn('continuos-event-token-swap-deposit', f"{tokenname}", tokenamount, f"{contract_name}", f"{clean_text}", f"{deposit_conditions['expiryTime']}", stateF_mapping)
|
|
||||||
|
|
||||||
if first_classification['categorization'] == 'smart-contract-participation-ote-ce-C':
|
|
||||||
# There is no way to properly differentiate between one-time-event-time-trigger participation and token swap participation
|
def process_smart_contract_participation_deposit_C(first_classification, processed_text, clean_text, blockinfo, stateF_mapping, is_testnet):
|
||||||
# so we merge them in output return
|
# either participation of one-time-event contract or
|
||||||
|
operation = apply_rule1(select_category_reject, processed_text, send_category, deposit_category, create_category)
|
||||||
|
if not operation:
|
||||||
|
return outputreturn('noise')
|
||||||
|
else:
|
||||||
tokenname = first_classification['wordlist'][0][:-1]
|
tokenname = first_classification['wordlist'][0][:-1]
|
||||||
if not check_regex("^[A-Za-z][A-Za-z0-9_-]*[A-Za-z0-9]$", tokenname):
|
if not check_regex("^[A-Za-z][A-Za-z0-9_-]*[A-Za-z0-9]$", tokenname):
|
||||||
return outputreturn('noise')
|
return outputreturn('noise')
|
||||||
|
|
||||||
tokenamount = apply_rule1(extractAmount_rule_new1, processed_text)
|
|
||||||
if not tokenamount:
|
|
||||||
return outputreturn('noise')
|
|
||||||
try:
|
|
||||||
if float(tokenamount)<=0:
|
|
||||||
return outputreturn('noise')
|
|
||||||
except:
|
|
||||||
return outputreturn('noise')
|
|
||||||
|
|
||||||
contract_name = extract_special_character_word(first_classification['wordlist'],'@')
|
contract_name = extract_special_character_word(first_classification['wordlist'],'@')
|
||||||
if not check_regex("^[A-Za-z][A-Za-z0-9_-]*[A-Za-z0-9]$", contract_name):
|
if not check_regex("^[A-Za-z][A-Za-z0-9_-]*[A-Za-z0-9]$", contract_name):
|
||||||
return outputreturn('noise')
|
return outputreturn('noise')
|
||||||
|
|
||||||
contract_address = extract_special_character_word(first_classification['wordlist'],'$')
|
contract_address = extract_special_character_word(first_classification['wordlist'],'$')
|
||||||
if contract_address is False:
|
if contract_address is False:
|
||||||
contract_address = ''
|
contract_address = ''
|
||||||
@ -1264,62 +1192,149 @@ def parse_flodata(text, blockinfo, net):
|
|||||||
if not check_flo_address(contract_address, is_testnet):
|
if not check_flo_address(contract_address, is_testnet):
|
||||||
return outputreturn('noise')
|
return outputreturn('noise')
|
||||||
|
|
||||||
return outputreturn('smart-contract-one-time-event-continuos-event-participation', f"{clean_text}", f"{tokenname}", tokenamount, f"{contract_name}", f"{contract_address}", stateF_mapping)
|
if operation == 'category1':
|
||||||
|
tokenamount = apply_rule1(extractAmount_rule_new1, processed_text, 'userchoice:', 'pre')
|
||||||
|
if not tokenamount:
|
||||||
|
return outputreturn('noise')
|
||||||
|
try:
|
||||||
|
if float(tokenamount)<=0:
|
||||||
|
return outputreturn('noise')
|
||||||
|
except:
|
||||||
|
return outputreturn('noise')
|
||||||
|
userchoice = extract_userchoice(processed_text)
|
||||||
|
# todo - do we need more validations for user choice?
|
||||||
|
if not userchoice:
|
||||||
|
return outputreturn('noise')
|
||||||
|
|
||||||
if first_classification['categorization'] == 'userchoice-trigger':
|
return outputreturn('one-time-event-userchoice-smartcontract-participation',f"{clean_text}", f"{tokenname}", tokenamount, f"{contract_name}", f"{contract_address}", f"{userchoice}", stateF_mapping)
|
||||||
contract_name = extract_special_character_word(first_classification['wordlist'],'@')
|
|
||||||
if not check_regex("^[A-Za-z][A-Za-z0-9_-]*[A-Za-z0-9]$", contract_name):
|
elif operation == 'category2':
|
||||||
|
tokenamount = apply_rule1(extractAmount_rule_new1, processed_text, 'deposit-conditions:', 'pre')
|
||||||
|
if not tokenamount:
|
||||||
|
return outputreturn('noise')
|
||||||
|
try:
|
||||||
|
if float(tokenamount)<=0:
|
||||||
|
return outputreturn('noise')
|
||||||
|
except:
|
||||||
|
return outputreturn('noise')
|
||||||
|
deposit_conditions = extract_deposit_conditions(processed_text, blocktime=blockinfo['time'])
|
||||||
|
if not deposit_conditions:
|
||||||
|
return outputreturn("noise")
|
||||||
|
return outputreturn('continuos-event-token-swap-deposit', f"{tokenname}", tokenamount, f"{contract_name}", f"{clean_text}", f"{deposit_conditions['expiryTime']}", stateF_mapping)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def process_smart_contract_participation_ote_ce_C(first_classification, processed_text, clean_text, stateF_mapping, is_testnet):
|
||||||
|
# There is no way to properly differentiate between one-time-event-time-trigger participation and token swap participation
|
||||||
|
# so we merge them in output return
|
||||||
|
tokenname = first_classification['wordlist'][0][:-1]
|
||||||
|
if not check_regex("^[A-Za-z][A-Za-z0-9_-]*[A-Za-z0-9]$", tokenname):
|
||||||
|
return outputreturn('noise')
|
||||||
|
|
||||||
|
tokenamount = apply_rule1(extractAmount_rule_new1, processed_text)
|
||||||
|
if not tokenamount:
|
||||||
|
return outputreturn('noise')
|
||||||
|
try:
|
||||||
|
if float(tokenamount)<=0:
|
||||||
return outputreturn('noise')
|
return outputreturn('noise')
|
||||||
|
except:
|
||||||
trigger_condition = extract_trigger_condition(processed_text)
|
return outputreturn('noise')
|
||||||
if not trigger_condition:
|
|
||||||
return outputreturn('noise')
|
contract_name = extract_special_character_word(first_classification['wordlist'],'@')
|
||||||
return outputreturn('one-time-event-userchoice-smartcontract-trigger', f"{contract_name}", f"{trigger_condition}", stateF_mapping)
|
if not check_regex("^[A-Za-z][A-Za-z0-9_-]*[A-Za-z0-9]$", contract_name):
|
||||||
|
return outputreturn('noise')
|
||||||
if first_classification['categorization'] == 'smart-contract-creation-ce-tokenswap':
|
|
||||||
operation = apply_rule1(selectCategory, processed_text, create_category, send_category+deposit_category)
|
contract_address = extract_special_character_word(first_classification['wordlist'],'$')
|
||||||
if operation != 'category1':
|
if contract_address is False:
|
||||||
return outputreturn('noise')
|
contract_address = ''
|
||||||
|
else:
|
||||||
contract_type = extract_special_character_word(first_classification['wordlist'],'*')
|
|
||||||
if not check_existence_of_keyword(['continuous-event'],[contract_type]):
|
|
||||||
return outputreturn('noise')
|
|
||||||
|
|
||||||
contract_name = extract_special_character_word(first_classification['wordlist'],'@')
|
|
||||||
if not check_regex("^[A-Za-z][A-Za-z0-9_-]*[A-Za-z0-9]$", contract_name):
|
|
||||||
return outputreturn('noise')
|
|
||||||
|
|
||||||
contract_token = extract_special_character_word(first_classification['wordlist'],'#')
|
|
||||||
if not check_regex("^[A-Za-z][A-Za-z0-9_-]*[A-Za-z0-9]$", contract_token):
|
|
||||||
return outputreturn('noise')
|
|
||||||
|
|
||||||
contract_address = extract_special_character_word(first_classification['wordlist'],'$')
|
|
||||||
contract_address = find_original_case(contract_address, clean_text)
|
contract_address = find_original_case(contract_address, clean_text)
|
||||||
if not check_flo_address(contract_address, is_testnet):
|
if not check_flo_address(contract_address, is_testnet):
|
||||||
return outputreturn('noise')
|
return outputreturn('noise')
|
||||||
|
|
||||||
contract_conditions = extract_contract_conditions(processed_text, contract_type, contract_token, blocktime=blockinfo['time'])
|
return outputreturn('smart-contract-one-time-event-continuos-event-participation', f"{clean_text}", f"{tokenname}", tokenamount, f"{contract_name}", f"{contract_address}", stateF_mapping)
|
||||||
if contract_conditions == False:
|
|
||||||
return outputreturn('noise')
|
|
||||||
# todo - Add checks for token swap extract contract conditions
|
|
||||||
try:
|
|
||||||
assert contract_conditions['subtype'] == 'tokenswap'
|
|
||||||
assert check_regex("^[A-Za-z][A-Za-z0-9_-]*[A-Za-z0-9]$", contract_conditions['accepting_token'])
|
|
||||||
assert check_regex("^[A-Za-z][A-Za-z0-9_-]*[A-Za-z0-9]$", contract_conditions['selling_token'])
|
|
||||||
if contract_conditions['priceType']=="'determined'" or contract_conditions['priceType']=='"determined"' or contract_conditions['priceType']=="determined" or contract_conditions['priceType']=="'predetermined'" or contract_conditions['priceType']=='"predetermined"' or contract_conditions['priceType']=="predetermined":
|
|
||||||
assert float(contract_conditions['price'])>0
|
|
||||||
contract_conditions['oracle_address'] = False
|
|
||||||
elif contract_conditions['priceType']=="dynamic" or contract_conditions['priceType']=="'dynamic'" or contract_conditions['priceType']=='"dynamic"':
|
|
||||||
assert float(contract_conditions['price'])>0
|
|
||||||
contract_conditions['oracle_address'] = find_original_case_regex(contract_conditions['oracle_address'], clean_text) # making sure the Flo Address is in its original case
|
|
||||||
assert check_flo_address(contract_conditions['oracle_address'], is_testnet)
|
|
||||||
assert contract_conditions['oracle_address'] != contract_address
|
|
||||||
else:
|
|
||||||
assert contract_conditions['priceType'] == 'statef'
|
|
||||||
contract_conditions['oracle_address'] = False
|
|
||||||
except AssertionError:
|
|
||||||
return outputreturn('noise')
|
|
||||||
|
|
||||||
return outputreturn('continuos-event-token-swap-incorporation', f"{contract_token}", f"{contract_name}", f"{contract_address}", f"{clean_text}", f"{contract_conditions['subtype']}", f"{contract_conditions['accepting_token']}", f"{contract_conditions['selling_token']}", f"{contract_conditions['priceType']}", f"{contract_conditions['price']}", stateF_mapping, f"{contract_conditions['oracle_address']}")
|
|
||||||
|
def process_userchoice_trigger(first_classification, processed_text, stateF_mapping):
|
||||||
return outputreturn('noise')
|
contract_name = extract_special_character_word(first_classification['wordlist'],'@')
|
||||||
|
if not check_regex("^[A-Za-z][A-Za-z0-9_-]*[A-Za-z0-9]$", contract_name):
|
||||||
|
return outputreturn('noise')
|
||||||
|
|
||||||
|
trigger_condition = extract_trigger_condition(processed_text)
|
||||||
|
if not trigger_condition:
|
||||||
|
return outputreturn('noise')
|
||||||
|
return outputreturn('one-time-event-userchoice-smartcontract-trigger', f"{contract_name}", f"{trigger_condition}", stateF_mapping)
|
||||||
|
|
||||||
|
|
||||||
|
def process_smart_contract_creation_ce_tokenswap(first_classification, processed_text, clean_text, blockinfo, stateF_mapping, is_testnet):
|
||||||
|
operation = apply_rule1(selectCategory, processed_text, create_category, send_category+deposit_category)
|
||||||
|
if operation != 'category1':
|
||||||
|
return outputreturn('noise')
|
||||||
|
|
||||||
|
contract_type = extract_special_character_word(first_classification['wordlist'],'*')
|
||||||
|
if not check_existence_of_keyword(['continuous-event'],[contract_type]):
|
||||||
|
return outputreturn('noise')
|
||||||
|
|
||||||
|
contract_name = extract_special_character_word(first_classification['wordlist'],'@')
|
||||||
|
if not check_regex("^[A-Za-z][A-Za-z0-9_-]*[A-Za-z0-9]$", contract_name):
|
||||||
|
return outputreturn('noise')
|
||||||
|
|
||||||
|
contract_token = extract_special_character_word(first_classification['wordlist'],'#')
|
||||||
|
if not check_regex("^[A-Za-z][A-Za-z0-9_-]*[A-Za-z0-9]$", contract_token):
|
||||||
|
return outputreturn('noise')
|
||||||
|
|
||||||
|
contract_address = extract_special_character_word(first_classification['wordlist'],'$')
|
||||||
|
contract_address = find_original_case(contract_address, clean_text)
|
||||||
|
if not check_flo_address(contract_address, is_testnet):
|
||||||
|
return outputreturn('noise')
|
||||||
|
|
||||||
|
contract_conditions = extract_contract_conditions(processed_text, contract_type, contract_token, blocktime=blockinfo['time'])
|
||||||
|
if contract_conditions == False:
|
||||||
|
return outputreturn('noise')
|
||||||
|
# todo - Add checks for token swap extract contract conditions
|
||||||
|
try:
|
||||||
|
assert contract_conditions['subtype'] == 'tokenswap'
|
||||||
|
assert check_regex("^[A-Za-z][A-Za-z0-9_-]*[A-Za-z0-9]$", contract_conditions['accepting_token'])
|
||||||
|
assert check_regex("^[A-Za-z][A-Za-z0-9_-]*[A-Za-z0-9]$", contract_conditions['selling_token'])
|
||||||
|
if contract_conditions['priceType']=="'determined'" or contract_conditions['priceType']=='"determined"' or contract_conditions['priceType']=="determined" or contract_conditions['priceType']=="'predetermined'" or contract_conditions['priceType']=='"predetermined"' or contract_conditions['priceType']=="predetermined":
|
||||||
|
assert float(contract_conditions['price'])>0
|
||||||
|
contract_conditions['oracle_address'] = False
|
||||||
|
elif contract_conditions['priceType']=="dynamic" or contract_conditions['priceType']=="'dynamic'" or contract_conditions['priceType']=='"dynamic"':
|
||||||
|
assert float(contract_conditions['price'])>0
|
||||||
|
contract_conditions['oracle_address'] = find_original_case_regex(contract_conditions['oracle_address'], clean_text) # making sure the Flo Address is in its original case
|
||||||
|
assert check_flo_address(contract_conditions['oracle_address'], is_testnet)
|
||||||
|
assert contract_conditions['oracle_address'] != contract_address
|
||||||
|
else:
|
||||||
|
assert contract_conditions['priceType'] == 'statef'
|
||||||
|
contract_conditions['oracle_address'] = False
|
||||||
|
except AssertionError:
|
||||||
|
return outputreturn('noise')
|
||||||
|
|
||||||
|
return outputreturn('continuos-event-token-swap-incorporation', f"{contract_token}", f"{contract_name}", f"{contract_address}", f"{clean_text}", f"{contract_conditions['subtype']}", f"{contract_conditions['accepting_token']}", f"{contract_conditions['selling_token']}", f"{contract_conditions['priceType']}", f"{contract_conditions['price']}", stateF_mapping, f"{contract_conditions['oracle_address']}")
|
||||||
|
|
||||||
|
def parse_flodata(text, blockinfo, net):
|
||||||
|
is_testnet = net == 'testnet'
|
||||||
|
|
||||||
|
if text == '':
|
||||||
|
return outputreturn('noise')
|
||||||
|
|
||||||
|
clean_text, processed_text = text_preprocessing(text)
|
||||||
|
print("Processing stateF")
|
||||||
|
stateF_mapping = isStateF(processed_text)
|
||||||
|
first_classification = firstclassification_rawstring(processed_text)
|
||||||
|
|
||||||
|
categorization = first_classification['categorization']
|
||||||
|
if categorization == 'tokensystem-C':
|
||||||
|
return process_tokensystem_C(first_classification, processed_text, clean_text, stateF_mapping, is_testnet)
|
||||||
|
elif categorization == 'smart-contract-creation-C':
|
||||||
|
return process_smart_contract_creation_C(first_classification, processed_text, clean_text, blockinfo, stateF_mapping, is_testnet)
|
||||||
|
elif categorization == 'smart-contract-participation-deposit-C':
|
||||||
|
return process_smart_contract_participation_deposit_C(first_classification, processed_text, clean_text, blockinfo, stateF_mapping, is_testnet)
|
||||||
|
elif categorization == 'smart-contract-participation-ote-ce-C':
|
||||||
|
return process_smart_contract_participation_ote_ce_C(first_classification, processed_text, clean_text, stateF_mapping, is_testnet)
|
||||||
|
elif categorization == 'userchoice-trigger':
|
||||||
|
return process_userchoice_trigger(first_classification, processed_text, stateF_mapping)
|
||||||
|
elif categorization == 'smart-contract-creation-ce-tokenswap':
|
||||||
|
return process_smart_contract_creation_ce_tokenswap(first_classification, processed_text, clean_text, blockinfo, stateF_mapping, is_testnet)
|
||||||
|
else:
|
||||||
|
return outputreturn('noise')
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user