-
#1
Всем доброго времени суток. Возникла проблема при отправке USDT со счета ERC-20, транзакция не уходит. Ошибка возникает сегодня уже не первый раз (Warning: Error encountered during contract execution [out of gas]
ERC-20 Token Transfer Error (unable to locate corresponding Transfer Event Logs), Check with sender.
Скрин прикрепил. Может кто-то сталкивался с подобным? ETH для исполнения транзакции вроде достаточно. Отправка идет с аппаратного кошелька (Ledger).
-
photo_2022-12-21 17.24.39.jpeg
72,3 КБ · Просмотры: 63
-
#2
Через Ledger Live транзакция создается? лимит газа там можно задавать?
P.S. сам USDT ERC-20 в Ledger не пользовался, но судя по сообщению вроде бы очевидная проблема
-
#3
Попробовал — можно лимит газа в LL самому выставить. Попробуй в два раза увеличить
-
#4
Попробовал — можно лимит газа в LL самому выставить. Попробуй в два раза увеличить
Спасибо, это сработало. Я думал, что затраты на транзакцию регулируются прямым увеличением стоимости транзакции в ETH и ставил самую быструю, но этого оказалось недостаточно.
Непонятно только, как управлять этим лимитом (Gas) — он будет всегда по повышенному лимиту списываться? Плохо понимаю эту связь Gas и ETH.
-
#5
Непонятно только, как управлять этим лимитом (Gas) — он будет всегда по повышенному лимиту списываться? Плохо понимаю эту связь Gas и ETH.
это лучше погуглить и почитать. Есть количество газа, необходимое для транзакции (стандартно 21000) и есть текущая стоимость газа, измеряется в Gwei
текущая стоимость газа здесь:
если текущая стоимость транзакций <1 USD, не вижу смысла экономить — можно и в два раза дороже заплатить, когда-то транзакции и 20 USD стоили, вот тогда можно было задумываться и ждать когда
стоимость газа дешевле будет
-
#6
Спасибо, это сработало. Я думал, что затраты на транзакцию регулируются прямым увеличением стоимости транзакции в ETH и ставил самую быструю, но этого оказалось недостаточно.
Непонятно только, как управлять этим лимитом (Gas) — он будет всегда по повышенному лимиту списываться? Плохо понимаю эту связь Gas и ETH.
Каждая функция или математическая операция в смарт контракте стоит определённого количества единиц газа. Стоимость одной единицы вы устанавливаете в гвеях. USDT — это токен, а значит, смарт-контракт. Прикол в том, что в разное время обычный трансфер усдт будет тратить разное количество единиц газа из-за измений в логике смарт контракта. Лимит нужен для того, чтобы транзакция не могла потратить больше единиц газа, чем желает пользователь, например баг в контракте может потратить безумное количество. Транзакция трансфера токена потратит столько единиц, сколько ей нужно в данный момент, не больше, поэтому лимит можно смело задирать. То есть лимит не влияет никак на конечную комиссию. Для usdt ставьте 100000 и не парьтесь. К сожалению, невозможно точно определить, сколько газа сожрет транза, это вы увидите только по факту выполнения этой самой транзакции. Какие-то кошельки прикидывают более менее правильно и накидывают лимита сверху, какие-то нет. В данном случае столкнулись два фактора — кривой леджер лайв, который очевидно хреново прикидывает лимит, и непредсказуемость комиссий в поделке Витальки
-
#7
это лучше погуглить и почитать. Есть количество газа, необходимое для транзакции (стандартно 21000) и есть текущая стоимость газа, измеряется в Gwei
текущая стоимость газа здесь:если текущая стоимость транзакций <1 USD, не вижу смысла экономить — можно и в два раза дороже заплатить, когда-то транзакции и 20 USD стоили, вот тогда можно было задумываться и ждать когда
стоимость газа дешевле будет
21000 — это только для трансфера эфира с адреса на адрес, для смарт контрактов всегда больше, чаще всего намного больше
-
#8
Каждая функция или математическая операция в смарт контракте стоит определённого количества единиц газа. Стоимость одной единицы вы устанавливаете в гвеях. USDT — это токен, а значит, смарт-контракт. Прикол в том, что в разное время обычный трансфер усдт будет тратить разное количество единиц газа из-за измений в логике смарт контракта. Лимит нужен для того, чтобы транзакция не могла потратить больше единиц газа, чем желает пользователь, например баг в контракте может потратить безумное количество. Транзакция трансфера токена потратит столько единиц, сколько ей нужно в данный момент, не больше, поэтому лимит можно смело задирать. То есть лимит не влияет никак на конечную комиссию. Для usdt ставьте 100000 и не парьтесь. К сожалению, невозможно точно определить, сколько газа сожрет транза, это вы увидите только по факту выполнения этой самой транзакции. Какие-то кошельки прикидывают более менее правильно и накидывают лимита сверху, какие-то нет. В данном случае столкнулись два фактора — кривой леджер лайв, который очевидно хреново прикидывает лимит, и непредсказуемость комиссий в поделке Витальки
Спасибо за детальные уточнения. Сейчас еще одну отправлял, тоже токены USDT. Газ поставил 75 000 (изначальный в Леджере был 39000), так pending висит уже 15 минут на момент написания, т.е. не происходит подтверждение транзакции, но и ошибки не возникает.
Последнее редактирование: 21 Дек 2022
-
#9
Спасибо за детальные уточнения. Сейчас еще одну отправлял, тоже токены USDT. Газ поставил 75 000 (изначальный в Леджере был 39000), так pending висит уже 15 минут на момент написания, т.е. не происходит подтверждение транзакции, но и ошибки не возникает.
Вот скорость обработки как раз от цены газа зависит, чем больше гвей, тем приоритетнее
-
#10
А в сети TRC нет возможности отправить? Там вроде как подешевле…
-
#11
А в сети TRC нет возможности отправить? Там вроде как подешевле…
Да сейчас в троне чет тоже подорожало
-
#13
Да сейчас в троне чет тоже подорожало
вчера выносил. взяли 0.6$ в тронах… вроде как не тема для выхода в окно.
з.ы. возможно я нуб, но вроде как от суммы не зависит. не?
з.з.ы. выносил TRC20.
-
#14
вчера выносил. взяли 0.6$ в тронах… вроде как не тема для выхода в окно.
з.ы. возможно я нуб, но вроде как от суммы не зависит. не?
з.з.ы. выносил TRC20.
Не зависит
- Version: 4.0.0
- Python: 3.6
- OS: win8.1
I try to send some EOS from one address to another,below are the codes:
from ethtoken.abi import EIP20_ABI
from web3 import Web3, HTTPProvider
infura_provider = HTTPProvider('https://mainnet.infura.io/CMI5Z7n7hAy8CP7nx95s')
w3 = Web3(infura_provider)
w3.eth.enable_unaudited_features()
contract_Address=w3.toChecksumAddress("0x86fa049857e0209aa7d9e616f7eb3b3b78ecfdb0")
unicorns = w3.eth.contract(contract_Address, abi=EIP20_ABI)
nonce = w3.eth.getTransactionCount('0x030eC1E9E2AfA4A59a7C56F2B761505E1a414b45')
unicorn_txn = unicorns.functions.transfer(
'0xFe0196504dF34c4Bf30D3089EfFf86cFe3B34617',
1,
).buildTransaction({
'chainId': 1,
'gas': 200000,
'value': int(0.1*(10**18)), #EOS:18 decimals
'gasPrice': w3.toWei('4', 'gwei'),
'nonce': nonce,
})
private_key = 'my private key'
signed_txn = w3.eth.account.signTransaction(unicorn_txn, private_key=private_key)
TxHash=w3.eth.sendRawTransaction(signed_txn.rawTransaction)
print(TxHash.hex())
Anyone know how to fix this?Thanks!
Содержание
- Отправка ERC-токенов в MEW в холодном режиме
- Как добавить нужный токен в интерфейс MyEtherWallet, работающий в холодном режиме?
- Некоторые проблемы, возникающие при отправке транзакций в MEW
- Как определить, что передача токена ERC20 прошла успешно?
Отправка ERC-токенов в MEW в холодном режиме
Для обеспечения максимальной степени безопасности при работе с криптовалютами нужно использовать аппаратные кошельки или программные wallets в холодном режиме.
Для работы с биткоинами можно использовать программный Cold-кошелек Electrum, а для работы с ETH, ETC, MATIC, ELLA, CLO, UBQ, EGEM и другими активами — MewEtherWallet в холодном режиме (к сожалению, он поддерживается в версиях MEW до 5.8.9 включительно, в шестой версии cold-режим не предусмотрен).
Чтобы использовать ERC-токены в MyEtherWallet, работающем в холодном режиме, нужно получить к ним доступ, прописав информацию о контрактном адресе соответствующего актива.
В данной статье этот процесс рассматривается на примере отправки ERC-20 токенов USDT в программе MEW версии 5.8.6.
Как добавить нужный токен в интерфейс MyEtherWallet, работающий в холодном режиме?
Чтобы отправить токены ERC-стандарта с помощью кошелька MyEtherWallet в холодном режиме нужно:
- распаковать кошелек MyEtherWallet, поддерживающий работу в холодном режиме на онлайн и оффлайн-компьютер (последняя совместимая версия MEW 5.8.6);
- открыть MEW на обеих компьютерах;
- на онлайн-компьютере открыть свой адрес кошелька в обозревателе сети Ethereum, узнать точное название отправляемого токена, его контрактный адрес, десятичное значение, а также свой баланс, скопировать эту информацию в текстовый файл для переноса на оффлайн-компьютер;
Баланс нужного токена можно очень быстро найти, введя его название в строке поиска обозревателя блокчейна Ethereum. Пример отображения баланса токенов USDT стандарта ERC-20 (2 монеты) на адресе Ethereum в обозревателе (эксплорере) etherchain:
Для настройки оффлайн-кошелька нужно нажать на название токена, после чего браузер перейдет в окно с детальной информацией о нем:
Из этого окна нужно скопировать адрес контракта (для USDT это 0xdAC17F958D2ee523a2206206994597C13D831ec7), десятичное значение (строка Decimals, для USDT равная шести).
- подготовить неподписанную оффлайн-транзакцию в программе MEW (раздел send-offline-helper) на онлайн-компьютере (подробнее этот процесс описан в статье Работа с кошельком MEW в «холодном» режиме), скопировать файл generated-offline-tx-*.json на флешку для переноса на оффлайн-компьютер;
- на оффлайн-компьютере открыть кошелек MEW (открыть файл index.html):
- войти в свой кошелек и перейти на поле Tokens и нажать на меню Custom Tokens:
- в выпадающем окошке Add Custom Tokens ввести информацию о контрактном адресе токена (для USDT — 0xdAC17F958D2ee523a2206206994597C13D831ec7), его символ (например, USDT) и значение Decimals (для USDT — 6), а затем сохранить введенные значения (кнопка Save):
- после этого в меню Send — Send Offline при выборе актива (меню Type) появится нужный токен:
- для подписи транзакции в оффлайн-кошельке (холодном) открывается файл generated-offline-tx-*.json (кнопка Import JSON), вводится информация о ее размере (сумме), величине Gas Limit, производится ее подписывание и сохранение (Generate Transaction — Download JSON) файла signedTransactionObject-*.json для переноса на онлайн-компьютер. При выборе величины Gas Limit желательно установить значение большее, чем программа выдает по умолчанию (21000), например, установить лимит газа, равный 80000. В противном случае могут возникнуть ошибки, например, транзакция может быть отброшена, а потраченный газ сожжен и списан с баланса (об этом подробнее ниже). Сеть все равно использует текущее значение Gas Limit, неизрасходованный газ вренется на баланс кошелька. При желании сэкономить на стоимости транзакции можно уменьшить значение Gas Price (in Gwei), но при этом время обработки транзакции может очень увеличиться (подробнее в статье Сколько времени может длиться транзакция в сети Ethereum?);
- на онлайн-кошельке открывается подготовленный шагом ранее файл signedTransactionObject-*.json (кнопка Upload JSON File), нажимается кнопка Continue, проверяется ее содержимое и нажимается кнопка Send.
При отправке ERC-токенов в строке получателя отображается контрактный адрес отправляемого токена (для USDT — 0xdAC17F958D2ee523a2206206994597C13D831ec7):
Посмотреть адрес получателя активов можно на вкладке Signed Transaction, нажав кнопку Raw Transaction (он отображается без приставки 0x, в данном случае это адрес 0xea674fdde714fd979de3edf0f56aa9716b898123, который выделен серым):
В случае успеха транзакция будет обработана и записана в блокчейн, ход ее выполнения можно отследить в обозревателе, например, на etherscan:
По завершению выполнения транзакции в окне обозревателя появится статус Success:
Некоторые проблемы, возникающие при отправке транзакций в MEW
Если при попытке отправить транзакцию в MEW возникает ошибка
Error: Returned error: intrinsic gas too low
Иногда случается, что кошелек отправляет транзакцию в сеть, но выставленный лимит газа слишком мал, из-за чего она отбрасывается с ошибкой Error: out of gas или Error: Transaction has been reverted by the EVM: …
Обозреватель при этом отображает статус Fail:
Warning! Error encountered during contract execution [Out of gas]
ERC-20 Token Transfer Error (Unable to locate corresponding Transfer Event Logs), Check with Sender.
Самое обидное в этом случае то, что с баланса отправителя впустую списывается потраченный газ. В связи с этим перед отправкой лучше изучить в обозревателе последние успешно обработанные транзакции, подобные той, которая планируется к исполнению, обращая внимание на Gas Limit и Gas Price.
Размер Gas Price можно немного уменьшить в ущерб времени исполнения транзакции, а величину Gas Limit следует установить такой же, как у последних успешных транзакций отправляемого ERC-токена.
В случае если возникает ошибка:
нужно заново открыть оффлайн-кошелек MEW и опять создать транзакцию.
Источник
Как определить, что передача токена ERC20 прошла успешно?
Я собрал код для отправки токенов с помощью web3.js 1.0.0-beta46, а затем решил попробовать отправить больше токенов, чем было в моем кошельке. к моему большому удивлению, транзакция прошла успешно, и я получил txid, но, конечно, перевод не удался
вот попытка (на Ropsten):
теперь мой вопрос: как я могу узнать, когда передача прошла успешно? или в этом отношении, как я могу получить сообщение об ошибке? etherscan просто указывает:
ERC-20 Token Transfer Error (Unable to locate Corresponding Transfer Event Logs), Check with Sender
Самый простой и понятный способ — проверить баланс отправителя и получателя до и после перевода.
Теперь о неудачном переводе, после прочтения договора я заметил, что в случае недостаточности средств вы просто возвращаете false, что делает транзакцию действительной. Что вам нужно сделать, так это отменить транзакции, используя require для проверки. Таким образом, EVM отменит недействительную транзакцию, которая будет распознана etherscan и покажет, что транзакция не удалась.
спасибо никос. контракт опубликован на github, а не мой: github.com/uzyn/ERC20-TST, но я создам проблему с вашим предложением. так что, если контракт правильно требуется в случае недостаточности средств, моя транзакция просто не удастся? или это все равно удастся, и мне придется проверить баланс?
С правильным require транзакция завершится неудачно/отменится. Эта ошибка будет возвращена в вашем коде.
Источник
Вопрос скриншота застройки города:
Я просто отправил токены, а затем выполнил передачу токенов, результаты показали следующую ошибку:
Warning! Error encountered during contract execution [Out of gas] ERC-20 Token Transfer Error (Unable to locate Corresponding Transfer Event Logs), Check with Sender.
Кажется, что газа недостаточно, поэтому увеличьте лимит газа, но в конце концов он все равно не работает. Установите его с 21000 по умолчанию на 25000, а затем увеличьте его до 50 000. Наконец, после того, как газ израсходован, это вызывает сбой.
Возможные причины и решения:
Причина: я попытался перевести все токены сразу после выпуска монет.
Решение: сначала переведите менее 1% монет, а затем переведите остальные, например, переведите 1 на выход. (Так было решено мое)
Кажется, у этой ошибки есть другие причины, но я с ней не сталкивался, поэтому не буду об этом говорить.
Наконец, я опубликовал для вашей справки другие сообщения с обсуждением этой проблемы.Некоторые из них решили проблему так же, как и я, и все прошло успешно. Затем я поискал несколько токенов erc20. Судя по их записям, все они передали небольшое количество токенов после выпуска токенов перед передачей остальных.
Почтовый адрес:https://bitcointalk.org/index.php?topic=2737894.0
EtherScan.io is showing error: The ERC-20 Token Transfer might have Failed (ErrCode: unable to locate corresponding Transfer event log), check with sender.
Transactions are successful but users are not receiving tokens. Can someone help to explain what error is hiding?
Out of gas error? But not all provided gas was used.
Transaction example: https://etherscan.io/tx/0x20081e3012905d97961c2f1a18e1f3fe39f72a46b24e078df2fe446051366dca
asked Jan 12, 2018 at 10:46
3
So this is how I debug these sorts of problems:
-
Click the contract address you sent to
-
Find a transaction WITHOUT a red/orange (!) symbol
-
Compare it to your failed one
-
Repeat for another one
Sometimes it’s the gas limit—it wants a higher gas limit like 200000. Sometimes there is no difference. If you can’t tell, your best bet is to reach out to the token creators and ask them. They hopefully have more specific troubleshooting tips for you.
answered Jan 21, 2018 at 17:01
tayvanotayvano
15.6k4 gold badges44 silver badges72 bronze badges
problem screenshot paste:
just sent COINS, and then made token transfer, the result is reported as follows:
Warning! Error during contract execution [Out of gas] erc-20 Token Transfer Error (Unable to locate and Corresponding Transfer Event Logs), Check with Sender.
looks like gas is not enough, so raise the gas limit, but it will not work in the end, from the default of 21000 to 25000 and then increase to 50000. At last, gas is always consumed, the prompt fails.
possible causes and solutions:
reason: just after the coin, I tried to turn all token out.
solution: transfer less than 1% out first, and then transfer the rest, such as 1 out first. (that’s how mine works)
There seems to be another reason for the
error, but I’ve missed it, so I’ll leave it at that.
other posts on this issue were posted at the end for your reference, and some of them came up with the same solution as mine and succeeded. Then I found several tokens of ERC20. According to their records, they all transferred a small amount of tokens after issuing COINS, and then transferred the rest.
post address: https://bitcointalk.org/index.php?Topic = 2737894.0