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);
}
}
Hallo, ich versuche, einen Soliditätsvertrag mit Trüffel zu erstellen. Der Vertrag heißt IDFactory.sol. Wenn ich die Truffle-Kompilierung ausführe, erhalte ich diesen Fehler:
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
Ich habe keine 2 in meinem Vertrag.
Vielen Dank!
Hier sind die anderen 2 Verträge:
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));
_;
}
}
Ich habe alle Verträge auf Remix gesetzt und einige Fehler werden angezeigt:
Im Whitelisted
Vertrag:
constructor(_owner) public {
owner = _owner;
}
Sollte sein:
constructor(address _owner) public {
owner = _owner;
}
ID-Vertrag sollte sein Ownable
, um die owner
Variable zu verwenden, oder kann sein Whitelisted
.
Außerdem haben Sie eine Zuordnung
mapping (string => MessageData)
Dies verwendet eine Zeichenfolge als Schlüssel, und dies ist noch nicht in solidity implementiert. Sie könnten dies als bytes32 definieren, wenn Ihre Zeichenfolgen passen. Sie können keine dynamischen Array-Variablen als Schlüssel verwenden.
Ich hoffe, das hilft.
Dieser Fehler ist kein Problem mit Ihrem Solidity-Code.
Diese Art von Fehler wird von React.js ausgegeben. Scheint, dass Sie ein Objekt modellieren und versuchen, auf seine zweite Eigenschaft zuzugreifen. Dann ist die Erfassung des Objekts wahrscheinlich nicht gut gemacht und var/object ist null.
Wenn Sie versuchen, auf die Eigenschaften zuzugreifen, können Sie dies daher nicht tun, da Sie nicht auf eine Eigenschaft von null zugreifen können, sie hat einfach keine Eigenschaften.
Überprüfen Sie Ihren React-Code erneut und versuchen Sie, das Nullobjekt, auf das Sie zugreifen, in seiner zweiten Eigenschaft zu finden. Versuchen Sie dann, es korrekt aus der Blockchain zu bekommen, um keine Null anstelle der richtigen Daten zu erhalten.
Ich hoffe es hilft.
Jaime
Alice
Jaime