EIP-712是一种更高级、更安全的交易签名方法。我们可以在Uniswap V2的Periphery 合约中看到EIP-712的实现。
但对于EIP-712却很难被我们普通人所理解,本文就是根据一个示例来具体体验EIP-712,以达到对其的更好理解。
在GitHub中有许多文章和示例解释和展示了如何使用EIP-712,但在理解它作为一个整体是如何工作的以及前端代码和智能合约是如何关联的方面有很多困难。这是EIP712的一个示例(不是解释)。先决条件和使用的版本。
Solidity基础知识
npm 7.19.1
节点 16.2.0
Metamask 9.8.4
truffle 5.4.0
EIP-712是一种更高级、更安全的交易签名方法。使用该标准不仅可以签署交易并且可以验证签名,而且可以将数据与签名一起传递到智能合约中,并且可以根据该数据验证签名以了解签名者是否是实际发送该签名的人要在交易中调用的数据。
CBA首席执行官:加密货币是一个银行需要充分了解的领域:9月23日消息,澳大利亚联邦银行(CBA)首席执行官Matt Comyn在经济常设委员会发表讲话时表示:“加密货币本身是一个广阔、迷人且复杂的领域,银行需要充分了解这一领域,但因为该行业相关风险的存在,我们通常对加密货币没有采取特别支持的态度。”(Itnews)[2021/9/23 17:00:01]
EIP-712提出了数据的标准结构和从结构化消息生成散列的定义过程。然后使用此散列生成签名。通过这种方式,为发送交易生成的签名与为验证身份或任何其他目的生成的签名之间就有了明显的区别。EIP-712草案将签名方案背后的动机表述为:
提高链上使用的链下消息签名的可用性。我们看到越来越多的人采用链下消息签名,因为它节省了gas,减少了区块链上的交易数量。
EIP-712是类型化结构化数据的哈希和签名的标准,而不仅仅是字节字符串。它包括一个
Blockdata:机构级DeFi有望成为一个价值万亿美元的行业:9月17日消息,据区块链研究公司Blockdata的说法,如果世界上最大的100家银行向DeFi投资,即使是实验性的投资,也可能会有1万亿美元涌入。根据区块链数据分析公司Chainalysis的数据,DeFi的采用在很大程度上是由大型投资者推动的——2021年第二季度,超过1000万美元的大型机构交易占DeFi交易的60%以上,而所有加密货币交易的比例不到50%。
银行也在关注DeFi。最初反对加密货币的美国投资银行摩根大通看好加密货币的质押业务,目前该业务每年产生90亿美元的收入,到2022年以太坊2.0发布时价值可能超过200亿美元,到2025年价值可能超过400亿美元。55家世界最大的100家银行持有94万亿美元的资产,它们投资于加密货币并非不可能。Blockdata联合创始人Jonathan Knegtel表示:“如果一个或两个主要银行找到一种方法,即使仅仅向DeFi注资1%,也将为其他不甘落后的银行提供一条新的路径。94万亿美元的1%,即0.94万亿美元流动性将注入DeFi生态系统,大约是加密货币市值的一半,而对传统金融体系来说只是沧海一粟。”(Forkast)[2021/9/17 23:32:16]
编码函数正确性的理论框架,
Purpose Bitcoin ETF一个月来共流入3446枚比特币,日均增持86枚:截至6月24日,自5月15日以来Purpose Bitcoin ETF共流入3446枚BTC,平均每天增持86.15枚BTC,目前Purpose Bitcoin ETF总计持有21114枚BTC。(Glassnode)[2021/6/25 0:06:21]
与solid结构相似并兼容的结构化数据规范,
安全哈希算法用于这些结构的实例,
在可签名消息集中安全包含这些实例,
一个可扩展的域分离机制,
新的RPC调用eth_signTypedData,
EVM中哈希算法的优化实现。
EIP-712的实现可以在Uniswap V2的Periphery 合约中看到,它通过许可移除流动性,最终调用Uniswap V2 Core中的方法来完成这一操作。
肖风:区块链技术将在5到10年后带来比平台效应更高一个级别的生态效应:万向区块链董事长肖风最近在接受北大金融评论杂志采访时表示,区块链本质上是一套对信任背书的算法,可以让陌生人在一起做事情,让交易成本下降,尤其是“网络化+ 区块链”后,连信任的成本都降到零了,这时公司就没有存在的必要了。公司不存在了,产权保护也就没有必要了,所以在公有区块链上,所有的代码都是开源的。开源之后就带来生态效应,建立起了生态系统。我觉得再有5 年、10 年的发展,就可以看到比平台效应更高一个级别的生态效应。[2020/4/23]
前端的签名被传递给Periphery 中的方法,签名被用来代表Core中使用该方法的用户批准Router合约。
我们的示例将使用EIP-721提案用数据(地址、storedData的值和截止日期)签署交易,这些数据用于更改合约中变量的值。
分析 | MORECOIN研究院:DeFi现阶段本质上是一个去中心化:MORECOIN研究院在《DeFi用户实证研究报告》中指出,DeFi是针对币圈(公链)用户的去中心化金融体系,而传统金融业务是针对企业(联盟链)的去中介金融服务,两者在监管、性能、数据等方面有本质区别。从DeFi用户数据来看,上千款产品中前面三款产品占据约90%的资金,为用户提供了一个极低手续费甚至为0的杠杠和借贷工具。而以token来投资传统资产标的,因预言机、项目方跑路问题,某种程度上是以token对投资标的。在现阶段币本位的DeFi本质上是一个去中心化。[2019/5/9]
如果签名和散列给出了签署人的地址,并且没有超过截止日期,则更改storedData的值。
这是一个无用的例子,但理解了它将确保您可以在其他地方使用该标准。正确使用 EIP-712 是创建一个 ERC20 许可证,就像 Uniswap 团队所做的那样。
继续克隆 truffle 的react box。
我们将根据需要简单地调整和添加代码,以使EIP-712正常工作。
数据是EIP-712中最关键的部分。这些要签名的数据必须符合预定义的格式。它必须有一个EIP712Domain和要签名的数据(在我们的示例中设置)。两者的组合将被签名并发送给智能合约进行验证。
在EIP-712下签名的每个数据必须有一个EIP712Domain和另一个数据。这两者的结构可以是任何东西,但必须在JS代码和SC代码上相同。
当使用该提案时,EIP712Domain的结构是一个被广泛接受的标准。
EIP-712 数据标准
EIP712Domain有一些参数,这些参数指定在哪个网络和哪个特定合约上将用于验证签名。另一份具有相同代码的合同将无法验证该签名。
让我们添加一个按钮,当单击该按钮时,将弹出元掩码,使用eth_signTypedData_v3方法对数据进行签名。
一旦签署了上面定义的数据使用eth_signTypedData_v3方法我们得到了签名和签名分割成其r, s,和v组件并将其发送到智能合约将使用ercrecover这些参数和数据哈希恢复签名者的公钥。
拆分签名
编写智能合约。
就像我们定义了包含EIPdomain和要签名的数据的JS代码一样,智能合约也需要两个变量来表示每个EIPdomain的散列数据和我们的数据(在本例中是设置数据)。
使用 ercrecover
在UI端,我们对数据进行签名,并将r、s和v发送给智能合约。
上面的代码做了两件事,首先它散列数据并生成它们的散列。接下来,它使用该数据的散列(在SC中称为散列)和签名,使用ercrecover方法生成签名者的公钥。
上面显示的数据的两个kecak哈希值应该类似于在out JS代码中定义的数据结构。如果两者不同,则无法恢复签名者的地址。
签名数据的结构
将infura中的助记符添加到truffle-config.js文件(第3行),并指定部署者的地址(第18行)。上面的例子使用了rinkeby testnet,但是任何测试都可以使用,并查看truffle文档来部署到其他测试网。
然后部署合同。部署后复制simplestorage的地址,替换为verifyingContract下app.js第76行的地址。
部署代码片段
进入client目录,运行npm run start启动react应用。
按下' Press to sign '按钮,然后在元掩码弹出的签名请求上签名。接下来,确认交易以设置智能合约上的值。
交易完成后,刷新webapp以查看所反映的变化。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。