Как указать другую версию Solidity в контракте Truffle?

У меня есть контракт, в котором я хочу использовать <address>.transfer(), который был выпущен в последней версии Solidity 0.4.10.

У меня есть первая строка моего контракта: pragma solidity 0.4.10;но когда я компилирую, я получаю Error: Source file requires different compiler version, что совершенно очевидно означает, что трюфель пытается скомпилировать мой контракт с другой версией Solidity. До сих пор использует 0.4.8.

Я установил 0.4.10вчера вечером и solc --versionпоказывает 0.4.10.

Итак, мой вопрос: как изменить версию Solidity в трюфельном проекте? Я просмотрел файл конфигурации и документы по трюфелю и не смог найти это. Я также не могу даже найти, где 0.4.8он установлен (предполагался в самом трюфеле, но его нет в списке трюфелей package.json).

какая у вас версия трюфеля?
Последняя версия от двух дней назад. 3.2.1
Боролся с тем же, нашел какое-нибудь решение?
Отправка пока не используется. Truffle скоро обновится.
Я тоже не мог понять. Как узнать, какая последняя версия solc используется в truffle.
Хм, кажется, он выдал мне ошибку, говоря что-то вроде "someMethod не поддерживается в версии xx"

Ответы (6)

В версии Truffle 5.0.0 (в настоящее время в бета-версии) вы можете указать версию Solidity в truffle.jsфайле конфигурации, например

module.exports = {
  networks: {
    ... etc ...
  },
  compilers: {
     solc: {
       version: <string>  // ex:  "0.4.20". (Default: Truffle's installed solc)
     }
  }
};

Это скопировано из сведений о выпуске здесь

Как-то спустя много времени после этого, и несмотря на наличие ``` Truffle v5.1.15 (ядро: 5.1.15) Solidity - 0.6.4 (solc-js) ``` и говорит так же, как в вашем файле, что моя версия solc должна быть 0.6.4, моя IDE по-прежнему считает, что я работаю с компилятором 0.4.17... У вас есть идеи, почему?

К сожалению, Truffle не позволяет вам выбрать другую версию компилятора, по-видимому, это результат того, что solc API еще не является стабильным, что затрудняет изменение версии.

Если вы запустите truffle version, он выведет как версию трюфеля, так и версию компилятора.

$ truffle version
Truffle v3.4.9 (core: 3.4.8)
Solidity v0.4.15 (solc-js)

При обновлении truffle вы получите самую последнюю версию, которую он поддерживает. Он имеет тенденцию несколько отставать от самого solc, поскольку для реализации последней версии требуется время, хотя в последнее время они были быстрее.

Я получаю только одну строку, когда я бегу $ truffle version. Это:Truffle v2.1.2
Тогда печать версии Solidity должна быть более поздней функцией. Почему бы не обновиться до трюфеля 3?
Я обновился до трюфеля 3. Теперь он показывает мою версию солидности :)

Начиная с truffle v5.2.0, вы можете разрешить компиляцию Truffle на основе выражений прагмы каждого файла Solidity. Единственное, что нужно сделать, это написать следующее в файле truffle-config.js :

module.exports = {
  compilers: {
    solc: {
      version: “pragma”
    }
  },
  // … the rest of your config goes here
};

Затем Truffle проверит каждый файл Solidity в проекте на наличие выражения прагмы и скомпилирует его на основе выражения, упомянутого в каждом из них.

Источник: https://www.trufflesuite.com/blog/take-a-dive-into-truffle-5#pragma-compilation

Для этого вам придется обновить свой трюфель. Я ответил, как обновить ваш трюфель здесь .

Все ответы спорны выше.

Добавьте вторую строку в файл truffle-config.

Где написано версия: "XXX"

Добавьте запятую, затем скопируйте и вставьте без запятой на следующую строку. Теперь ваша конфигурация должна выглядеть так:

версия: "ХХХ",

версия: "ГГГ"

Не ставьте запятую перед вторым. Сохраните изменения.

Теперь попробуйте скомпилировать. Он будет использовать ОБЕ версии. Аккуратный трюк, да? :D

*** Это работает только в трюфеле 5 и выше, но вы можете указать более низкие версии, например 4.

в версии 2022.6 truffle 5.x+ можно указать версию компилятора. например

По умолчанию версия solc 0.4.x, можно сделать 0.8.x


$ cat truffle-config.js

module.exports = {
  networks: {
    development: {
      host: "127.0.0.1",
      port: 8545,
      network_id: "*"
    },
  },
  // here you can speicify the compiler version
  // by default , solc version is 0.4.x 
  compilers: {
    solc: {
      version: "^0.8.0",
    }
  }
};

и при первом запуске truffle migrateвы можете увидеть, что truffle загрузил компилятор 0.8.x, например

$ truffle migrate --network development --verbose-rpc --interactive

Compiling your contracts...
===========================
✓ Fetching solc version list from solc-bin. Attempt #1
✓ Downloading compiler. Attempt #1.
✓ Fetching solc version list from solc-bin. Attempt #1
> Compiling ./contracts/MyTestNft.sol
> Artifacts written to /mnt/d/workspace/test_erc_721/build/contracts
> Compiled successfully using:
   - solc: 0.8.15+commit.e14f2714.Emscripten.clang

см.: https://trufflesuite.com/docs/truffle/reference/configuration/

пример компиляции из официального документа:

module.exports = {
  compilers: {
    solc: {
      version: <string>, // A version or constraint - Ex. "^0.5.0"
                         // Can be set to "native" to use a native solc or
                         // "pragma" which attempts to autodetect compiler versions
      docker: <boolean>, // Use a version obtained through docker
      parser: "solcjs",  // Leverages solc-js purely for speedy parsing
      settings: {
        optimizer: {
          enabled: <boolean>,
          runs: <number>   // Optimize for how many times you intend to run the code
        },
        evmVersion: <string> // Default: "istanbul"
      },
      modelCheckerSettings: {
        // contains options for SMTChecker
      }
    }
  }
}