基于多个属性的智能合约中的搜索记录

时间:2019-07-13 11:38:39

标签: python blockchain ethereum solidity smartcontracts

我有一个智能合约,其中包含有关患者的信息。

患者结构

struct patient {
uint256 recordid;
    bytes32 name;
    bytes32 regNo;
    bytes32 address;
    int contactno;
} 
mapping(uint256=>patient ) patients;

现在,我想按姓名或联系电话搜索患者。 当前,我正在按recordid搜索记录,这是唯一的。

搜索功能

function getpatientbyrecordid(uint256 id) view public returns (bytes32 ,bytes32 ,  bytes32, int ) {

    return (patients[id].name,
            patients[id].regNo, 
    patients[id].address, 
            patients[id].contactno,);
}

我只能按姓名和联系方式搜索记录。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

如果要按名称搜索,则可以存储此映射:

mapping(bytes32 => mapping (uint256 => uint256)) nameLookup;

第二个映射将递增的随机数映射到一个记录ID,您可以遍历此映射以查找具有相同名称的患者,直到键返回0。这意味着不再有该名称的患者。

最好的方法是只对区块链上的共享分类帐执行所需的操作。保留其他数据链。