#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:
- Вам нужно передать объект параметров в формате JSON (в
compile()
функцию), а не только текстовый источник. Смотрите пример в readme. - В вашем
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. Ваш ответ мне очень помог. Большое вам спасибо!