node:assert:400 抛出错误; ^ AssertionError [ERR_ASSERTION]: 指定的回调对象无效
node:assert:400 throw err; ^ AssertionError [ERR_ASSERTION]: Invalid callback object specified
尝试 运行 节点 compile.js 但它让我想到了上面提到的错误和我正在做的错误的想法
我的inbox.sol
pragma solidity ^0.8.9;
contract Inbox{
string public message;
function Inbox(string intialMessage) public {
message = intialMessage;
}
function setMessage(string newMessage) public {
message = newMessage;
}
}
我的package.json
{
"dependencies": {
"ganache-cli": "^6.12.2",
"mocha": "^9.1.3",
"solc": "^0.8.9",
"web3": "^1.6.0"
}
}
我是这项技术的初学者,感谢您的宝贵时间
只需在函数参数中出现的两个字符串后添加内存即可。
函数收件箱(字符串内存initialMessage)...
和
function setMessage(string memory newMessage)...
该课程已过时,solidity 版本 0.6.6 已发布,您最好将代码更新到该版本。如果你不是一个好的程序员,你最好退掉那门课程,因为你以后会遇到很多问题,你会看到一些使用元掩码和 Web3 的错误。那门课程教给你很多东西,所以我真的建议你继续学习那门课程,并在整个课程中更新自己。这是第一个问题,更新版本的解决方案是这样的。
这将是您的“inbox.sol”代码:
pragma solidity ^0.6.6;
contract Inbox{
string public message;
constructor (string memory initialMessage) public{
message = initialMessage;
}
function setMessage(string memory newMessage) public{
message = newMessage;
}
}
这将是您的“compile.js”代码:
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, 'UTF-8');
var input = {
language: 'Solidity',
sources: {
'Inbox.sol' : {
content: source
}
},
settings: {
outputSelection: {
'*': {
'*': [ '*' ]
}
}
}
};
var output = JSON.parse(solc.compile(JSON.stringify(input)));
exports.abi = output.contracts['Inbox.sol']['Inbox'].abi;
exports.bytecode = output.contracts['Inbox.sol'] ['Inbox'].evm.bytecode.object;
在新的 solidity 中,与旧编译器相比,编译器将为您提供另一个版本的编译代码,因此您需要将 json 文件传递给编译器,以便访问 abi(接口) 和字节码你需要像我在这里做的那样。
它将与 solc 版本 0.4.17 一起使用。
只需在 'compile.js' 中像这样重写代码。即使在 0.8.0 版本的 solidity 中也能正常工作
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, 'UTF-8');
var input = {
language: 'Solidity',
sources: {
'Inbox.sol' : {
content: source
}
},
settings: {
outputSelection: {
'*': {
'*': [ '*' ]
}
}
}
};
var output = JSON.parse(solc.compile(JSON.stringify(input)));
// console.log(output.contracts['Inbox.sol']['Inbox']);
// exports.abi = output.contracts['Inbox.sol']['Inbox'].abi;
// exports.bytecode = output.contracts['Inbox.sol']['Inbox'].evm.bytecode.object;
尝试 运行 节点 compile.js 但它让我想到了上面提到的错误和我正在做的错误的想法
我的inbox.sol
pragma solidity ^0.8.9;
contract Inbox{
string public message;
function Inbox(string intialMessage) public {
message = intialMessage;
}
function setMessage(string newMessage) public {
message = newMessage;
}
}
我的package.json
{
"dependencies": {
"ganache-cli": "^6.12.2",
"mocha": "^9.1.3",
"solc": "^0.8.9",
"web3": "^1.6.0"
}
}
我是这项技术的初学者,感谢您的宝贵时间
只需在函数参数中出现的两个字符串后添加内存即可。
函数收件箱(字符串内存initialMessage)... 和 function setMessage(string memory newMessage)...
该课程已过时,solidity 版本 0.6.6 已发布,您最好将代码更新到该版本。如果你不是一个好的程序员,你最好退掉那门课程,因为你以后会遇到很多问题,你会看到一些使用元掩码和 Web3 的错误。那门课程教给你很多东西,所以我真的建议你继续学习那门课程,并在整个课程中更新自己。这是第一个问题,更新版本的解决方案是这样的。
这将是您的“inbox.sol”代码:
pragma solidity ^0.6.6;
contract Inbox{
string public message;
constructor (string memory initialMessage) public{
message = initialMessage;
}
function setMessage(string memory newMessage) public{
message = newMessage;
}
}
这将是您的“compile.js”代码:
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, 'UTF-8');
var input = {
language: 'Solidity',
sources: {
'Inbox.sol' : {
content: source
}
},
settings: {
outputSelection: {
'*': {
'*': [ '*' ]
}
}
}
};
var output = JSON.parse(solc.compile(JSON.stringify(input)));
exports.abi = output.contracts['Inbox.sol']['Inbox'].abi;
exports.bytecode = output.contracts['Inbox.sol'] ['Inbox'].evm.bytecode.object;
在新的 solidity 中,与旧编译器相比,编译器将为您提供另一个版本的编译代码,因此您需要将 json 文件传递给编译器,以便访问 abi(接口) 和字节码你需要像我在这里做的那样。
它将与 solc 版本 0.4.17 一起使用。
只需在 'compile.js' 中像这样重写代码。即使在 0.8.0 版本的 solidity 中也能正常工作
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, 'UTF-8');
var input = {
language: 'Solidity',
sources: {
'Inbox.sol' : {
content: source
}
},
settings: {
outputSelection: {
'*': {
'*': [ '*' ]
}
}
}
};
var output = JSON.parse(solc.compile(JSON.stringify(input)));
// console.log(output.contracts['Inbox.sol']['Inbox']);
// exports.abi = output.contracts['Inbox.sol']['Inbox'].abi;
// exports.bytecode = output.contracts['Inbox.sol']['Inbox'].evm.bytecode.object;