ERC-1386: 证明管理合约
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/1386 |
简介
通常,我们需要在区块链上使用诸如“Alice住在澳大利亚”之类的证明;该证明由有效的发行者在链下出于隐私原因发布,并且可以在智能合约中撤销。
发行者可以创建一个智能合约,通过构建所有已撤销证明的哈希的布隆过滤器,一次性撤销多个证明。
发行者还可以将其智能合约中的验证方法提交给其他需要验证其发布的证明的智能合约调用。这允许每个证明者单独更新其证明格式。
目的
此ERC为证明发行者提供了一个接口,用于管理其证明签名密钥以及为撤销和验证等操作而脱链发布的证明。
在我们的草案实现中,我们包括了保存加密证明、更改证明的发行合约、撤销证明和验证加密证明的真实性的功能。
用例示例
假设我们的朋友Alice想买一瓶葡萄酒和她的朋友们一起享用。她想在线订购并将其送到她的家庭住址,同时用Ether支付费用。
Alice拥有一份来自当地公路和海事服务部门的加密证明,证明了她的年龄、出生日期、居住国和驾驶能力。
Alice能够拆分这个证明(请参见此处的merkle tree证明ERC),并且仅提供说明她已超过21岁的叶子。
Alice通过葡萄酒供应商的智能合约购买葡萄酒,并提供merkle tree证明,证明她已超过21岁,因此可以购买葡萄酒,同时附加适当数量的ether以完成购买。
发行者智能合约能够验证她的证明,检查发行者合约是否有效且能够执行此类年龄证明。在这种情况下,它必须来自像驾驶执照管理机构之类的人,因为学校ID的年龄证明的能力不够高。
葡萄酒供应商的智能合约验证证明,检查付款金额是否正确,并向Alice提供完成销售和交付葡萄酒所需的葡萄酒代币。
当葡萄酒供应商带着葡萄酒出现在她的公寓时,无需再次证明她的年龄。
草案接口
/* 每个证明发行者都应该为他们发布的
* 证明提供他们自己的 verify()。 这有两个原因。 首先,我们需要为除
* 我们推荐的Merkle Tree格式之外的其他新证明方法
* 留出空间。 其次,证明的有效性可能取决于只有证明人
* 知道的上下文。 例如,作为在成功兑换美国运通信用时
* 发出的证明的票证 */
contract Issuer {
struct Attestation
{
bytes32[] merklePath;
bool valid;
uint8 v;
bytes32 r;
bytes32 s;
address attestor;
address recipient;
bytes32 salt;
bytes32 key;
bytes32 val;
}`
/* 验证证明的真实性 */
function verify(Attestation attestation);
function addattestorKey(address newAttestor, string capacity, uint expiry);
/* 这应该首先调用revoke */
function replaceKey(address attestorToReplace, string capacity, uint expiry, address newAttestor);
/* 这将撤销单个密钥 */
function removeKey(address attestor);
/* 如果密钥以这种能力存在并且未被撤销或过期 */
function validateKey(address attestor, string capacity) returns (bool);
/* 通过替换布隆过滤器来吊销证明,这有助于保护隐私 */
function revokeAttestations(Bloomfilter b);
}
请单击此处查看此接口的草案实现
相关 ERC
#1388 #1387
Citation
Please cite this document as:
Weiwu Zhang <a@colourful.land>, James Sangalli <j.l.sangalli@gmail.com>, "ERC-1386: 证明管理合约 [DRAFT]," Ethereum Improvement Proposals, no. 1386, September 2018. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-1386.