почему этот контракт может успешно выполнить перевод ()

Я читаю исходный код этого токена erc20:

https://etherscan.io/address/0xfdfd5db568f2ecf9b06a16116b9201b0500735b4#code

код такой:

contract VelixIDToken is ReleasableToken, BurnableToken {
    ...

    function transfer(address _to, uint _value) public returns (bool success) {
        // Call StandardToken.transfer()
        CanTransferChecked(released || transferAgents[msg.sender], msg.sender, transferAgents[msg.sender], released);
        if (released || transferAgents[msg.sender]) {
            return super.transfer(_to, _value);
        } else {
            return false;
        }
    }

    ...
}

contract ReleasableToken is ERC20, Ownable {
    ...

    function transfer(address _to, uint _value) public returns (bool success) {
        // Call StandardToken.transfer()
        CanTransferChecked(released || transferAgents[msg.sender], msg.sender, transferAgents[msg.sender], released);
        if (released || transferAgents[msg.sender]) {revert();}
        return super.transfer(_to, _value);
    }

    ...
}

в моем понимании, передача токена() никогда не может произойти, releasedсейчас это ложь, поэтому в VelixIDToken только TransferAgent может пройти проверку:

if (released || transferAgents[msg.sender]),

ну, в ReleasableToken вызов вернется, потому что:

if (released || transferAgents[msg.sender]) {revert();}.

но я вижу успешную передачу токена на etherscan:

https://etherscan.io/tx/0xfa76397fc5d1d5e155fa969f56095d4ecdad4dc90a64798ca79fa2773923fb07

так где я не прав?

пс. Я даже задался вопросом, может ли исходный код, загруженный на etherscan, быть неверным?

Ответы (1)

Я считаю, что это super.transferотносится к transferреализации в BurnableToken, а не transferв ReleasableToken. Из https://solidity.readthedocs.io/en/v0.4.24/contracts.html#multiple-inheritance-and-linearization :

Особенно важен порядок, в котором базовые классы даны в директиве is: вы должны перечислить прямые базовые контракты в порядке от «наиболее похожих на базовые» до «наиболее производных».