Erdpy: транзакция выпуска токена завершилась с ошибкой с кодом: internal_issue
Я пытаюсь выполнить транзакцию выдачи токена ESDT, используя следующий код Python
from erdpy.accounts import Account, Address
from erdpy.proxy import ElrondProxy
from erdpy.transactions import BunchOfTransactions
from erdpy.transactions import Transaction
from erdpy.wallet import signing
TOKEN_NAME = b"Cowdings"
TOKEN_SYMBOL = b"MOO"
DECIMALS = 18
SUPPLY = 1000 * 10**DECIMALS
def hex_string(s: str) -> str:
assert type(s) == bytes, "Make sure everything is bytes data or utf-8 encoded"
return hexlify(s).decode("ascii")
def hex_int(i: int) -> str:
assert type(i) == int, "Make sure everything is bytes data or utf-8 encoded"
return hex(i)[2:]
proxy = ElrondProxy("https://devnet-gateway.elrond.com")
sender = Account(pem_file="test-wallet.pem")
sender.sync_nonce(proxy)
tx = Transaction()
tx.nonce = sender.nonce
tx.value = str(0.05 * 10**18) # 0.05 EGLD, as required for issuing a token according to the documentation
tx.sender = sender.address.bech32()
# System contract address to issue out the new token as per
# https://docs.elrond.com/developers/esdt-tokens/#issuance-of-fungible-esdt-tokens
tx.receiver = "erd1qqqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqzllls8a5w6u"
tx.gasPrice = 1000000000
tx.gasLimit = 50000
tx.data = f"issue" \
f"@{hex_string(TOKEN_NAME)}" \
f"@{hex_string(TOKEN_SYMBOL)}" \
f"@{hex_int(SUPPLY)}" \
f"@{hex_int(DECIMALS)}"
tx.chainID = "D" # For devnet https://devnet-gateway.elrond.com/network/config
tx.version = 1
tx.signature = signing.sign_transaction(tx, sender)
tx.send(proxy)
Это не с
ProxyRequestError: Proxy request error for url [https://devnet-gateway.elrond.com/transaction/send]:
{
'data': None,
'error': 'transaction generation failed: invalid value',
'code': 'internal_issue'
}
1 ответ
Относительно ошибки в вашем первом вопросе:
Ты используешь
str(0.05 * 10**18)
чтобы получить строку для значения.
Однако на самом деле это выводит значение в научной нотации, чего не ожидает блокчейн.
Преобразование его в int сначала приведет к правильному выводу, поэтому вы можете использовать
str(int(0.05 * 10**18))
вместо :)
Поэтому полный код должен выглядеть так:
from erdpy.accounts import Account, Address
from erdpy.proxy import ElrondProxy
from erdpy.transactions import BunchOfTransactions
from erdpy.transactions import Transaction
from erdpy.wallet import signing
proxy = ElrondProxy("https://devnet-gateway.elrond.com")
sender = Account(pem_file="test-wallet.pem")
sender.sync_nonce(proxy)
tx = Transaction()
tx.nonce = sender.nonce
tx.value = str(int(0.05 * 10**18)) # 0.05 EGLD, as required for issuing a token according to the documentation
tx.sender = sender.address.bech32()
# System contract address to issue out the new token as per
# https://docs.elrond.com/developers/esdt-tokens/#issuance-of-fungible-esdt-tokens
tx.receiver = "erd1qqqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqzllls8a5w6u"
tx.gasPrice = 1000000000
tx.gasLimit = 50000
tx.data = ""
tx.chainID = "D" # For devnet https://devnet-gateway.elrond.com/network/config
tx.version = 1
tx.signature = signing.sign_transaction(tx, sender)
tx.send(proxy)