Вызов super.owner (). Transfer (msg.value) с ошибками. - PullRequest
0 голосов
/ 15 мая 2019

У меня есть контракт, унаследованный от Собственного контракта Open Zeppelin.В моем договоре есть метод payFees (), который, как ожидается, переведет средства владельцу договора.Определение payFees выглядит следующим образом:

function payFees() public payable {
        require(students.has(msg.sender), "DOES NOT HAVE STUDENT ROLE");
        if(this.areFeesEnough(msg.value))
        {
            super.owner().transfer(msg.value);
            studentFees[msg.sender] = true;
        }

    }

Я ожидаю, что вызов super.owner () вернет владельца контракта, учитывая, что owner() является функцией открытого просмотра в родительском контракте Ownable, который возвращаетвладелец.К сожалению, код не работает с ошибкой.

             TypeError: Member "transfer" not found or not visible after argument-dependent lookup in address.
            super.owner().transfer(msg.value);

Любая помощь приветствуется. Спасибо.

1 Ответ

2 голосов
/ 16 мая 2019

Предполагая, что используемый вами Ownable контракт похож на https://github.com/OpenZeppelin/openzeppelin-solidity/blob/master/contracts/ownership/Ownable.sol,, проблема в том, что owner() возвращает address, но, начиная с Solidity 0.5, вы можете только передать эфир на address payable.

Вы можете конвертировать сначала через uint160, что-то вроде этого:

address(uint160(_owner)).transfer(msg.value);

Обратите внимание, что вы можете просто использовать _owner напрямую или просто позвонить owner(). Не нужно звонить super.owner(), если вы не изменили owner в своем контракте и не должны вызывать родительский контракт.

...