EIP-712是一种更高级、更安全的交易签名方法。我们可以在UniswapV2的Periphery合约中看到EIP-712的实现。
但对于EIP-712却很难被我们普通人所理解,本文就是根据一个示例来具体体验EIP-712,以达到对其的更好理解。
在GitHub中有许多文章和示例解释和展示了如何使用EIP-712,但在理解它作为一个整体是如何工作的以及前端代码和智能合约是如何关联的方面有很多困难。这是EIP712的一个示例(不是解释)。先决条件和使用的版本。
Solidity基础知识
npm7.19.1
节点16.2.0
Metamask9.8.4
truffle5.4.0
EIP-712
EIP-712是一种更高级、更安全的交易签名方法。使用该标准不仅可以签署交易并且可以验证签名,而且可以将数据与签名一起传递到智能合约中,并且可以根据该数据验证签名以了解签名者是否是实际发送该签名的人要在交易中调用的数据。
QCP Capital:不太可能很快在美国看到其第一个BTC现货ETF:金色财经报道,贸易公司QCP Capital表示,不太可能很快在美国看到其第一个BTC现货ETF。虽然机构对比特币领域的参与注定会增加,但SEC目前的构成意味着现货 ETF 获得批准的可能性仍然不大。现任 SEC 主席Gary Gensler的领导让情况变得更加复杂,在他的领导下,该机构对主要加密货币交易所币安 (Binance) 和 Coinbase提起了诉讼。然而,由于 Gensler 担任 SEC 负责人,我们对短期内 ETF 的实际批准并没有信心。
QCP补充表示,其最近的表现标志着自 2020 年底以来最急剧的复苏,当时比特币突破了2017年以来的历史新高。[2023/6/23 21:55:14]
EIP-712提出了数据的标准结构和从结构化消息生成散列的定义过程。然后使用此散列生成签名。通过这种方式,为发送交易生成的签名与为验证身份或任何其他目的生成的签名之间就有了明显的区别。EIP-712草案将签名方案背后的动机表述为:
数据:以太坊一个月内上涨80%,或将延续涨势:8月13日消息,Santiment提供的数据显示,在过去的一个月里,以太坊的价格大幅上涨了约80%,此外,其他山寨币自6月以来也表现良好。其分析团队表示,这种增长很有可能会继续下去。
今天早些时候,以太坊重新回到了2000美元的价格关口,上一次出现在6月。(U.Today)[2022/8/13 12:23:12]
提高链上使用的链下消息签名的可用性。我们看到越来越多的人采用链下消息签名,因为它节省了gas,减少了区块链上的交易数量。
EIP-712是类型化结构化数据的哈希和签名的标准,而不仅仅是字节字符串。它包括一个
编码函数正确性的理论框架,
与solid结构相似并兼容的结构化数据规范,
安全哈希算法用于这些结构的实例,
在可签名消息集中安全包含这些实例,
一个可扩展的域分离机制,
新的RPC调用eth_signTypedData,
以太坊开发人员修复一个EIP-1559重大漏洞:来自瑞典的以太坊核心开发人员Martin Holst Swende发现EIP-1559中的一个重大漏洞,由于EIP-1559没有限制用户用于加快交易速度而支付的最大金额,因此,攻击者可以插入一个高得离谱的数字来压倒网络,即使他们没有资金支付小费,最终大量虚假的交易可能使网络不堪重负。开发人员已经向EIP-1559添加四项检查,并修复了该漏洞。(decrypt)[2021/5/30 22:57:01]
EVM中哈希算法的优化实现。
EIP-712的实现可以在UniswapV2的Periphery合约中看到,它通过许可移除流动性,最终调用UniswapV2Core中的方法来完成这一操作。
前端的签名被传递给Periphery中的方法,签名被用来代表Core中使用该方法的用户批准Router合约。
示例代码
我们的示例将使用EIP-721提案用数据(地址、storedData的值和截止日期)签署交易,这些数据用于更改合约中变量的值。
动态 | 一个不知名旷工在过去24小时累计获得44%BCH区块:据Trustnodes4月29日消息,在过去的七天里,一个不知名旷工已经获得了37%的比特币现金(BCH)区块,并且在过去24小时内达到了44%,奇怪的是,他用比特币发明家中本聪(Satoshi Nakamoto)标记区块,也许是想给人一种暗示或者分散注意力。[2019/4/30]
如果签名和散列给出了签署人的地址,并且没有超过截止日期,则更改storedData的值。
这是一个无用的例子,但理解了它将确保您可以在其他地方使用该标准。正确使用EIP-712是创建一个ERC20许可证,就像Uniswap团队所做的那样。
步骤1
继续克隆truffle的reactbox。
我们将根据需要简单地调整和添加代码,以使EIP-712正常工作。
步骤2
数据是EIP-712中最关键的部分。这些要签名的数据必须符合预定义的格式。它必须有一个EIP712Domain和要签名的数据(在我们的示例中设置)。两者的组合将被签名并发送给智能合约进行验证。
声音 | 国家金融与发展实验室理事长:现在基本上处在一个炒币的阶段:8月5日与北京召开的首届中国普惠金融创新发展峰会会上,国家金融与发展实验室理事长、中国社会科学院学部委员李扬致辞中指出,金融科技可以从五个角度来理解:大数据、智能化、互联网、分布式计算技术和安全技术。谈到分布式计算技术时,李扬强调要厘清相关概念,分布式计算技术实际上是一套保密的技术,一套帐本,可以替代原先那些收集、整理、保持、处置、分发数据的一套东西。著名的区块链含在分布式计算技术之中,但绝对不能把它搞的金融科技变成区块链了,区块链又变成炒币了,现在基本上处在一个炒币的阶段,这样发展下去会误入歧途。[2018/8/5]
在EIP-712下签名的每个数据必须有一个EIP712Domain和另一个数据。这两者的结构可以是任何东西,但必须在JS代码和SC代码上相同。
当使用该提案时,EIP712Domain的结构是一个被广泛接受的标准。
?EIP-712数据标准
EIP712Domain有一些参数,这些参数指定在哪个网络和哪个特定合约上将用于验证签名。另一份具有相同代码的合同将无法验证该签名。
步骤3
让我们添加一个按钮,当单击该按钮时,将弹出元掩码,使用eth_signTypedData_v3方法对数据进行签名。
步骤4
一旦签署了上面定义的数据使用eth_signTypedData_v3方法我们得到了签名和签名分割成其r,s,和v组件并将其发送到智能合约将使用ercrecover这些参数和数据哈希恢复签名者的公钥。
拆分签名
步骤5
编写智能合约。
就像我们定义了包含EIPdomain和要签名的数据的JS代码一样,智能合约也需要两个变量来表示每个EIPdomain的散列数据和我们的数据(在本例中是设置数据)。
使用ercrecover
在UI端,我们对数据进行签名,并将r、s和v发送给智能合约。
上面的代码做了两件事,首先它散列数据并生成它们的散列。接下来,它使用该数据的散列(在SC中称为散列)和签名,使用ercrecover方法生成签名者的公钥。
上面显示的数据的两个kecak哈希值应该类似于在outJS代码中定义的数据结构。如果两者不同,则无法恢复签名者的地址。
签名数据的结构
步骤6
将infura中的助记符添加到truffle-config.js文件(第3行),并指定部署者的地址(第18行)。上面的例子使用了rinkebytestnet,但是任何测试都可以使用,并查看truffle文档来部署到其他测试网。
然后部署合同。部署后复制simplestorage的地址,替换为verifyingContract下app.js第76行的地址。
部署代码片段
步骤7
进入client目录,运行npmrunstart启动react应用。
按下'Presstosign'按钮,然后在元掩码弹出的签名请求上签名。接下来,确认交易以设置智能合约上的值。
交易完成后,刷新webapp以查看所反映的变化。
NFT市场的火热还在继续。根据加密货币分析机构Messari的数据,NFT市场OpenSea在今年已经促成了超过10.2亿美元的交易量.
1900/1/1 0:00:00总价值锁定同时是DeFi中最受欢迎和最容易被误解的指标。总资本分配(TCA)可能是更准确的措辞。TVL暗示价值被“锁定”在协议中,忠诚且坚定不移。不幸的是,对于许多项目而言,情况并非如此.
1900/1/1 0:00:00在加密货币的市值排行中,前十的币种中已经有三种是稳定币,它们分别是USDT、USDC、BUSD,均有美元进行抵押。即使是在市场表现较弱的情况下,稳定币市场也能持续增长.
1900/1/1 0:00:00广州市政府近日印发《广州市建设国家数字经济创新发展试验区实施方案》,《方案》提出率先探索数字经济创新发展新思路、新模式、新路径,将广州打造成为国家数字经济创新发展试验区核心区.
1900/1/1 0:00:00之前,我们发布了加密货币,你中招了吗?(上),今天将继续分享下篇,希望大家仔细阅读,远离局.
1900/1/1 0:00:00在上一篇文章中,Alice和Bob建立了一个双向的支付通道。现在,Alice想要给一个第三方Carol支付1btc。一般来说,Alice和Carol需要在彼此之间开设一个支付通道.
1900/1/1 0:00:00