Windows

在 Windows 8 上安裝 Solc 編譯器

  • February 22, 2017

我需要一個命令行編譯器來創建一個僅基於元數據自動建構、測試和部署智能合約系統的專家系統。我已經嘗試了幾天安裝 solc 沒有成功。我承認我只有平均智力,但我認為乙太坊的目的是賦予普通人權力。它不應該這麼複雜,除非複雜性的目的是限制在給定時間內可以解決難題的人數。感覺就像我在做工作證明。

到目前為止我嘗試過的所有內容(NPM)都已記錄在案,但在我在這裡發布所有內容之前,我想知道是否有可以在自動化過程中使用的替代編譯器,或者是否有其他方法可以安裝 solc 或者可能從原始碼建構它。如果從原始碼建構是一種選擇,我將需要一個教程,因為我沒有使用 C++ 的經驗。如果有幫助的話,我確實在我的機器上安裝了 Visual Studio。

非常簡單地說,我嘗試在本地和全球範圍內從 NPM 安裝,並且我嘗試過geth --solc pathadmin.setSolc('path'). 無論如何,我不認為定義路徑是我的問題,因為在 NPM 安裝後,我的電腦上沒有安裝任何我能找到的 solc.exe - 只有一個填充了 solcjs 文件的 solc 目錄。

任何想法將不勝感激謝謝,約翰

作為旁注,我在製作本地區塊鏈時遇到了很多困難,而且我很難找到學習資源。為此,我**在 GitHub 上找到了一個教程,**它應該能讓另一個像我這樣的菜鳥在短時間內啟動並執行。可以從教程中剪切和粘貼程式碼來啟動本地區塊鏈,並索引最有用的資源。我將繼續致力於索引以使其更加清晰,並在發現新資源時添加它們。如果我能找到如何安裝 solc,我會寫一些類似的東西,以便下一個來的人可以更輕鬆地度過。

再次感謝,約翰

大家好,現在是一天后,我已經解決了一些這個問題。

該命令npm install solcnpm install -g solc實際都沒有安裝 solc。這些命令為 solc 安裝 JavaScript 綁定。

查看solc 的 NPM 頁面。這是非常具有誤導性的 - 它在頂部用大寫字母表示 solc。但是下面是我認為可以找到的兩個連結。

連結在此處此處複製。

問題是我不知道如何從這兩個 GitHub 頁面中的任何一個安裝 solc,所以我什至不認為它們是可以獲取 solc 的地方。我仍然不知道如何處理這些頁面。

不用擔心,在Google搜尋了幾個小時後,我發現了這個頁面,上面有一張名為 Village Idiot 的大圖。我希望這是某種內部玩笑,而不是對像我這樣尋求幫助的普通人的侮辱。無論如何,在這個頁面上是一個執行檔的發布,它安裝了 solc 以及 Mix IDE、AlethZero、geth 和 eth。

現在,如果我使用以下選項啟動 Geth,--solc "C:\Program Files\cpp-ethereum\solc"然後我可以eth.getCompilers()在控制台中輸入,我會看到

$$ solidity $$作為返回的結果。 或者,我可以在沒有 solc 選項的情況下啟動 geth,然後當我想使用編譯器時,在 JavaScript 控制台中鍵入以下命令。

admin.setSolc('C:\\\Program Files\\\cpp-ethereum\\\solc')

請注意,JavaScript 控制台要求在通常只有一個的情況下使用三個斜杠。我在 Stack Exchange 上讀到這是因為斜杠是 JavaScript 中的轉義字元。另請注意,在這種情況下,路徑周圍需要使用單引號或雙引號,因為路徑中的單詞“Program”和“Files”之間有一個空格。

我實際上還沒有嘗試編譯任何東西。有問題我會回饋的。

同時,如果有人能告訴我如何從此處此處的以下頁面安裝 solc,我將不勝感激。我需要知道,因為Village Idiot 頁面上的版本是從 6 月開始的,我認為該頁面不再受支持。

再次感謝,約翰

一種相對簡單的解決方案是安裝 node.js 並使用 solc npm 包。當我最初開始使用乙太坊合約時,我自己就使用了它,而且設置起來很容易。

以下是步驟-

  • 安裝最新版本的 node.js
  • 為項目創建一個文件夾
  • 將 solc 包添加到您的 package.json 文件中,或使用以下封包件 -

{“名稱”:“eth_compiler”,“版本”:“0.0.1”,“引擎”:{“節點”:“>=7.0.0”,“npm”:“^3.0.0”},“依賴項” “: { “solc”: “^0.4.7” } }

  • 在文件夾中執行 npm install
  • 將一個小的 js 腳本添加到文件夾 (compile.js) - 它將接收合約文件名並輸出您需要的 abi/code 文件。

這是一個例子 -

var solc = require('solc');
var fs = require('fs');

var inputFilePath = process.argv[2];
var outputPath = process.argv[3];

// note - using the synchronous version of the file system functions for simplicity and because the async version isn't really needed in this case
var contractSolidity = fs.readFileSync(inputFilePath , 'utf-8');
if (!contractSolidity)
   return console.error('unable to read file: ' + inputFilePath );

var output = solc.compile(contractSolidity, 1);
for (var contractName in output.contracts) {
   var abi = output.contracts[contractName].interface;
   var code = output.contracts[contractName].bytecode;
   fs.writeFileSync(outputPath + '/' + contractName + '.abi', abi, 'utf-8');
   fs.writeFileSync(outputPath + '/' + contractName + '.code', code, 'utf-8');
}
  • 擁有該文件後,您只需在新文件夾中執行以下命令 - 節點編譯$$ inputFilePath $$ $$ outputPath $$

它應該生成編譯文件。

注意:我確實在本地對其進行了測試並設法編譯了一份契約,所以我相信它應該可以工作,但值得一提的是,我的機器上安裝了 party 和 cpp-ethereum(執行此腳本時未執行奇偶校驗) .

引用自:https://ethereum.stackexchange.com/questions/11081