Eigenschaft '2' von null kann nicht gelesen werden

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));
        _;
    }
}
Können Sie den Code für Whilisted- und ID-Verträge bereitstellen?
@Jaime Ich habe die Verträge hinzugefügt :)
Ich habe eine Antwort hinzugefügt, lassen Sie mich wissen, wie es geht.

Antworten (2)

Ich habe alle Verträge auf Remix gesetzt und einige Fehler werden angezeigt:

Im WhitelistedVertrag:

constructor(_owner) public {
        owner = _owner;
    }

Sollte sein:

constructor(address _owner) public {
        owner = _owner;
    }

ID-Vertrag sollte sein Ownable, um die ownerVariable 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.

Hallo, danke für die Hilfe, aber ich benutze nicht respond.js. Ich versuche nur, die Verträge zu kompilieren. Denkst du, es könnte daran liegen, dass die Verbindung mit meinem Knoten, vielleicht einige Parameter, wie die Konten, fehlen? Meine Truffle-Version ist Truffle v4.1.7 (Kern: 4.1.7) und ich verwende Ganache für meinen Knoten
Haben Sie versucht, den Vertrag auf Remix zu erstellen? Probieren Sie es aus und schauen Sie, ob Sie den gleichen Fehler erhalten.
Wenn Remix funktioniert, werde ich versuchen, Truffle neu zu installieren. Vielen Dank!
Der Fehler tritt nur auf, wenn ich den Whitelisted-Vertrag (Whitelisted.sol) importiere, in Remix habe ich ihn nicht importiert, sondern andere Dinge wie Ownable-Werke importiert.
Die von @Jaime gepostete Korrektur wird meiner Meinung nach dafür sorgen, dass es funktioniert, ohne Fehler zu werfen.