Как проверить функцию оплачиваемую или нет? - PullRequest
0 голосов
/ 01 мая 2019

Как проверить код (на стороне Solidity или / и стороне Web3) перед функцией контракта вызова, эта функция подлежит оплате или нет?

Например, я нашел это сегодня в токене EURS

function transfer (address _to, uint256 _value)
public payable returns (bool success);

Это не стандартная функция переноса erc20 как подлежащая оплате !!!И это не стандартная логика создания ошибок в моем приложении, если пользователь использует токен EURS.

Это стандарт

function transfer(address to, uint tokens) public returns (bool 
success);

Так что мне нужно или переопределить это не стандартная передача в моем приложениисторона контракта или, в худшем случае, запретите такие токены на стороне внешнего интерфейса.

Ответы [ 2 ]

0 голосов
/ 05 мая 2019

В одной строке: нет способа проверить извне или изнутри солидности, если функция подлежит оплате или нет, не зная abi / interface .

Что подлежит оплате?

  • К оплате работает как любая другая modifier в Солидности.Он запускается непосредственно перед выполнением функции, к которой он применяется.
  • Для получения эфира требуется кредиторская задолженность.Если вы отправляете эфир в транзакции в функцию, не подлежащую оплате, транзакция отменяется.
0 голосов
/ 01 мая 2019

Чтобы ответить на ваш вопрос в одной строке -:

Любая функция, помеченная как подлежащая оплате, может считаться получающей эфиры.

function testPayable() external payable {...}

Вышеуказанная функцияподлежит оплате и, следовательно, может получать.

Но не заблуждайтесь оплачиваемое ключевое слово используется только для получения эфиров, а не токенов ERC20.

Так что в вашем случае, насколько яМожно увидеть, что передаточная функция помечена как подлежащая оплате, что не должно быть в случае, если это токен ERC20.

Что-то звучит подозрительно для меня, не правда ли?

...