Solidity

在連接到 Geth 的 Node.js 中:solc.compile 在 contractName 之前添加一個額外的 ‘:’ 前綴

  • July 3, 2018

我在 Node.js 上嘗試以下腳本,同時執行連接到 Rinkeby 測試網的節點(來自 https://github.com/ethereum/wiki/wiki/JavaScript-API#web3ethcontract):

const fs = require("fs");
const solc = require('solc')

let source = fs.readFileSync('nameContract.sol', 'utf8');
let compiledContract = solc.compile(source, 1);
let abi = compiledContract.contracts['nameContract'].interface;
let bytecode = compiledContract.contracts['nameContract'].bytecode;
let gasEstimate = web3.eth.estimateGas({data: bytecode});
let MyContract = web3.eth.contract(JSON.parse(abi));

但是,此程式碼在我的電腦上不起作用:當我登錄時,compiledContract我可以看到映射中的鍵 is:nameContract和 not nameContract

當我用 替換程式碼nameContract:nameContract,它可以工作。我檢查了我的 Solidity 文件,其中沒有輸入錯誤。

你知道為什麼會這樣嗎?我在 Windows10 上使用 Git BASH。

我知道這有點晚了,但這不是一個錯誤,而是一個特性,請參閱編譯輸出中以冒號開頭的契約名稱

  • 報告:

solc.compile(exampleContract)返回以下內容。最好在契約名稱之前刪除冒號。

{
  "contracts": {
     ":NameOfContract": {...}
  }
}
  • 解析度:

為了使輸出中的契約引用明確,較新的編譯器版本在每個契約前面加上 :。這將在下一個版本中進一步擴展,其中將返回正確的 json 對象,因此請繼續關注“修復”。

  • 筆記:

我關閉了它,因為它不是“錯誤”,只是編譯器的工作方式。

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