首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法读取null的属性“2”

无法读取null的属性“2”
EN

Ethereum用户
提问于 2018-05-26 09:46:28
回答 2查看 1.4K关注 0票数 2
代码语言:javascript
复制
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。当我执行块菌编译时,我会得到以下错误:

代码语言:javascript
复制
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”字。

谢谢!

以下是另外两份合同:

代码语言:javascript
复制
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));
        _;
    }
}
EN

回答 2

Ethereum用户

回答已采纳

发布于 2018-05-26 11:11:49

我把所有的合同都重新组合了,并显示了一些错误:

Whitelisted合同中:

代码语言:javascript
复制
constructor(_owner) public {
        owner = _owner;
    }

应:

代码语言:javascript
复制
constructor(address _owner) public {
        owner = _owner;
    }

ID契约应该是Ownable来使用owner变量,或者可以是Whitelisted

而且,您有一个映射

mapping (string => MessageData)

这使用字符串作为键,而且这还没有在可靠的情况下实现。如果字符串合适,可以将其定义为bytes32。不能将动态数组变量用作键。

我希望这能帮上忙。

票数 1
EN

Ethereum用户

发布于 2018-05-26 10:06:06

此错误并不是您的可靠代码的问题。

这种类型的错误由React.js给出。似乎您正在对某个对象进行建模,并试图访问它的第二个属性。然后,对象的获取可能做得不好,var/object为null。

正因为如此,当您尝试访问它的属性时,您无法访问它,因为您无法访问null属性,它只是没有任何属性。

重新检查您的React代码,并尝试找到要访问它的第二个属性的空对象。然后,尝试正确地从区块链中获取它,这样就不会得到null而不是正确的数据。

希望能帮上忙。

票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/49568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档