首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >人员身份识别合同

人员身份识别合同
EN

Stack Overflow用户
提问于 2018-01-25 23:50:47
回答 1查看 40关注 0票数 1

我正在为身份识别人员创建合同,我需要验证是否有一些合同具有相同的地址、电子邮件或电话号码。

示例:

代码语言:javascript
复制
contract Person {
//date of create
uint public dateCreate;

//name of person
string public name;

//variables to be validates
string public email;

string public phone;

// constructor
function Person(string _name, string _email, string _phone) public {
    name = _name;
    email = _email;
    phone = _phone;
    owner = msg.sender;
}
}

我可以选择将地址契约保存在与密钥电子邮件或电话的映射中。

代码语言:javascript
复制
contract RegisterPerson {
  //save the contract address person using the key of the email
  mapping(bytes32=>address) public addressEmail;
}

有这个解决方案,但我相信它不会更好,因为映射它将是非常大的和昂贵的合同。

有没有人知道另一个解决方案?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-26 01:19:17

你不应该使用契约来表示一个对象,就像你在这里尝试做的那样。这不仅是非常昂贵的,因为合同部署通常比事务更昂贵,而且你也不能保证唯一性。

您应该使用struct来表示个体。

代码语言:javascript
复制
contract PersonStorage {
  struct Person {
    uint dateCreate;
    string name;
    string email;
    string phone;
  }

  mapping(bytes32 => Person) persons;

  function addPerson(string _name, string _email, string _phone) public {
    Person memory person;

    person.name = _name;
    person.email = _email;
    person.phone = _phone;

    persons[keccak256(person.email)] = person;
  }
  ...
}

现在,您的约定是所有Person的数据存储。您可以部署此版本,并将约定地址传递给任何需要访问它的约定。您还可以将所有数据集中起来,以防您需要允许多个业务逻辑合同使用这些数据,或者需要升级您的业务合同。

编辑-我应该注意到,如果这是在它自己的合同中,您将不得不从string更改为bytes32。你不能在合约之间发送字符串。

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

https://stackoverflow.com/questions/48446912

复制
相关文章

相似问题

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