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是一种更高级、更安全的交易签名方法。使用该标准不仅可以签署交易并且可以验证签名,而且可以将数据与签名一起传递到智能合约中,并且可以根据该数据验证签名以了解签名者是否是实际发送该签名的人要在交易中调用的数据。
Messari创始人:美国政府是比特币的最后一个对手:金色财经报道,数据与研究公司Messari的联合创始人Ryan Selkis最近发布了他的2021加密行业论文,研究了行业状况并预测了未来的发展。Selkis在这份报告中解释说,美国政府是他认为的比特币必须战胜的剩下的唯一对手。[2020/12/9 14:38:09]
EIP-712提出了数据的标准结构和从结构化消息生成散列的定义过程。然后使用此散列生成签名。通过这种方式,为发送交易生成的签名与为验证身份或任何其他目的生成的签名之间就有了明显的区别。EIP-712草案将签名方案背后的动机表述为:
提高链上使用的链下消息签名的可用性。我们看到越来越多的人采用链下消息签名,因为它节省了gas,减少了区块链上的交易数量。
EIP-712是类型化结构化数据的哈希和签名的标准,而不仅仅是字节字符串。它包括一个
编码函数正确性的理论框架,
与solid结构相似并兼容的结构化数据规范,
声音 | BitMEX研究:今天早上比特币出现了一个孤块,这是自2017年10月来首次出现:BitMEX Research在推特表示:“今天早上比特币出现了一个孤块(orphan block) ,这是我们的节点自2017年10月以来第一次检测到这一情况。”[2019/5/28]
安全哈希算法用于这些结构的实例,
在可签名消息集中安全包含这些实例,
一个可扩展的域分离机制,
新的RPC调用eth_signTypedData,
EVM中哈希算法的优化实现。
EIP-712的实现可以在UniswapV2的Periphery合约中看到,它通过许可移除流动性,最终调用UniswapV2Core中的方法来完成这一操作。
前端的签名被传递给Periphery中的方法,签名被用来代表Core中使用该方法的用户批准Router合约。
示例代码
我们的示例将使用EIP-721提案用数据(地址、storedData的值和截止日期)签署交易,这些数据用于更改合约中变量的值。
动态 | 泰国证券公司协会考虑建立一个联合加密货币交易所:泰国证券公司协会(ASCO)正在考虑建立一个联合加密货币交易所。这批证券公司希望获得泰国证券交易委员会(SEC)的许可。ASCO主席Pattera Dilokrungthirapop告诉当地媒体说,该组织的几名公司成员热衷于开设数字货币交易所。与此同时,其他公司也有兴趣经营ICO门户网站,或者成为加密货币领域的经纪人和交易商。[2018/7/3]
如果签名和散列给出了签署人的地址,并且没有超过截止日期,则更改storedData的值。
这是一个无用的例子,但理解了它将确保您可以在其他地方使用该标准。正确使用EIP-712是创建一个ERC20许可证,就像Uniswap团队所做的那样。
步骤1
继续克隆truffle的reactbox。
我们将根据需要简单地调整和添加代码,以使EIP-712正常工作。
步骤2
数据是EIP-712中最关键的部分。这些要签名的数据必须符合预定义的格式。它必须有一个EIP712Domain和要签名的数据(在我们的示例中设置)。两者的组合将被签名并发送给智能合约进行验证。
国家邮政局发展研究中心主任助理:在快递物流领域,区块链也可以建成一个可信任的联盟体系:国家邮政局发展研究中心主任助理方玺在一个会议上分享了中国快递物流领域区块链发展及未来趋势。他表示,区块链可以实现实时交互,降低成本,保证数据安全,这为中国快递物流广泛应用区块链技术形成了很好的机遇和空间。在快递物流领域,区块链也可以建成一个可信任的联盟体系,发挥合力降低信任成本,推动区块链技术应用和商业模式创新,促进区块链技术在中国快递物流领域又快、又稳、又好地发展。[2018/5/18]
在EIP-712下签名的每个数据必须有一个EIP712Domain和另一个数据。这两者的结构可以是任何东西,但必须在JS代码和SC代码上相同。
当使用该提案时,EIP712Domain的结构是一个被广泛接受的标准。
货币中心研究总监Peter Van Valkenburgh:加密货币是一个可选项:“审查加密货币和ICO市场”的听证会上众议员布拉德·谢尔曼(Brad Sherman)在会上提出疑问,“有什么理由,人们必须要选择加密货币”,对此,货币中心研究总监Peter Van Valkenburgh回答:生活中你可以使用信用卡、银行卡,加密货币是“可选的”。[2018/3/14]
?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以查看所反映的变化。
Glassnode最近的区块链数据显示,立法者和监管机构对加密市场日益严格的审查,包括围绕美国基础设施法案的加密税收报告条款的辩论,可能会吓到散户投资者,但不会吓到机构投资者.
1900/1/1 0:00:008月3日,一篇题为《“精神鸦片”竟长成数千亿产业》的新闻报道将网络游戏称为新型“”、“精神鸦片”,并迅速刷屏,热议沸然,尽管经济参考报随后立即删除了原文,但受消息面影响,当日游戏股重挫,腾讯一度跌超10%,网易跌超15%.
1900/1/1 0:00:00PolyNetwork被攻击之后的52个小时内,在安全公司、白帽黑客、交易平台等多方的联手下,黑客悉数归还了被转移的资产。几乎是同时,链上信用借贷项目MazeProtocol团队开发的产品NekoNetwork也遭到黑客攻击.
1900/1/1 0:00:00在数字化转型的大背景下,全球主要国家都在加快布局区块链技术,抢占新一轮创新变革的高地。 1.区块链技术概述 技术特征 区块链技术是密码学、共识算法、P2P通信、智能合约等多种技术的集成创新,打造了一种全新的分布式基础架构与计算范式.
1900/1/1 0:00:00金色财经区块链8月10日讯??区块链数据显示,尽管美国监管机构有很大可能性实施加密税收计划,但机构投资者还是愿意回归比特币.
1900/1/1 0:00:00周二,?PolyNetwork?官方推特称该项目遭到黑客攻击,直接损失了价值超过6亿美元的加密资产。这次攻击是迄今为止最大的?DeFi?黑客攻击,损失直接超过了2021年所有DeFi黑客攻击的总和.
1900/1/1 0:00:00