I'm trying to compile my contract but get this error:
AssertionError [ERR_ASSERTION]: Invalid callback specified.
One answer was to change the version of the compiler but my version is up to date (0.5.0). I'm actually trying to take an old code (0.4.17) and upgrade it. Tried for 2 days and just kept failing.
Here is my contract:
pragma solidity ^0.5.0;
contract Lottery{
address public manager;
address payable [] public players;
modifier restricted {
require(msg.sender == manager);
_;
}
constructor() public {
manager = msg.sender;
}
function participate() public payable {
require(msg.value > .01 ether);
players.push(msg.sender);
}
function pseudoRandom() private view returns(uint){
return uint(keccak256(abi.encodePacked(block.difficulty, now, players)));
}
function pickWinner() public restricted {
require(msg.sender == manager);
uint index = pseudoRandom() % players.length;
address(players[index]).transfer(address(this).balance);
(players) = new address payable[](0);
}
function getPlayers() public view returns(address payable[] memory){
return players;
}
}
here is my package.json:
{
"name": "lottery",
"version": "1.0.0",
"description": "lottery contract with Solidity",
"main": "compile.js",
"directories": {
"test": "test"
},
"scripts": {
"test": "mocha"
},
"author": "Torof",
"license": "ISC",
"dependencies": {
"ganache-cli": "^6.2.1",
"mocha": "^5.2.0",
"save": "^2.3.2",
"solc": "^0.5.0",
"tar": "^4.4.8",
"truffle": "^4.1.14",
"truffle-hdwallet-provider": "0.0.6",
"web3": "^1.0.0-beta.36"
}
}
and here is the compiler:
const path = require('path');
const fs = require('fs');
const solc = require('solc'); //Could the error be here ?
const lotteryPath = path.resolve(__dirname, 'contracts', 'Lottery.sol');
const source = fs.readFileSync( lotteryPath, 'utf8');
module.exports = solc.compile(source, 1).contracts[':Lottery'];
console.log(solc.compile(source, 1));
And lastly I found this err message but don't get it:
[ts]
Could not find a declaration file for module 'solc'.
'/home/torof/desk/coding/Udemy/ETH-stephenGrider/lottery/node_modules/solc/index.js'
implicitly has an 'any' type.
Try `npm install @types/solc` if it exists or add a new declaration (.d.ts) file containing `declare module 'solc';`
Previous versions of solc
supported the style of compilation you're using, but it looks like the new versions only support standard JSON in and out. You probably want something like this:
console.log(JSON.parse(solc.compile(JSON.stringify({
language: 'Solidity',
sources: {
'lottery.sol': {
content: source,
},
},
settings: {
outputSelection: {
'*': {
'*': ['evm', 'bytecode'],
},
},
},
}))).contracts['lottery.sol'].Lottery);