Как скомпилировать код Solidity с использованием файловой системы узла? - PullRequest
0 голосов
/ 07 мая 2019

Я изо всех сил пытаюсь скомпилировать мой код Solidity в папку сборки.Я использую файловую систему узла, чтобы сделать это, но мне чего-то не хватает.В настоящее время я получаю эту ошибку:

fs.js:663
  return binding.open(pathModule.toNamespacedPath(path),
                 ^

Error: ENOENT: no such file or directory, open '/Users/Gary/Desktop/charity/ethereum/build/Charity.json'
    at Object.fs.openSync (fs.js:663:18)
    at Object.fs.writeFileSync (fs.js:1314:33)
    at Object.<anonymous> (/Users/Gary/Desktop/charity/ethereum/compile.js:37:12)
    at Module._compile (module.js:641:30)
    at Object.Module._extensions..js (module.js:652:10)
    at Module.load (module.js:560:32)
    at tryModuleLoad (module.js:503:12)
    at Function.Module._load (module.js:495:3)
    at Function.Module.runMain (module.js:682:10)
    at startup (bootstrap_node.js:191:16)

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

Как скомпилировать твердость, используя solc 0.5

мой файл compile.js выглядит следующим образом


    const path = require('path');
    const solc = require('solc');
    const fs = require('fs-extra');

     const buildPath = path.resolve(__dirname, 'build');
     fs.removeSync(buildPath);

    const charityPath = path.resolve(__dirname, 'contracts', 'Charity.sol');
    const source = fs.readFileSync(charityPath, 'utf8');

    var input = {
        language: 'Solidity',
        sources: {
            'Charity.sol': {
                 content: source
            }
        },
        settings: {
            outputSelection: {
                '*': {
                    '*': [ '*' ]
                }
            }
        }
    }

    const output = JSON.parse(solc.compile(JSON.stringify(input)));

    if(output.errors) {
        output.errors.forEach(err => {
            console.log(err.formattedMessage);
        });
    } else {
        const contracts = output.contracts["Charity.sol"];
        for (let contractName in contracts) {
            const contract = contracts[contractName];
            fs.writeFileSync(path.resolve(buildPath, `${contractName}.json`), JSON.stringify(contract.abi, null, 2), 'utf8');
        }
    }

Я ожидаю уничтожать и обновлять папку build при каждой компиляции.Папка build перейдет в папку ethereum.Оттуда я ожидаю скомпилировать код Solidity из Charity.sol и поместить его в формате JSON в виде файла в папку build.

Вместо этого я получаю вышеуказанную ошибку.Я считаю, что это ошибка из-за фундаментального недопонимания файловой системы.Тем не менее, я ценю любого, кто нашел бы время, чтобы посмотреть это.Я могу предоставить больше информации по запросу.

...