Contract-Development
未創建契約的 .json 文件
我真的是新手,
ethereum
我solidity
很難弄清楚如何獲得.json
契約的等價物。我有
Campaign.sol
里面的contractsFolder
。該Campaign.sol
文件有 2 個名為CampaignMgr
和的契約CampaignFactory
。我的 package.json 文件如下所示:
{ "name": "kickstarter", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "zake", "license": "ISC", "dependencies": { "fs-extra": "^9.0.0", "ganache-cli": "^6.9.1", "mocha": "^7.0.1", "solc": "^0.4.17", "web3": "^1.0.0-beta.26" } }
我的 compile.js 程式碼是:
const path = require('path'); const solc = require('solc'); const fs = require('fs-extra'); const buildPath = path.resolve(__dirname, 'build'); fs.removeSync(buildPath); //removes folder and its contains const campaignPath = path.resolve(__dirname, 'contractsFolder', 'Campaign.sol'); const source = fs.readFileSync(campaignPath, 'UTF-8'); const output = solc.compile(source, 1).contracts; fs.ensureDirSync(buildPath); //checks if directory exists. if not creates for us for(let ctrct in output) { fs.outputJsonSync( path.resolve(buildPath, ctrct+ '.json' ), output[ctrct] ); }
它應該在 build 文件夾中輸出 2 個 json 文件
:CampaignMgr.json
,但我從來沒有得到與契約等效的 json 文件。:CampaignFactory.json
我希望有人能準確指出我做錯了什麼。如果您需要程式碼中的其他內容,請告訴我。
Campaign.sol 文件有 2 個合約,分別命名
CampaignMgr
為CampaignFactory
Solidity 編譯器的基本輸入單元是合約,而不是文件:
- 如果您為每個契約創建一個文件,並且為文件和契約使用相同的名稱,那麼是的 - 每個文件都有一個工件,名稱完全相同
- 如果您為每個契約創建一個文件,但您為文件和契約使用不同的名稱,那麼您將獲得每個文件一個工件,但使用契約的名稱
- 如果您將多個契約放在一個文件中(並且顯然為每個契約使用不同的名稱),那麼每個契約您都會獲得一個工件,其中包含契約的名稱
正如您在所有情況下看到的那樣,Solidity 編譯器為每個合約生成一個工件,並帶有該合約的名稱;您選擇在不同文件之間拆分它們的方式在這裡沒有影響。
我自己去回答(最後感謝上帝)。
我正在提供詳細資訊,以防將來有人從中獲得幫助。
關鍵是 atom 不支持任何以 .
.json
開頭的文件:
。因此我們要做的就是用空字元串替換它,即
path.resolve(buildPath, contract.replace(':', '') + '.json' ),
還要確保使用與
.sol
您在solidity程式碼中使用的版本相同的版本(例如對我來說pragma solidity ^0.4.17;
)