Alert Source Discuss
🚧 Stagnant Standards Track: ERC

ERC-1388: 证明签发者管理列表

Authors Weiwu Zhang <a@colourful.land>, James Sangalli <j.l.sangalli@gmail.com>
Created 2018-09-08
Discussion Link https://github.com/ethereum/EIPs/issues/1388

Introduction

在智能合约中,我们需要一些方法来处理对用户身份或能力的密码学证明。假设我们有一个房地产经纪人,KiwiRealtors,通过智能合约提供一个“意向表达”功能,并且要求用户提供他们是新西兰或澳大利亚居民的证明,这是法律要求。这实际上发生在新西兰的房地产市场,并且是处理此类证明需求的完美示例。

然而,智能合约明确信任证明签发者是不切实际的。有多个签发者可以提供一个人的居住证明 - 当地的太平绅士、土地所有权办公室、当地警察、护照管理机构等。我们设想一种模型,其中管理合格签发者列表的工作实际上外包给一个列表。

任何人都可以发布签发者列表。只有最值得信赖和精心维护的列表才能得到广泛使用。

Purpose

此 ERC 为任何人管理证明签发者列表提供了一个智能合约接口。智能合约将明确信任一个列表,因此信任该列表上的签发者签发的所有证明。

Draft implementation

    /*
     * 此合约的目的是管理证明
     * 签发者合约及其履行要求的能力
     */
 contract ManagedListERC
    {
      /* 管理员是列表的管理者。只有他/她/它才能通过从列表中删除/添加证明签发者来更改列表。

       * 列表中的签发者由其合约来表示
       * 地址,而不是由此类合约管理的证明签名密钥。
       */
      struct List
      {
	      string name;
	      string description; // 列表的简短描述
	      string capacity; // 用作证明签名密钥的过滤器
	  /* 如果智能合约指定了一个列表,则只接受
	   * 由该列表上的签发者签发的证明。此外,如果该
	   * 列表具有非空容量,则仅接受由具有该容量的
	   * 签名密钥签名的证明。 */

	    address[] issuerContracts; // 所有这些地址都是合约,没有签名能力
	    uint expiry;
      }

      // 找到发送者正在管理的列表,然后向其中添加一个签发者
      function addIssuer(address issuerContractAddress) public;

      // 如果发送者标识的列表不包含此签发者,则返回 false
      function removeIssuer(address issuerContractAddress, List listToRemoveIssuerFrom) public returns(bool);

      /* 由服务调用,例如 Kiwi Properties 或 James Squire */
      /* 循环遍历所有签发者的合约,并在
       * 每一个合约上执行 validateKey(),希望得到一个命中,并返回
       * 第一个命中的合约地址。请注意,存在一种攻击
       * 方法,即一个签发者声称拥有另一个签发者的密钥,这
       * 可以通过后续设计来缓解。 */
       // 循环遍历签发者数组,调用 signingKeyOfAttestation 上的 validate
      function getIssuerCorrespondingToAttestationKey(bytes32 list_id, address signingKeyOfAttestation) public returns (address);

       /* 为了简单起见,我们使用发送者的地址作为列表 ID,
	 * 接受这些后果:a) 如果一个用户希望维护
	 * 具有不同容量的多个列表,他或她必须为每个列表使用不同的发送者地址。
	 * b) 如果用户替换了发送者的密钥,无论是由于他或她怀疑该密钥已泄露
	 * 还是由于该密钥丢失并通过特殊方式重置,
	 * 那么该列表仍然由第一个发送者的地址标识。
       */

      function createList(List list) public;

      /* 用新密钥替换列表管理器的密钥 */
      function replaceListIndex(List list, address manager) public returns(bool);

    }

点击 here 查看此 ERC 的示例实现

#1387 #1386

Citation

Please cite this document as:

Weiwu Zhang <a@colourful.land>, James Sangalli <j.l.sangalli@gmail.com>, "ERC-1388: 证明签发者管理列表 [DRAFT]," Ethereum Improvement Proposals, no. 1388, September 2018. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-1388.