是否可以使结构的某些字段仅对合同所有者可用?

Is it possible to make certain fields of a structure only available to contract owner?

例如,给定以下结构,我希望某些字段仅对合同所有者可见

struct Participant{
    address participantAddress; // can be seen by anyone
    string team; // can be seen by anyone
    string personalDescription; // can be seen by anyone
    string secret // can be seen only by contract owner    
}
// Mapping each participant to an uint id
mapping(address=>Participant) public participantsMapping;

换句话说,检查 participantsMapping 的人可以看到除秘密字段之外的所有字段(只有所有者才能看到)

据我所知,“private”关键字不隐藏任何数据,它只是一个代码级说明符。

函数有修饰符,但它们也适用于结构中的字段吗? 如果没有,如何实现?

modifier onlyOwner() {
    require(msg.sender==ownerAddress,
    "Visible only by owner");
    _;
}

没有。存储私人数据 on-chain 是不可能的。

可以加密数据,这样只有拥有密钥的人才能访问它。有关用法示例,请参阅 https://docs.metamask.io/guide/rpc-api.html#example-4 and https://docs.metamask.io/guide/rpc-api.html#encrypting