У меня возникли проблемы с получением метода контракта 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
который я использую в своем проекте. Мне нравится иметь возможность делать что-то одно или из моего собственного контракта, и мне нравится лучше понимать правила владения и подписи вокруг него.transfer
transferFrom
Проблема решена благодаря помощи в отладке от 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