Ошибка ParserError Solidity: Ожидается ';' но получил "есть"

Я учился основательности, но я все еще новичок. В настоящее время я делаю токен ERC20, но у меня возникают некоторые трудности с этим. Вот что у меня есть.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol";

import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol";

Contract GToken is ERC20 {
    constructor(string memory name, string memory symbol)
        ERC20("GToken", "GTKN") public {
            _mint(msg.sender, 1000000 * 10 ** uint(decimals));
        
}

Ошибка, которую я получаю при попытке скомпилировать контракт, выглядит следующим образом:

ParserError: ожидается ';' но получил "есть" - ›GToken.sol: 7: 21: | 7 | Контракт GToken соответствует стандарту ERC20 {| ^^


person Tarxan    schedule 01.06.2021    source источник


Ответы (1)


В вашем коде есть две синтаксические ошибки:

  • contract должен быть строчными, а не Contract
  • constructor отсутствует закрывающая скобка }

Тогда вы столкнетесь с ошибкой преобразования типа с uint(decimals). Когда вы смотрите на удаленный контракт, вы видите, что decimals () - это функция просмотра, а не свойство. Поэтому вы должны читать его значение, как если бы вы вызывали функцию: decimals().


В совокупности все вместе:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol";
// removed the IERC20 import, not needed in this context

contract GToken is ERC20 {
    constructor(string memory name, string memory symbol) ERC20("GToken", "GTKN") public {
        _mint(msg.sender, 1000000 * 10 ** decimals()); // calling the `decimals()` function
    }
}
person Petr Hejda    schedule 01.06.2021
comment
Спасибо, что исправили эту проблему. - person Tarxan; 02.06.2021