Неожиданный токен ‘[‘ при выполнении теста надежности

#node.js #mocha.js #solidity

#node.js #mocha.js #солидность

Вопрос:

В настоящее время я выполняю тест Mocha моего контракта Solidity, но он выдает ошибку, связанную с кодом компилятора.

 C:ethcompile.js:8
modules.exports = solc.compile(source).[];

SyntaxError: Unexpected token '['
    at wrapSafe (internal/modules/cjs/loader.js:979:16)
    at Module._compile (internal/modules/cjs/loader.js:1027:27)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
    at Module.load (internal/modules/cjs/loader.js:928:32)
    at Function.Module._load (internal/modules/cjs/loader.js:769:14)
    at Module.require (internal/modules/cjs/loader.js:952:19)
    at require (internal/modules/cjs/helpers.js:88:18)
    at Object.<anonymous> (C:ethtestinbox.test.js:5:31)
    at Module._compile (internal/modules/cjs/loader.js:1063:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
    at Module.load (internal/modules/cjs/loader.js:928:32)
    at Function.Module._load (internal/modules/cjs/loader.js:769:14)
    at Module.require (internal/modules/cjs/loader.js:952:19)
    at require (internal/modules/cjs/helpers.js:88:18)
    at Object.exports.requireOrImport (C:ethnode_modulesmochalibesm-utils.js:42:12)
    at Object.exports.loadFilesAsync (C:ethnode_modulesmochalibesm-utils.js:55:34)
    at Mocha.loadFilesAsync (C:ethnode_modulesmochalibmocha.js:473:19)
    at singleRun (C:ethnode_modulesmochalibclirun-helpers.js:125:15)
    at exports.runMocha (C:ethnode_modulesmochalibclirun-helpers.js:190:10)
    at Object.exports.handler (C:ethnode_modulesmochalibclirun.js:362:11)
    at C:ethnode_modulesmochanode_modulesyargsbuildindex.cjs:443:71
 

Сам компилятор является:

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

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

modules.exports = solc.compile(source).[:Inbox];
 

Ответ №1:

  1. Вам нужно передать объект параметров в формате JSON (в compile() функцию), а не только текстовый источник. Смотрите пример в readme.
  2. В вашем solc.compile(source).[:Inbox] коде есть синтаксические ошибки (объединение доступа к свойству с . и массив с [ ) и логические ошибки (неопределенный :Inbox , неверный путь к скомпилированному результату, попытка получить доступ к строке JSON как к объекту).

Предполагая, inbox.sol contract Inbox что это основной контракт, который вы хотите скомпилировать, это рабочая замена кода для последней строки в вашем вопросе:

 const options = {
  language: 'Solidity',
  sources: {
    'inbox.sol': {
      content: source
    }
  },
  settings: {
    outputSelection: {
      '*': {
        '*': ['*']
      }
    }
  }
};
const compiledRaw = solc.compile(JSON.stringify(options));
const compiledObj = JSON.parse(compiledRaw);
const compiledInboxContract = compiledObj.contracts['inbox.sol']['Inbox'];
//console.log(compiledInboxContract)
module.exports = compiledInboxContract;
 

Комментарии:

1. Ваш ответ мне очень помог. Большое вам спасибо!