签署数据

使用 TokenPocket Extension 签署数据

如果您想跳转到一些工作签名示例,可以访问此存储库.

如果你想阅读这些方法的 JavaScript 实现,它们都可以在 npm 包eth-sig-util 中找到.

介绍

TokenPocket Extension 目前有六种签名方法,我们目前的五种方法是:

  • eth_sign

  • personal_sign

  • signTypedData(目前与 相同signTypedData_v1

  • signTypedData_v1

  • signTypedData_v3

  • signTypedData_v4

eth_sign是一种开放式签名方法,允许对任意散列进行签名,这意味着它可用于对交易或任何其他数据进行签名,使其具有危险的网络钓鱼风险。

出于这个原因,我们通常不鼓励在生产中使用这种方法。但是,一些应用程序出于易用性的考虑而使用此方法,因此我们支持它,以免破坏活动项目的工作流程。

最终,personal_sign 规范被提议,它为数据添加了一个前缀,因此它不能模拟交易。我们还使此方法能够在 UTF-8 编码时显示人类可读的文本,使其成为站点登录的流行选择。

签署类型的数据 v1

这个早期版本的规范缺乏一些后来的安全改进,通常应该被忽略以支持signTypedData_v3

也称为signTypedData,这种方法是原始的以状态通道为中心的签名方法。

signTypedData系列有几个主要的设计考虑:

  • 在链上验证便宜

  • 还是有点可读性

  • 难以钓鱼签名

如果链上可验证性成本对您来说是一个高优先级,您可以考虑使用它。

签署类型的数据 v3

该方法signTypedData_v3当前代表EIP-712 规范的最新版本,使其成为我们迄今为止签署成本低廉的链上数据的最安全方法。

签署类型的数据 v4

该方法signTypedData_v4当前代表EIP-712 规范的最新版本,增加了对数组的支持,并对结构的编码方式进行了重大修复。

符号类型数据消息参数

domain:域或域签名很重要,因为它:

  • 仅适用于特定网站/合约。

  • 确保签名仅在预期有效的地方有效。

  • 允许您拥有验证地址的唯一合约。

  • 这是一组限制签名有效位置的信息。

  • 这是有效性域。可以是合约、网址等。

  • DApp 告诉你的具体需要放在这里。

  • 确保您的签名不会与其他签名发生冲突。

chainId:chainId 告诉你你在哪个链上,这很重要,因为:

  • 它确保在 Rinkeby 上的签名在另一条链上无效,例如以太坊主网。

name:这主要是出于 UX(用户体验)目的。

  • 例如,作为用户,您正在使用 Ether Mail 应用程序并出现一个用于加密猫交换的对话框,由于签名上的名称,这会引起怀疑。

verifyingContract: 这是额外的保证。即使两个开发人员最终创建了一个同名的应用程序,他们也永远不会拥有相同的合约地址。

  • 如果您不确定名称,这将显示负责消息验证的合约。

  • 该字段也将采用 url。

version: 这告诉你当前版本的域对象。

message: 对你想要的结构完全开放。每个字段都是可选的。

下面是使用 TokenPocket Extension 签署类型数据的示例。参考这里

例子

<div>
  <h3>Sign Typed Data V4</h3>
  <button type="button" id="signTypedDataV4Button">sign typed data v4</button>
</div>

Last updated