add default env vars,use actual voucher decimal

This commit is contained in:
Carlosokumu 2024-12-16 09:48:47 +03:00
parent db815494d3
commit b32d776183
Signed by: carlos
GPG Key ID: 7BD6BC8160A5C953

View File

@ -68,15 +68,16 @@ lexer = lex.lex()
load_dotenv() load_dotenv()
# Chain Params # Chain Params
chainId = os.getenv("CHAIN_ID") chainId = os.getenv("CHAIN_ID","44787")
rpc = os.getenv("RPC") rpc = os.getenv("RPC","https://alfajores-forno.celo-testnet.org/")
bearer_token = os.getenv("BEARER_TOKEN") gas_cap = os.getenv("GAS_FEE_CAP","35000000000")
gas_cap = 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","0xD774bc082003eaF8DF74eEcD43AD44F03D488418")
gas_topup = os.getenv("GAS_TOPUP") gas_topup = os.getenv("GAS_TOPUP","0.01ether")
bearer_token = os.getenv("BEARER_TOKEN")
w3 = Web3(Web3.HTTPProvider(rpc)) w3 = Web3(Web3.HTTPProvider(rpc))
@ -100,15 +101,26 @@ w3 = Web3(Web3.HTTPProvider(rpc))
# print(tok) # print(tok)
class TokenTransfer: class VoucherTransfer:
def __init__( def __init__(
self, to_address=None, from_address=None, amount=None, token_address=None self, to_address=None, from_address=None, amount=None, token_address=None,decimals = None
): ):
self.to_address = to_address self.to_address = to_address
self.from_address = from_address self.from_address = from_address
self.decimals = decimals
self.amount = amount self.amount = amount
self.token_address = token_address self.token_address = token_address
class VoucherDetail:
def __init__(
self, name =None, symbol =None, decimals =None,owner = None,address = None
):
self.name = name
self.owner = owner
self.address = address
self.symbol = symbol
self.decimals = decimals
class CmdId(enum.IntEnum): class CmdId(enum.IntEnum):
KEY_CREATE = 0x1 KEY_CREATE = 0x1
@ -495,12 +507,13 @@ def do_custodial_token_transfer(transfer):
return None return None
def store_voucher(voucher_creator, voucher_symbol, voucher_address): def store_voucher(voucher_detail):
vouchers = [] vouchers = []
voucher = { voucher = {
"voucher_address": voucher_address, "voucher_address": voucher_detail.address,
"owner": voucher_creator, "owner": voucher_detail.owner,
"symbol": voucher_symbol, "symbol": voucher_detail.symbol,
"decimals": voucher_detail.decimals
} }
vouchers.append(voucher) vouchers.append(voucher)
try: try:
@ -548,9 +561,16 @@ def key_create_handler(cmd):
def voucher_create_handler(cmd): def voucher_create_handler(cmd):
name = cmd.n
symbol = cmd.s symbol = cmd.s
if cmd.n is None or cmd.s is None or cmd.v is None:
raise ValueError("cmd.n, cmd.s, and cmd.v must not be None")
voucher_detail = VoucherDetail()
voucher_detail.name = cmd.n
voucher_detail.decimals = cmd.v
random_ascii = "".join(random.choices(string.ascii_letters, k=2)).upper() 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:
@ -563,16 +583,20 @@ def voucher_create_handler(cmd):
if symbol in voucher_symbols: if symbol in voucher_symbols:
symbol = symbol + random_ascii symbol = symbol + random_ascii
voucher_detail.symbol = symbol
if master_private_key.startswith("0x"): if master_private_key.startswith("0x"):
private_key = master_private_key[2:] private_key = master_private_key[2:]
else: else:
private_key = master_private_key private_key = master_private_key
voucher_detail.owner = private_key
# Command to create a voucher # Command to create a voucher
publish_token = ( publish_token = (
f"ge-publish --private-key {private_key} --json " f"ge-publish --private-key {voucher_detail.owner} --json "
f"--rpc {rpc} --gas-fee-cap {gas_cap} --chainid {chainId} " f"--rpc {rpc} --gas-fee-cap {gas_cap} --chainid {chainId} "
f'p erc20 --name "{name}" --symbol "{symbol}"' f'p erc20 --name "{voucher_detail.name}" --symbol "{voucher_detail.symbol}"'
) )
result = subprocess.run(publish_token, shell=True, capture_output=True, text=True) result = subprocess.run(publish_token, shell=True, capture_output=True, text=True)
@ -587,10 +611,11 @@ def voucher_create_handler(cmd):
try: try:
data = json.loads(deployment_result) data = json.loads(deployment_result)
contract_address = data.get("contract_address", None) contract_address = data.get("contract_address", None)
voucher_detail.address = contract_address
except json.JSONDecodeError as e: except json.JSONDecodeError as e:
print("Error parsing JSON:", e) print("Error parsing JSON:", e)
store_voucher(private_key, symbol, contract_address) store_voucher(voucher_detail)
# sleep for 5 second to allow chain to sync # sleep for 5 second to allow chain to sync
time.sleep(5) time.sleep(5)
@ -619,20 +644,20 @@ def voucher_create_handler(cmd):
stderr=result2.stderr, stderr=result2.stderr,
) )
message = f"Voucher {name} created with address {contract_address} and symbol {symbol} and added to token index: {token_index}" message = f"Voucher {voucher_detail.name} created with address {contract_address} and symbol {symbol} and added to token index: {token_index}"
printMessage(message) printMessage(message)
return contract_address return contract_address
def voucher_transfer_handler(cmd): def voucher_transfer_handler(cmd):
token_transfer = TokenTransfer() voucher_transfer = VoucherTransfer()
# Amount to transfer # Amount to transfer
value = cmd.v # Amount to transfer value = cmd.v # Amount to transfer
is_custodial_address = False is_custodial_address = False
token_transfer.amount = value voucher_transfer.amount = value
# Token symbol to transfer # Token symbol to transfer
if str(cmd.a).startswith("NameAgent"): if str(cmd.a).startswith("NameAgent"):
@ -642,12 +667,15 @@ def voucher_transfer_handler(cmd):
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_decimal = list(map(lambda decimal: decimal["decimals"], data))
if voucher_name in voucher_symbols: if voucher_name in voucher_symbols:
index = voucher_symbols.index(voucher_name) index = voucher_symbols.index(voucher_name)
token_transfer.token_address = voucher_address[index] voucher_transfer.token_address = voucher_address[index]
voucher_transfer.decimals = voucher_decimal[index]
elif str(cmd.a).startswith("AddressAgent"): elif str(cmd.a).startswith("AddressAgent"):
token_transfer.token_address = "0x" + str(cmd.a).split(":")[1] voucher_transfer.token_address = "0x" + str(cmd.a).split(":")[1]
else: else:
raise ValueError( raise ValueError(
f"Invalid command: {cmd.t}. Expected 'NameAgent' or 'AddressAgent'." f"Invalid command: {cmd.t}. Expected 'NameAgent' or 'AddressAgent'."
@ -659,17 +687,17 @@ def voucher_transfer_handler(cmd):
custodial_address = find_custodial_address(key_name) custodial_address = find_custodial_address(key_name)
if custodial_address is not None: if custodial_address is not None:
to = custodial_address to = custodial_address
token_transfer.to_address = to voucher_transfer.to_address = to
else: else:
store_path = os.path.join("user_store", f"{key_name}.json") store_path = os.path.join("user_store", f"{key_name}.json")
with open(store_path, "r") as file: with open(store_path, "r") as file:
data = json.load(file) data = json.load(file)
acct = w3.eth.account.from_key(data["private_key"]) acct = w3.eth.account.from_key(data["private_key"])
to = acct.address to = acct.address
token_transfer.to_address = to voucher_transfer.to_address = to
elif str(cmd.t).startswith("AddressAgent"): elif str(cmd.t).startswith("AddressAgent"):
to = "0x" + str(cmd.t).split(":")[1] to = "0x" + str(cmd.t).split(":")[1]
token_transfer.to_address = to voucher_transfer.to_address = to
else: else:
raise ValueError( raise ValueError(
f"Invalid command: {cmd.t}. Expected 'NameAgent' or 'AddressAgent'." f"Invalid command: {cmd.t}. Expected 'NameAgent' or 'AddressAgent'."
@ -680,7 +708,7 @@ def voucher_transfer_handler(cmd):
custodial_address = find_custodial_address(key_name) custodial_address = find_custodial_address(key_name)
if custodial_address is not None: if custodial_address is not None:
is_custodial_address = True is_custodial_address = True
token_transfer.from_address = custodial_address voucher_transfer.from_address = custodial_address
else: else:
store_path = os.path.join("user_store", f"{key_name}.json") store_path = os.path.join("user_store", f"{key_name}.json")
with open(store_path, "r") as file: with open(store_path, "r") as file:
@ -694,10 +722,10 @@ def voucher_transfer_handler(cmd):
f"Invalid command: {cmd.t}. Expected 'NameAgent' or 'AddressAgent'." f"Invalid command: {cmd.t}. Expected 'NameAgent' or 'AddressAgent'."
) )
amount_transfered = value / 10**6 amount_transfered = value / pow(10, voucher_transfer.decimals)
if is_custodial_address: if is_custodial_address:
tracking_id = do_custodial_token_transfer(token_transfer) tracking_id = do_custodial_token_transfer(voucher_transfer)
if tracking_id is not None: if tracking_id is not None:
message = f"Transfered {amount_transfered} {voucher_name} to {to} " message = f"Transfered {amount_transfered} {voucher_name} to {to} "
printMessage(message) printMessage(message)
@ -706,7 +734,7 @@ def voucher_transfer_handler(cmd):
command = ( command = (
f"cast send --private-key {from_private_key} " f"cast send --private-key {from_private_key} "
f"--rpc-url {rpc} " f"--rpc-url {rpc} "
f"{token_transfer.token_address} " f"{voucher_transfer.token_address} "
f'"transfer(address,uint256)" {to} {value}' f'"transfer(address,uint256)" {to} {value}'
f" --json " f" --json "
) )