https://github.com/ethereum/EIPs/blob/master/EIPS/eip-712.md
eip | title | author | discussions-to | status | type | category | created | requires |
---|---|---|---|---|---|---|---|---|
712
|
Ethereum typed structured data hashing and signing
|
Remco Bloemen <remco@wicked.ventures>, Leonid Logvinov <logvinov.leon@gmail.com>, Jacob Evans <jacob@dekz.net>
|
Draft
|
Standards Track
|
Interface
|
2017-09-12
|
155, 191
|
一个对结构化数据的哈希和签名标准
翻译出处:https://segmentfault.com/a/1190000015647458
好好认真看看,为什么有这个,因为我们之前EIP-191都是对字符串等简单数据进行处理,而没有对复杂的结构化数据进行处理,如结构体等
简易大纲
对数据签名是一个已经被解决的问题如果我们只关注那些字节字符串。遗憾的是在这个真实的世界里,我们关心的是那些复杂的、有意义的信息。把结构化数据进行哈希处理不是件小事,错误的话会导致系统丧失安全性。
因此,谚语“不要推出你自己的加密算法”在这里就适用了。相反,我们需要使用一个经过同行评审的、经过充分测试的标准。这个EIP旨在成为这个标准。
摘要
这是一个对结构化数据哈希和签名的标准,而不仅仅是字节字符串。它包含:
- 正确编码功能的理想框架
- 结构化数据和solidity中的结构体类似并且兼容的详细说明
- 这些结构的实例的安全哈希算法
- 这些实例可以被安全地包含在一组可签名消息内
- 领域分离的可扩展机制
- 新的RPC调用:
eth_signTypedData
- 应用于EVM的优化的哈希算法
动机
这个EIP旨在提高链下消息签名对链上的可用性。我们可以看到,因为节省gas以及减少链上交易的原因,采用链下消息签名的需求日益增长。现在已经被签名的消息,展示给用户的是一串难以理解的16进制的字符串,附带一些组成这个消息的项目的上下文。
这里我们大致描绘了编码结构化数据,并且在用户签名时把结构化数据展示给他们确认的场景。下面就是当用户签名时,应该展现给他们的符合EIP规范的消息 的例子:
签名以及哈希概要
签名方案由哈希算法和签名算法组成。以太坊选择的签名算法是secp256k1
,哈希算法选择了keccak256
,这是一个从字节串