ethereum/EIPs-191 Signed Data Standard
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,同时包含签名(r, s, v)。因为对signed_data的解释并不具体,导致了一些问题:
- 标准的以太坊交易可以作为
signed_data提交。一笔以太坊交易可以拆解成这几个组件:RLP<nonce, gasPrice, startGas, to, value, data>(这里被称为RLPdata),r,s,v。如果对signed_data没有句法约束,这就意味着RLPdata可以用作句法有效的presigned交易。 - 多签名钱包同样也有问题:
presigned交易并不和一个特定的validator绑定在一起,举一个特定钱包的例子:i. 用户
A,B和C有2/3-钱包Xii. 用户
A,B和D有2/3-钱包Yiii. 用户
A和B提交了一个presigned交易给Xiv. 攻击者可以复用他们的给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是为了可以扩展这个模式,通过定义一个版本 0x45(E)来处理这种类型的签名。
版本字节登记
| 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的更多相关文章
- ethereum/EIPs-1077 Executable Signed Messages
https://github.com/alexvandesande/EIPs/blob/ee2347027e94b93708939f2e448447d030ca2d76/EIPS/eip-1077.m ...
- 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 ...
- 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 ...
- ethereum/EIPs-1271 smart contract
https://github.com/PhABC/EIPs/blob/is-valid-signature/EIPS/eip-1271.md Standard Signature Validation ...
- ethereum/EIPs-725
https://github.com/ethereum/EIPs/blob/master/EIPS/eip-725.md eip title author discussions-to status ...
- Ethereum White Paper
https://github.com/ethereum/wiki/wiki/White-Paper White Paper EditNew Page James Ray edited this pag ...
- go ethereum源码分析 PartIV Transaction相关
核心数据结构: core.types.transaction.go type Transaction struct { data txdata // caches hash atomic.Value ...
- ethereum/EIPs-1
https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1.md 介绍了什么是EIP等等的详细信息: eip title status type a ...
- solidity return data和revert/require的reason string的获得
前言: 在使用solidity写智能合约的时候,会使用到revert和require来进行断言,比如: require(tokenOwner[tokenId] == 0x0,'this is not ...
随机推荐
- c# 检测是否有Sql非法字符
/// <summary> /// 检测是否有Sql危险字符 /// </summary> /// <param name="str">要判断字 ...
- c# 过滤html
public static string StripHTML(string html) { try { System.Text.RegularExpressions.Regex regex1 = ne ...
- asp.net前台页面与后台之间传值,
在前台用 js 获取到的 “值 ”需要传到后台,在后台调用, ****** 原有传入的 “值 ” 不要被覆盖 1.最简单的在页面写一个隐藏表单,隐藏标签,把获取到的值赋给隐藏标签之后 ...
- WebForm 【Repeater】展示数据
在 Webform 数据展示中 界面层 : HTLM 业务逻辑层 :只能用 C# Repeater 重复器 能够用来循环展示数据 具有5种模板 HeaderTemplat ...
- Linux 中的命令链接操作符
&& 与 || 配合 eg: cat test.sh #!/bin/bash [ -e /etc/hosts ] && echo "ok" || e ...
- Sharepoint 2013 Gatherer 数据库的架构版本低于此 Gatherer 应用程序支持的向后兼容的最低架构版本
管理中心 ->升级和迁移 ->查看数据库状态 解决方法: 开始-运行(以管理员身份运行),输入如下命令. cd C:\Program Files\Common Files\Microso ...
- Visual Studio 2015速递(4)——高级特性之移动开发
系列文章 Visual Studio 2015速递(1)——C#6.0新特性怎么用 Visual Studio 2015速递(2)——提升效率和质量(VS2015核心竞争力) Visual Studi ...
- WebLogic 8的安装与配置详谈
本文主要是以windouw下32位的版本为例展开介绍,主要包括其安装与配置. 一.图形界面安装过程 1.双击安装程序server815_win32.exe,开始进行程序的安装. 2.点击Next按钮进 ...
- loadrunner 脚本开发-执行操作系统命令
脚本开发-执行操作系统命令 by:授客 QQ:1033553122 思路: 用loadrunner system()函数 函数原型: int system( const char *string ); ...
- 《数据库系统概念》1-数据抽象、模型及SQL
DBMS(database-management system)包括数据库和用于存取数据的程序,DBMS的基本目标是为数据的存取提供方便.高效的方式,此外对大多数企业来说,数据是非常重要的,所以DB ...