Невозможно передать токены ERC20 из контракта

У меня возникли проблемы с получением метода контракта Solidity для передачи токенов ERC20 с адреса A на B, предполагая, что B вызвал approveвне контракта и настроил достаточно allowanceдля A. allowanceЗначение печатается нормально внутри контракта, но происходит transferFromсбой. Я что-то упускаю в том, как настраиваются права собственности и подписи. У меня есть обходной путь, когда то же самое transferFromработает вне контракта, но я хотел бы сделать это внутри.

Я создал образец репозитория с тестами трюфелей и задачей, чтобы описать проблему подробнее:

https://github.com/PulseBlockchain/oz-sample-app/issues/1

Это отрывок из более крупного проекта, где у меня есть аналогичная проблема.

Это похоже на этот вопрос, утверждение ERC20 и передача из контракта , за исключением того, что я делаю approveснаружи и хочу, чтобы контракт просто выполнялся transferFrom. Похоже, есть способ сделать это transferиз контракта, подобного этому контракту Open Zeppelin ,CrowdSale который я использую в своем проекте. Мне нравится иметь возможность делать что-то одно или из моего собственного контракта, и мне нравится лучше понимать правила владения и подписи вокруг него.transfertransferFrom

Ответы (2)

Проблема решена благодаря помощи в отладке от Gonçalo Sá . Вот исправление фиксации tl; dr: вы должны approveсначала allowanceобратиться к адресу вызова контракта tranferFrom, а затем передать значение на конечный адрес назначения.

Вы можете страдать от ошибки пакетного переполнения. https://medium.com/@TokPie/erc20-tokens-under-attack-from-new-batchoverflow-bug-while-tokpie-remains-safe-b59dd716d469