pragma solidity ^0.4.23;
import'./ID.sol';
import'./Whitelisted.sol';
contract IDFactory is Ownable {
Whitelisted whitelist;
event IDCreated(uint id, address idContractAddress);
mapping (uint => address) public ids;
modifier idExists(uint id) {
require(ids[id]);
_;
}
constructor() public {
owner = msg.sender;
whitelist = new Whitelisted(owner);
whitelist.addToWhitelist(owner);
}
}你好,我正在使用松露编译一个稳固的合同。这个合同叫做IDFactory.sol。当我执行块菌编译时,我会得到以下错误:
MacBook-Pro-de-Alicia-2:a alicialombarte$ truffle compile
TypeError: Error parsing /Users/alicialombarte/notary-contract/a/contracts/IDFactory.sol: Cannot read property '2' of null
at /usr/local/lib/node_modules/truffle/build/webpack:/~/truffle-core/~/truffle-compile/parser.js:171:1
at Array.map (<anonymous>)
at Object.parseImports (/usr/local/lib/node_modules/truffle/build/webpack:/~/truffle-core/~/truffle-compile/parser.js:167:6)
at /usr/local/lib/node_modules/truffle/build/webpack:/~/truffle-core/~/truffle-compile/profiler.js:302:1
at /usr/local/lib/node_modules/truffle/build/webpack:/~/truffle-resolver/index.js:79:1
at /usr/local/lib/node_modules/truffle/build/webpack:/~/truffle-resolver/~/async/internal/onlyOnce.js:12:1
at next (/usr/local/lib/node_modules/truffle/build/webpack:/~/truffle-resolver/~/async/whilst.js:68:1)
at /usr/local/lib/node_modules/truffle/build/webpack:/~/truffle-resolver/index.js:64:1
at /usr/local/lib/node_modules/truffle/build/webpack:/~/truffle-resolver/fs.js:85:1
at /usr/local/lib/node_modules/truffle/build/webpack:/~/truffle-resolver/~/async/internal/once.js:12:1我的合同里没有任何“2”字。
谢谢!
以下是另外两份合同:
pragma solidity ^0.4.23;
import'./Whitelisted.sol';
contract ID{
uint id;
Whitelisted whitelist;
mapping (string => MessageData) public messages;
event MessageSaved(string messageHash);
constructor(uint _id, address _whitelist) public {
owner = msg.sender;
id = _id;
whitelist = Whitelisted(_whitelist);
}
struct MessageData {
string messageSender;
uint64 timestamp;
}
}
pragma solidity ^0.4.23;
import 'Ownable.sol';
contract Whitelisted is Ownable {
constructor(_owner) public {
owner = _owner;
}
mapping(address => bool) internal whitelistedAddresses;
function isWhitelisted(address addr) internal view returns (bool) {
return whitelistedAddresses[addr];
}
function addToWhitelist(address addr) public onlyOwner {
require(!isWhitelisted(addr));
whitelistedAddresses[addr] = true;
}
function removeFromWhitelist(address addr) public onlyOwner {
require(isWhitelisted(addr));
whitelistedAddresses[addr] = false;
}
modifier onlyWhitelisted {
require(isWhitelisted(msg.sender));
_;
}
}发布于 2018-05-26 11:11:49
我把所有的合同都重新组合了,并显示了一些错误:
在Whitelisted合同中:
constructor(_owner) public {
owner = _owner;
}应:
constructor(address _owner) public {
owner = _owner;
}ID契约应该是Ownable来使用owner变量,或者可以是Whitelisted。
而且,您有一个映射
mapping (string => MessageData)
这使用字符串作为键,而且这还没有在可靠的情况下实现。如果字符串合适,可以将其定义为bytes32。不能将动态数组变量用作键。
我希望这能帮上忙。
发布于 2018-05-26 10:06:06
此错误并不是您的可靠代码的问题。
这种类型的错误由React.js给出。似乎您正在对某个对象进行建模,并试图访问它的第二个属性。然后,对象的获取可能做得不好,var/object为null。
正因为如此,当您尝试访问它的属性时,您无法访问它,因为您无法访问null属性,它只是没有任何属性。
重新检查您的React代码,并尝试找到要访问它的第二个属性的空对象。然后,尝试正确地从区块链中获取它,这样就不会得到null而不是正确的数据。
希望能帮上忙。
https://ethereum.stackexchange.com/questions/49568
复制相似问题