资讯专栏INFORMATION COLUMN

EIP-191(关于如何在以太坊合约中处理签名数据的详细说明)

curlyCheng / 923人阅读

摘要:改标准试图拓展以太坊的签名规则,为签名内容的可读化提供的重要的基础。摘要这个提议了一个关于如何在以太坊合约中处理签名数据的详细说明。如果对没有句法约束,这就意味着可以用作句法有效的交易。

本文翻译了官网EIP-191的相关内容。改标准试图拓展以太坊的签名规则,为签名内容的可读化提供的重要的基础。
摘要

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

动机

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

标准的以太坊交易可以作为signed_data提交。一笔以太坊交易可以拆解成这几个组件:RLP(这里被称为RLPdata),r,s,v。如果对signed_data没有句法约束,这就意味着RLPdata可以用作句法有效的presigned交易。

多签名钱包同样也有问题:presigned交易并不和一个特定的validator绑定在一起,举一个特定钱包的例子:

i. 用户A, BC2/3-钱包X

ii. 用户A, BD2/3-钱包Y

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

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

说明

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

0x19 <1 byte version>  .

版本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:
" + len(message).

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

版本字节登记
Version byte EIP Description
0x00 191 Data with intended validator
0x01 712 Structured data
0x45 191 personal_sign messages
举例
function submitTransactionPreSigned(address destination, uint value, bytes data, uint nonce, uint8 v, bytes32 r, bytes32 s)
    public
    returns (bytes32 transactionHash)
{
    // Arguments when calculating hash to validate
    // 1: byte(0x19) - the initial 0x19 byte
    // 2: byte(0) - the version byte
    // 3: this - the validator address
    // 4-7 : Application specific data
    transactionHash = keccak256(byte(0x19),byte(0),this,destination, value, data, nonce);
    sender = ecrecover(transactionHash, v, r, s);
    // ...
}

}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/24166.html

相关文章

  • 我想说技术!

    摘要:有效的数字签名使收件人有理由相信该信息是由已知的发件人认证创建的,发件人不能否认已发送的信息不可否认,并且信息在传输过程中未被更改完整性。当我们说签署交易时,我们实际上是指签署序列化交易数据的哈希。 特殊交易:合约注册 有一种特殊的带有data,没有value的交易。表示注册一个新的合约。合约登记交易被发送到一个特殊的目的地地址,即零地址。简而言之,合约注册交易中的+to+字段包含地址...

    focusj 评论0 收藏0
  • 一个比特币交易完整流程。

    摘要:本文解释了比特币交易的内容,目的和结果。本文底部的信息图提供了从钱包到区块链的整个比特币交易流程的全面说明。在文本中使用的任何地方是比特币交易的缩写。目的比特币交易的目的是将一定数量的比特币的所有权转移到比特币地址。 本文解释了比特币交易的内容,目的和结果。下面的解释适用于新手和中级比特币用户。 作为加密货币用户,你需要熟悉交易雏形——为了你对这种不断发展的创新有信心,以及作为理解新兴...

    My_Oh_My 评论0 收藏0
  • 以太区块链保证Asp.Net CoreAPI安全(上)

    摘要:去中心化应用程序的常见设计不仅依赖于以太坊区块链,还依赖于层。每个用户的所有登录操作在以太坊区块链上变得不可公开。用于验证用户身份的机制与以太坊用于保证以太坊区块链安全性的机制相同。以太坊,主要是针对工程师使用进行区块链以太坊开发的详解。 去中心化应用程序(DApp)的常见设计不仅依赖于以太坊区块链,还依赖于API层。在这种情况下,DApp通过用户的以太坊帐户与智能合约进行交互,并通过...

    Raaabbit 评论0 收藏0
  • 如何理解比特币和区块链?

    摘要:比特币区块链无疑是当今业界的最热门的。目前,每个成功的矿工获得可能每年更换一次或通过比特币社区决策作为成功向区块链添加一块交易的奖励。填写其他详细信息,例如比特币金额和可选说明。 比特币区块链无疑是当今业界的最热门的。通过这篇博客,我将尽力向大家介绍加密货币比特币的概念,以及它如何创造我们称之为区块链的革命性技术。 这个问题经常引起混淆。这篇文章可以快速解释和清理这方面的混乱! 什么是...

    Kosmos 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<