Не удается установить solc в Mac OS X

Я не могу установить solc в Mac OS X. Я пробовал следующее:

npm install solc 

/Users/punddalinni
└── solc@0.3.0-1 
npm WARN enoent ENOENT: no such file or directory, open '/Users/punddalinni/package.json'
npm WARN punddalinni No description
npm WARN punddalinni No repository field.
npm WARN punddalinni No README data
npm WARN punddalinni No license field.

Когда я вернусь к Гету и побегу

> eth.getCompilers()
[""]

Когда я попытался установить Solc, произошло следующее.

> admin.setSolc('/Users/punddalinni/node_modules/solc')
exec: "/Users/punddalinni/node_modules/solc": permission denied
    at InvalidResponse (<anonymous>:-81662:-57)
    at send (<anonymous>:-156322:-57)
    at setSolc (<anonymous>:-133322:-57)
    at <anonymous>:1:1

Я пытался следовать указаниям здесь, но он застрял на

brew install llvm --HEAD --with-clang

РЕДАКТИРОВАТЬ: включая содержимое package.json из solc на Mac.

{
  "_args": [
    [
      "solc",
      "/Users/punddalinni"
    ]
  ],
  "_from": "solc@latest",
  "_id": "solc@0.3.0-1",
  "_inCache": true,
  "_installable": true,
  "_location": "/solc",
  "_nodeVersion": "4.0.0",
  "_npmOperationalInternal": {
    "host": "packages-13-west.internal.npmjs.com",
    "tmp": "tmp/solc-0.3.0-1.tgz_1457892692634_0.5487515390850604"
  },
  "_npmUser": {
    "email": "d11e9@turkd.net",
    "name": "d11e9"
  },
  "_npmVersion": "3.3.2",
  "_phantomChildren": {},
  "_requested": {
    "name": "solc",
    "raw": "solc",
    "rawSpec": "",
    "scope": null,
    "spec": "latest",
    "type": "tag"
  },
  "_requiredBy": [
    "#USER"
  ],
  "_resolved": "https://registry.npmjs.org/solc/-/solc-0.3.0-1.tgz",
  "_shasum": "523e79db0c69070f91fcbf408e8c7d0c93be176c",
  "_shrinkwrap": null,
  "_spec": "solc",
  "_where": "/Users/punddalinni",
  "author": {
    "name": "chriseth"
  },
  "bugs": {
    "url": "https://github.com/chriseth/browser-solidity/issues"
  },
  "dependencies": {},
  "description": "Solidity compiler",
  "devDependencies": {},
  "directories": {},
  "dist": {
    "shasum": "523e79db0c69070f91fcbf408e8c7d0c93be176c",
    "tarball": "http://registry.npmjs.org/solc/-/solc-0.3.0-1.tgz"
  },
  "gitHead": "5ce686c8d33db78c8f1eb8e2318eefbc5151f0eb",
  "homepage": "https://github.com/chriseth/browser-solidity#readme",
  "keywords": [
    "compiler",
    "ethereum",
    "solidity"
  ],
  "license": "MIT",
  "main": "index.js",
  "maintainers": [
    {
      "name": "chriseth",
      "email": "c@ethdev.com"
    },
    {
      "name": "d11e9",
      "email": "d11e9@turkd.net"
    }
  ],
  "name": "solc",
  "optionalDependencies": {},
  "readme": "ERROR: No README data found!",
  "repository": {
    "type": "git",
    "url": "git+https://github.com/chriseth/browser-solidity.git"
  },
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "version": "0.3.0-1"
}

Любые идеи?

Ответы (2)

Я не был знаком с NPM, поэтому у меня были похожие проблемы. При простом запуске npm install solcбудет предпринята попытка установить локально, что может вызвать некоторые проблемы с разрешениями и связыванием — это, вероятно, причина проблемы.

Вместо этого установите solC глобально с помощью $ npm install -g solc(вы также можете попробовать $ npm install solc --global, поскольку я не уверен, какая из этих двух команд устранила мою проблему).

Если это установлено, проверьте, где оно было установлено, запустив, $ which solcjsчто должно дать что-то вроде/usr/local/bin/solcjs

Я обнаружил, что мне нужно также использовать Homebrew для установки/сборки solC, следуя инструкциям по установке. После того, как Brew был готов, я проверил, установлен ли solC с расширением $ which sol.

Скопируйте этот каталог, а затем, как только вы его запустите, geth consoleиспользуйте его в команде setSolc, например> admin.setSolc("/usr/local/bin/solc")

Если повезет, вы получите подтверждающее сообщение, и при следующем запуске > eth.getCompilers()результат должен быть примерно таким["Solidity"]

Ах ... вы используете это неправильно. Учебники Web3 не отражают этого, но есть разница между тем, как вы настраиваете Solidity для компиляции в web3 с компилятором, созданным из исходного кода (что предполагает web3), и пакетом npm (который не вращается в учебниках) . Чтобы все скомпилировалось, вам нужно следовать инструкциям на странице Browser-solidity:

https://github.com/chriseth/browser-солидность

Выдержка:

var solc = require('solc');
var input = "contract x { function g() {} }";
var output = solc.compile(input, 1); // 1 activates the optimiser

for (var contractName in output.contracts) {
    // code and ABI that are needed by web3
    console.log(contractName + ': ' + output.contracts[contractName].bytecode);
    console.log(contractName + '; ' + JSON.parse( output.contracts[contractName].interface));
}
Я попытался запустить это изнутри geth, но получил это > var solc = require('solc'); Cannot find module 'solc' at a (<anonymous>:-160:-28) at require (<anonymous>:-122:-28) at <anonymous>:1:12. Кроме того, это проблема OS X? Поскольку я также использую тестовую цепочку Ubuntu, и для компиляции там контрактов я просто выполняю обычные шаги, как описано здесь (настройка source = minifiedContractи т.
Неа. Не проблема, о которой мы знаем. Можете ли вы перечислить содержимое вашего package.json?
Добавил к вопросу.
Нет, не solc package.json, а ваш личный package.json, из которого вы создаете проект.
Извините, но я новичок в этом, я не думаю, что понимаю, что вы говорите. В каком каталоге это должно быть?
Это вопрос node.js, который вы задаете. Чтобы перейти и создать проект node.js, вам нужно сначала инициализировать проект чем-то вроде npm init, после чего у вас должен быть файл package.json в каталоге вашего проекта. Оттуда вы можете установить пакет solc локально с помощью npm install solc, и он будет автоматически перенаправлен в вашу папку node_modules.