Added functionality to add/remove a committee member from the list based on the time
Its possible that a committee member provided the right triggers for x number of contract before going rogue. Removal of the committee member after going rogue should not affect the previous contract's results. * Transaction comparision with blocktime has been implement when creating committee list * Order of execution of addition and removal is opinionated now to maintain consistency. Addition will be first, removal will be later
This commit is contained in:
parent
e599caa9d4
commit
acffba0698
@ -60,11 +60,13 @@ def process_committee_flodata(flodata):
|
|||||||
except KeyError:
|
except KeyError:
|
||||||
print('Flodata related to contract committee')
|
print('Flodata related to contract committee')
|
||||||
else:
|
else:
|
||||||
|
# Adding first and removing later to maintain consistency and not to depend on floData for order of execution
|
||||||
for action in contract_committee_actions.keys():
|
for action in contract_committee_actions.keys():
|
||||||
if action == 'add':
|
if action == 'add':
|
||||||
for floid in contract_committee_actions[f'{action}']:
|
for floid in contract_committee_actions[f'{action}']:
|
||||||
flo_address_list.append(floid)
|
flo_address_list.append(floid)
|
||||||
|
|
||||||
|
for action in contract_committee_actions.keys():
|
||||||
if action == 'remove':
|
if action == 'remove':
|
||||||
for floid in contract_committee_actions[f'{action}']:
|
for floid in contract_committee_actions[f'{action}']:
|
||||||
flo_address_list.remove(floid)
|
flo_address_list.remove(floid)
|
||||||
@ -72,7 +74,7 @@ def process_committee_flodata(flodata):
|
|||||||
return flo_address_list
|
return flo_address_list
|
||||||
|
|
||||||
|
|
||||||
def refresh_committee_list(admin_flo_id, api_url):
|
def refresh_committee_list(admin_flo_id, api_url, blocktime):
|
||||||
response = requests.get(f'{api_url}api/addr/{admin_flo_id}')
|
response = requests.get(f'{api_url}api/addr/{admin_flo_id}')
|
||||||
if response.status_code == 200:
|
if response.status_code == 200:
|
||||||
response = response.json()
|
response = response.json()
|
||||||
@ -81,11 +83,12 @@ def refresh_committee_list(admin_flo_id, api_url):
|
|||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
committee_list = []
|
committee_list = []
|
||||||
|
response['transactions'].reverse()
|
||||||
for idx, transaction in enumerate(response['transactions']):
|
for idx, transaction in enumerate(response['transactions']):
|
||||||
transaction_info = requests.get(f'{api_url}api/tx/{transaction}')
|
transaction_info = requests.get(f'{api_url}api/tx/{transaction}')
|
||||||
if transaction_info.status_code == 200:
|
if transaction_info.status_code == 200:
|
||||||
transaction_info = transaction_info.json()
|
transaction_info = transaction_info.json()
|
||||||
if transaction_info['vin'][0]['addr'] == admin_flo_id:
|
if transaction_info['vin'][0]['addr']==admin_flo_id and transaction_info['blocktime']<=blocktime:
|
||||||
try:
|
try:
|
||||||
tx_flodata = json.loads(transaction_info['floData'])
|
tx_flodata = json.loads(transaction_info['floData'])
|
||||||
committee_list += process_committee_flodata(tx_flodata)
|
committee_list += process_committee_flodata(tx_flodata)
|
||||||
@ -254,7 +257,7 @@ def processBlock(blockindex=None, blockhash=None):
|
|||||||
response = newMultiRequest(f"block-index/{blockindex}")
|
response = newMultiRequest(f"block-index/{blockindex}")
|
||||||
blockhash = response['blockHash']
|
blockhash = response['blockHash']
|
||||||
|
|
||||||
blockinfo = newMultiRequest(f"block/{blockhash}")
|
blockinfo = newMultiRequest(f"block/{blockhash}")
|
||||||
pause_index = [2211699, 2211700, 2211701, 2170000]
|
pause_index = [2211699, 2211700, 2211701, 2170000]
|
||||||
if blockindex in pause_index:
|
if blockindex in pause_index:
|
||||||
print(f'Paused at {blockindex}')
|
print(f'Paused at {blockindex}')
|
||||||
@ -1597,7 +1600,7 @@ def processTransaction(transaction_data, parsed_data, blockinfo):
|
|||||||
|
|
||||||
elif parsed_data['type'] == 'smartContractPays':
|
elif parsed_data['type'] == 'smartContractPays':
|
||||||
logger.info(f"Transaction {transaction_data['txid']} is of the type smartContractPays")
|
logger.info(f"Transaction {transaction_data['txid']} is of the type smartContractPays")
|
||||||
committeeAddressList = refresh_committee_list(APP_ADMIN, neturl)
|
committeeAddressList = refresh_committee_list(APP_ADMIN, neturl, blockinfo['time'])
|
||||||
# Check if input address is a committee address
|
# Check if input address is a committee address
|
||||||
if inputlist[0] in committeeAddressList:
|
if inputlist[0] in committeeAddressList:
|
||||||
# check if the contract exists
|
# check if the contract exists
|
||||||
@ -2080,8 +2083,6 @@ IGNORE_BLOCK_LIST = config['DEFAULT']['IGNORE_BLOCK_LIST'].split(',')
|
|||||||
IGNORE_BLOCK_LIST = [int(s) for s in IGNORE_BLOCK_LIST]
|
IGNORE_BLOCK_LIST = [int(s) for s in IGNORE_BLOCK_LIST]
|
||||||
IGNORE_TRANSACTION_LIST = config['DEFAULT']['IGNORE_TRANSACTION_LIST'].split(',')
|
IGNORE_TRANSACTION_LIST = config['DEFAULT']['IGNORE_TRANSACTION_LIST'].split(',')
|
||||||
|
|
||||||
# Setup APP ADMIN and Committee address list
|
|
||||||
committeeAddressList = refresh_committee_list(APP_ADMIN, neturl)
|
|
||||||
|
|
||||||
# Delete database and smartcontract directory if reset is set to 1
|
# Delete database and smartcontract directory if reset is set to 1
|
||||||
if args.reset == 1:
|
if args.reset == 1:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user