https://github.com/ethereum/EIPs/blob/master/EIPS/eip-191.md

eip title author status type category created
191
Signed Data Standard
Martin Holst Swende (@holiman), Nick Johnson <arachnid@notdot.net>
Draft
Standards Track
ERC
2016-01-20

摘要

这个ERC提议了一个关于如何在以太坊合约中处理签名数据的详细说明。

动机

一些接受presigned交易的多签名钱包应用已经出现了。一笔presigned交易就是一堆二进制的signed_data,同时包含签名(rsv)。因为对signed_data的解释并不具体,导致了一些问题:

  1. 标准的以太坊交易可以作为signed_data提交。一笔以太坊交易可以拆解成这几个组件:RLP<nonce, gasPrice, startGas, to, value, data>(这里被称为RLPdata),r,s,v。如果对signed_data没有句法约束,这就意味着RLPdata可以用作句法有效的presigned交易。
  2. 多签名钱包同样也有问题:presigned交易并不和一个特定的validator绑定在一起,举一个特定钱包的例子:

    i. 用户ABC2/3-钱包X

    ii. 用户ABD2/3-钱包Y

    iii. 用户AB提交了一个presigned交易给X

    iv. 攻击者可以复用他们的给X的presigned交易,然后提交给Y

说明

我们为signed_data提议了以下格式:

0x19 <1 byte version> <version specific data> <data to sign>.

版本0对于版本特定数据有<20字节地址>,这个地址就是预期的验证者。在多签名钱包的例子中,就是钱包自己的地址。

最初的0x19字节用来确保signed_data不是有效的RLP

对于单个值为[0x00, 0x7f]的字节,字节的RLP编码就是它本身

这意味着任何signed_data不能是一个RLP结构,而是1个字节的RLP,后面再加上一些别的内容。

因此,任何ERC-191 signed_data永远不会是一笔以太坊交易。

额外地,之所以用0x19是因为自从ethereum/go-ethereum#2940,下面的一行文字会在personal_sign方法中预添加在要签名的hash数据之前:

"\x19Ethereum Signed Message:\n" + len(message).

因此,使用0x19是为了可以扩展这个模式,通过定义一个版本 0x45E)来处理这种类型的签名。

版本字节登记

Version byte EIP Description
0x00 191 Data with intended validator
0x01 712 Structured data
0x45 191 personal_sign messages

就是如果版本为0x00,那么后面还会跟着intened validator(address),然后才是data

如果是0x01,那么后面后面跟着的就是结构化数据,什么是结构化数据,看EIP-721

如果是0x45,那么后面后面跟着的就是进行personal_sign后的信息

ethereum/EIPs-191 Signed Data Standard的更多相关文章

  1. ethereum/EIPs-1077 Executable Signed Messages

    https://github.com/alexvandesande/EIPs/blob/ee2347027e94b93708939f2e448447d030ca2d76/EIPS/eip-1077.m ...

  2. ethereum/EIPs-712 Ethereum typed structured data hashing and signing

    https://github.com/ethereum/EIPs/blob/master/EIPS/eip-712.md eip title author discussions-to status ...

  3. ethereum/EIPs-1078 Universal login / signup using ENS subdomains

    https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1078.md eip title author discussions-to status ...

  4. ethereum/EIPs-1271 smart contract

    https://github.com/PhABC/EIPs/blob/is-valid-signature/EIPS/eip-1271.md Standard Signature Validation ...

  5. ethereum/EIPs-725

    https://github.com/ethereum/EIPs/blob/master/EIPS/eip-725.md eip title author discussions-to status ...

  6. Ethereum White Paper

    https://github.com/ethereum/wiki/wiki/White-Paper White Paper EditNew Page James Ray edited this pag ...

  7. go ethereum源码分析 PartIV Transaction相关

    核心数据结构: core.types.transaction.go type Transaction struct { data txdata // caches hash atomic.Value ...

  8. ethereum/EIPs-1

    https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1.md 介绍了什么是EIP等等的详细信息: eip title status type a ...

  9. solidity return data和revert/require的reason string的获得

    前言: 在使用solidity写智能合约的时候,会使用到revert和require来进行断言,比如: require(tokenOwner[tokenId] == 0x0,'this is not ...

随机推荐

  1. C++注入记事本升级版,给记事本弄爱心

    #include <iostream>; using namespace std; #include <windows.h>; #include <tlhelp32.h& ...

  2. 以杨辉三角为例,从内存角度简单分析C语言中的动态二维数组

    学C语言,一定绕不过指针这一大难关,而指针最让人头疼的就是各种指向关系,一阶的指针还比较容易掌握,但一旦阶数一高,就很容易理不清楚其中的指向关系,现在我将通过杨辉三角为例,我会用四种方法从内存的角度简 ...

  3. 【Dubbo&&Zookeeper】2、 windows平台dubbo-admin管理平台搭建

    一.前言 dubbo的使用,其实只需要有注册中心,消费者,提供者这三个就可以使用了,但是并不能看到有哪些消费者和提供者,为了更好的调试,发现问题,解决问题,因此引入dubbo-admin.通过dubb ...

  4. SpringBoot与Cloud版本匹配问题

    在使用SpringCloud的时候需要在SpringBoot工程的pom.xml中引入 <dependencyManagement> <dependencies> <de ...

  5. Python简单的网络编程

    OSI 模型介绍 应用层 -- 对接受的数据进行解释.加密与解密.压缩与解压缩 会话层 -- 通过传输层(端口号: 传输端口和接受端口) 建立数据传输的通路 传输层 -- 定义了一些传输数据的协议和端 ...

  6. 自定义jq插件,鼠标悬浮展示图片或者视频放大图,可自定义展示内容

    网站项目经常会遇到一些视频或者图片素材的展示功能,那么就需要自己写一个功能,就是在一些列表页面你想要是这个数据的详细内容,弹框在页面某个位置 例如这是视频悬浮展示效果,可自定义自动播放等属性标签 又例 ...

  7. java获取文件路径

    情况:工程项目没有放到tomcat下,在eclipse运行 1.获取项目根目录,根据在哪里运行 2. 3.从最终生成的.class文件为着手点 4.在controller下

  8. Linux高可靠技术

    1.进程挂死时,有后台监控程序检测重新拉起. 2.进程占用系统资源超过ulimit限定的资源时,会被ulimit杀死,同时配合后台监控程序,重新拉起进程,实现进程可靠性. 3.Linux系统的高可靠性 ...

  9. 通用triggerEvent方法

    假设有一个id为testA的a元素,然后有以下代码(jquery已存在): $(document).ready(function(){ $('#testA').on('testEvent', func ...

  10. [20171113]修改表结构删除列相关问题4.txt

    [20171113]修改表结构删除列相关问题4.txt --//连续写了3篇修改表结构删除列的相关问题,链接如下: http://blog.itpub.net/267265/viewspace-214 ...