Solidity
在連接到 Geth 的 Node.js 中:solc.compile 在 contractName 之前添加一個額外的 ‘:’ 前綴
我在 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
和 notnameContract
。當我用 替換程式碼
nameContract
時:nameContract
,它可以工作。我檢查了我的 Solidity 文件,其中沒有輸入錯誤。你知道為什麼會這樣嗎?我在 Windows10 上使用 Git BASH。
我知道這有點晚了,但這不是一個錯誤,而是一個特性,請參閱編譯輸出中以冒號開頭的契約名稱:
- 報告:
solc.compile(exampleContract)
返回以下內容。最好在契約名稱之前刪除冒號。{ "contracts": { ":NameOfContract": {...} } }
- 解析度:
為了使輸出中的契約引用明確,較新的編譯器版本在每個契約前面加上 :。這將在下一個版本中進一步擴展,其中將返回正確的 json 對象,因此請繼續關注“修復”。
- 筆記:
我關閉了它,因為它不是“錯誤”,只是編譯器的工作方式。