Ошибка определения контракта Solidity / Ethereum

Я заключаю контракт в Solidity, и после компиляции я получаю следующую ошибку: «Ожидаемая прагма, директива импорта или определение контракта / интерфейса / библиотеки. function MyToken () {^ 'Что вызывает это?

pragma solidity ^0.14.18;
contract MyToken {
/* This creates an array with all balances */
mapping (address => uint256) public balanceOf;
}

function MyToken() {
balanceOf[msg.sender] = 21000000;
}

/* Send coins */
function transfer(address _to, uint256 _value) {
/* Add and subtract new balances */
balanceOf[msg.sender] -= _value;
balanceOf[_to] += _value;
}

function transfer(address _to, uint256 _value) {
/* Check if sender has balance and for overflows */
require(balanceOf[msg.sender] >= _value && balanceOf[_to] + _value >= balanceOf[_to]);
/* Add and subtract new balances */
balanceOf[msg.sender] -= _value;
balanceOf[_to] += _value;
}

/* Initializes contract with initial supply tokens to the creator of the contract */
function MyToken(uint256 initialSupply, string tokenName, string tokenSymbol, uint8 decimalUnits) {
balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens
name = tokenName; // Set the name for display purposes
symbol = tokenSymbol; // Set the symbol for display purposes
decimals = decimalUnits; // Amount of decimals for display purposes
}

event Transfer(address indexed from, address indexed to, uint256 value);

/* Notify anyone listening that this transfer took place */
        Transfer(msg.sender, _to, _value);

person MadeBy Alvaropop    schedule 06.06.2021    source источник


Ответы (1)


pragma solidity ^0.14.18;

Версии 0.14.18 нет, последняя на данный момент (июнь 2021 г.) 0.8.4. Я предполагаю, что это просто опечатка, и ваш код определяет ^0.4.18, потому что вы используете функцию имени контракта в качестве конструктора (устарело в пользу функции constructor() в 0.5), и поскольку сообщение об ошибке Expected pragma ... появляется после установки на ^0.4.18.


Ожидаемая прагма, директива импорта или определение контракта / интерфейса / библиотеки. функция MyToken () {^

Это вызвано избыточной закрывающей скобкой } после сопоставления.

contract MyToken {
    /* This creates an array with all balances */
    mapping (address => uint256) public balanceOf;
}  // <-- here is the redundant closing brace

function MyToken() {
    balanceOf[msg.sender] = 21000000;
}

// rest of your code

Вы можете исправить это, удалив лишнюю закрывающую скобку } после сопоставления. Или лучше переместить его в последнюю строку, потому что в контракте отсутствует закрывающая фигурная скобка в конце.

contract MyToken {
    /* This creates an array with all balances */
    mapping (address => uint256) public balanceOf;

    function MyToken() {
        balanceOf[msg.sender] = 21000000;
    }

    // ... rest of your contract
}  // <-- moved to the end of the contract

Примечание. В вашем коде еще несколько синтаксических ошибок, обратите внимание на сообщения об ошибках и предупреждения компилятора.

person Petr Hejda    schedule 06.06.2021
comment
Теперь я получаю следующую ошибку: "Ожидаемый идентификатор, получен перенос" eth_compileSolidity "(msg.sender, _to, _value); ^ ' - person MadeBy Alvaropop; 06.06.2021
comment
Да, это одна из многих других ошибок в вашем коде. Создание события (в вашем случае событие Transfer()) должно происходить внутри функции. Затем вы столкнетесь с несколькими конструкторами, несколькими определениями одной и той же transfer() функции (включая ее параметры) и назначением нескольким необъявленным переменным из второго конструктора ... Прочтите docs, есть множество фрагментов с правильным синтаксисом, которые могут помочь вам в качестве вдохновения и показать что вы пробовали до сих пор, задавая вопрос по SO. - person Petr Hejda; 06.06.2021