update handlers: add thread sleep to allow token registration

This commit is contained in:
Carlosokumu 2024-12-06 14:08:43 +03:00
parent 9aaa125948
commit d1a794fe37
Signed by: carlos
GPG Key ID: 7BD6BC8160A5C953

View File

@ -2,6 +2,7 @@ import json
import random import random
import re import re
import string import string
import time
import ply.lex as lex import ply.lex as lex
import ply.yacc as yacc import ply.yacc as yacc
import enum import enum
@ -64,11 +65,12 @@ lexer = lex.lex()
load_dotenv() load_dotenv()
#Chain params #Chain Params
privatekey = os.getenv("PRIVATE_KEY")
chainId = os.getenv("CHAIN_ID") chainId = os.getenv("CHAIN_ID")
rpc = os.getenv("RPC") rpc = os.getenv("RPC")
gasCap = os.getenv("GAS_FEE_CAP") gasCap = os.getenv("GAS_FEE_CAP")
master_private_key = os.getenv("MASTER_PRIVATE_KEY") master_private_key = os.getenv("MASTER_PRIVATE_KEY")
token_index = os.getenv("TOKEN_INDEX") token_index = os.getenv("TOKEN_INDEX")
gas_topup = os.getenv("GAS_TOPUP") gas_topup = os.getenv("GAS_TOPUP")
@ -368,12 +370,11 @@ def store_key_in_keystore(private_key, key_name, address):
return store_path return store_path
def load_gas(address,nonce): def load_gas(address,nonce):
global call_count
command = ( command = (
f'cast send {address} ' f'cast send {address} '
f'--value {gas_topup} ' f'--value {gas_topup} '
f'--nonce {nonce} ' f'--nonce {nonce} '
f'--private-key {privatekey} ' f'--private-key {master_private_key} '
f'--rpc-url {rpc} ' f'--rpc-url {rpc} '
f' --json ' f' --json '
) )
@ -409,16 +410,21 @@ def store_voucher(voucher_creator,voucher_symbol,voucher_address):
def key_create_handler(cmd): def key_create_handler(cmd):
key_name = str(cmd.f).split(":")[1] key_name = str(cmd.f).split(":")[1]
master_address = w3.eth.account.from_key(privatekey) master_address = w3.eth.account.from_key(master_private_key)
nonce = w3.eth.get_transaction_count(master_address.address,'pending') nonce = w3.eth.get_transaction_count(master_address.address,'pending')
if cmd.k is None: if cmd.k is None:
address,private_key = generate_private_key() address,private_key = generate_private_key()
else: else:
if private_key.startswith("0x"): if cmd.k.startswith("0x"):
private_key = private_key[2:] private_key = cmd.k[2:]
address = w3.eth.account.from_key(privatekey) else:
private_key = cmd.k
address = w3.eth.account.from_key(private_key).address
load_gas(address,nonce) load_gas(address,nonce)
store_key_in_keystore(private_key, key_name, address) store_key_in_keystore(private_key, key_name, address)
return address return address
@ -426,7 +432,7 @@ def voucher_create_handler(cmd):
name = cmd.n name = cmd.n
symbol = cmd.s symbol = cmd.s
random_ascii = ''.join(random.choices(string.ascii_letters, k=2)) random_ascii = ''.join(random.choices(string.ascii_letters, k=2)).upper()
try: try:
with open("vouchers.json", 'r') as f: with open("vouchers.json", 'r') as f:
existing_vouchers = json.load(f) existing_vouchers = json.load(f)
@ -437,17 +443,20 @@ def voucher_create_handler(cmd):
if symbol in voucher_symbols: if symbol in voucher_symbols:
symbol = symbol + random_ascii symbol = symbol + random_ascii
if privatekey.startswith("0x"): if master_private_key.startswith("0x"):
private_key = privatekey[2:] private_key = master_private_key[2:]
else:
private_key = master_private_key
#Command to create a voucher #Command to create a voucher
command = f'ge-publish --private-key {private_key} --json ' \ publish_token = f'ge-publish --private-key {private_key} --json ' \
f'--rpc {rpc} --gas-fee-cap {gasCap} --chainid {chainId} ' \ f'--rpc {rpc} --gas-fee-cap {gasCap} --chainid {chainId} ' \
f'p erc20 --name "{name}" --symbol "{symbol}"' f'p erc20 --name "{name}" --symbol "{symbol}"'
result = subprocess.run(command, shell=True, capture_output=True, text=True)
result = subprocess.run(publish_token, shell=True, capture_output=True, text=True)
if result.returncode != 0: if result.returncode != 0:
raise subprocess.CalledProcessError(result.returncode, command, output=result.stdout, stderr=result.stderr) raise subprocess.CalledProcessError(result.returncode, publish_token, output=result.stdout, stderr=result.stderr)
output_lines = result.stderr.strip().split("\n") output_lines = result.stderr.strip().split("\n")
deployment_result = output_lines[1] deployment_result = output_lines[1]
try: try:
@ -455,25 +464,35 @@ def voucher_create_handler(cmd):
contract_address = data.get('contract_address', None) contract_address = data.get('contract_address', None)
except json.JSONDecodeError as e: except json.JSONDecodeError as e:
print("Error parsing JSON:", e) print("Error parsing JSON:", e)
message = f"Voucher {name} created with address {contract_address} and symbol {symbol}"
store_voucher(private_key,symbol,contract_address) store_voucher(private_key,symbol,contract_address)
printMessage(message)
#Command to add the token to the token index #Command to add the token to the token index
add_token = ( add_token_to_index = (
f'cast send --private-key {master_private_key} ' f'cast send --private-key {master_private_key} '
f'--rpc-url {rpc} ' f'--rpc-url {rpc} '
f'{token_index} ' f'{token_index} '
f'"add(address)" {contract_address} ' f'"add(address)" {contract_address} '
f' --json ' f' --json '
) )
result2 = subprocess.run(add_token, shell=True, capture_output=True, text=True)
#sleep for 5 second to allow chain to sync
time.sleep(5)
result2 = subprocess.run(add_token_to_index, shell=True, capture_output=True, text=True)
if result2.returncode != 0: if result2.returncode != 0:
raise subprocess.CalledProcessError(result.returncode, command, output=result.stdout, stderr=result.stderr) raise subprocess.CalledProcessError(result2.returncode, add_token_to_index, output=result2.stdout, stderr=result2.stderr)
message = f"Voucher {name} created with address {contract_address} and symbol {symbol} and added to token index: {token_index}"
printMessage(message)
return contract_address return contract_address
def voucher_transfer_handler(cmd): def voucher_transfer_handler(cmd):
#Amount to transfer
value = cmd.v # Amount to transfer value = cmd.v # Amount to transfer
#Token symbol to transfer
if str(cmd.a).startswith("NameAgent"): if str(cmd.a).startswith("NameAgent"):
voucher_name = str(cmd.a).split(":")[1] voucher_name = str(cmd.a).split(":")[1]
with open("vouchers.json", "r") as file: with open("vouchers.json", "r") as file:
@ -502,13 +521,25 @@ def voucher_transfer_handler(cmd):
else: else:
raise ValueError(f"Invalid command: {cmd.t}. Expected 'NameAgent' or 'AddressAgent'.") raise ValueError(f"Invalid command: {cmd.t}. Expected 'NameAgent' or 'AddressAgent'.")
if str(cmd.f).startswith("NameAgent"):
key_name = str(cmd.f).split(":")[1]
store_path = os.path.join("custodial_store", f"{key_name}.json")
with open(store_path, "r") as file:
data = json.load(file)
from_private_key = data["private_key"]
elif str(cmd.f).startswith("AddressAgent"):
from_private_key = "0x" + str(cmd.f).split(":")[1]
else:
raise ValueError(f"Invalid command: {cmd.t}. Expected 'NameAgent' or 'AddressAgent'.")
command = ( command = (
f'cast send --private-key {privatekey} ' f'cast send --private-key {from_private_key} '
f'--rpc-url {rpc} ' f'--rpc-url {rpc} '
f'{s} ' f'{s} '
f'"transfer(address,uint256)" {to} {value}' f'"transfer(address,uint256)" {to} {value}'
f' --json ' f' --json '
) )
result = subprocess.run(command, shell=True, capture_output=True, text=True) result = subprocess.run(command, shell=True, capture_output=True, text=True)
if result.returncode != 0: if result.returncode != 0:
raise subprocess.CalledProcessError(result.returncode, command, output=result.stdout, stderr=result.stderr) raise subprocess.CalledProcessError(result.returncode, command, output=result.stdout, stderr=result.stderr)
@ -540,13 +571,17 @@ def voucher_mint_handler(cmd):
voucher_symbol = str(cmd.a).split(":")[1] voucher_symbol = str(cmd.a).split(":")[1]
with open("vouchers.json", "r") as file: with open("vouchers.json", "r") as file:
data = json.load(file) data = json.load(file)
voucher_symbols = list(map(lambda symbol: symbol['symbol'], data)) voucher_symbols = list(map(lambda symbol: symbol['symbol'], data))
voucher_address = list(map(lambda address: address['voucher_address'], data)) voucher_address = list(map(lambda address: address['voucher_address'], data))
voucher_owners = list(map(lambda address: address['owner'], data)) voucher_owners = list(map(lambda address: address['owner'], data))
if voucher_symbol in voucher_symbols: if voucher_symbol in voucher_symbols:
index = voucher_symbols.index(voucher_symbol) index = voucher_symbols.index(voucher_symbol)
s = voucher_address[index] s = voucher_address[index]
privatekey = voucher_owners[index] privatekey = voucher_owners[index]
else:
raise ValueError(f"Voucher with symbol {voucher_symbol} was not found")
elif str(cmd.a).startswith("AddressAgent"): elif str(cmd.a).startswith("AddressAgent"):
s = "0x" + str(cmd.a).split(":")[1] s = "0x" + str(cmd.a).split(":")[1]
@ -566,7 +601,7 @@ def voucher_mint_handler(cmd):
if result.stderr: if result.stderr:
raise ValueError(f"Command failed with error: {result.stderr}") raise ValueError(f"Command failed with error: {result.stderr}")
data = json.loads(result.stdout) data = json.loads(result.stdout)
message = f"Added supply to {voucher_symbol} with value {value} and address {voucher_address}" message = f"Added supply of {value} {voucher_symbol} to :{to}"
printMessage(message) printMessage(message)
return data["transactionHash"] return data["transactionHash"]