区块链:一个示例来解释EIP-712

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是一种更高级、更安全的交易签名方法。使用该标准不仅可以签署交易并且可以验证签名,而且可以将数据与签名一起传递到智能合约中,并且可以根据该数据验证签名以了解签名者是否是实际发送该签名的人要在交易中调用的数据。

加州大学经济学教授:全球120家央行在同一个区块链的场景遥不可及:金色财经报道,在第三届外滩金融峰会上,加州大学伯克利分校经济学教授巴里·艾肯格林表示,央行数字货币即将到来,而中国人民银行是其中的先行者。但是,在可预见的将来,央行数字货币不会改变现有国际货币体系的结构和运行方式。巴里·艾肯格林表示:“如果要让央行数字货币能够跨境用于国际交易,就必须保证各币种的互换性,各币种需要运行在同一个区块链上。那么由谁来管理这个区块链呢?或者,也可以另设一套基础设施,让运行在不同区块链上的央行数字货币利用这套基础设施进行互换,那么又要由谁来管理这套另设的基础设施呢?” 120家央行在同一个区块链上,就基础设施架构和管理方式等问题达成一致的场景遥不可及。[2021/10/23 20:50:55]

EIP-712提出了数据的标准结构和从结构化消息生成散列的定义过程。然后使用此散列生成签名。通过这种方式,为发送交易生成的签名与为验证身份或任何其他目的生成的签名之间就有了明显的区别。EIP-712草案将签名方案背后的动机表述为:

报告:一个南美国家近 50% 的居民表示他们欢迎采用比特币作为其官方货币:金色财经报道,一项新研究显示,一个南美国家近 50% 的居民表示他们欢迎采用比特币作为其官方货币。圣保罗金融教育网站 Valor Investe 引用的一项调查对来自巴西、阿根廷、智利、哥伦比亚、哥斯达黎加、萨尔瓦多、委内瑞拉和墨西哥的 2,700 名受访者进行了调查。该研究表明,近一半的巴西人希望他们的国家通过承认比特币为法定货币来加入萨尔瓦多。巴西人是该地区加密识别的最大倡导者,56% 的人支持萨尔瓦多的方法,48% 的人表示他们希望巴西也采用它……另外30% 的人既不同意也不反对,21% 的人反对这个想法( 12% 不同意,9% 强烈不同意)。[2021/9/13 23:20:13]

提高链上使用的链下消息签名的可用性。我们看到越来越多的人采用链下消息签名,因为它节省了gas,减少了区块链上的交易数量。

EIP-712是类型化结构化数据的哈希和签名的标准,而不仅仅是字节字符串。它包括一个

编码函数正确性的理论框架,

万卉:MicroStrategy把华尔街对BTC的共识抬到了一个新高度:Primitive Ventures创始合伙人万卉在微博表示:“MicroStrategy老板Saylor大哥自己有17.7w个BTC 而且是公司买之前买的。大家可以算下他成本。这部分比MS 资产表上自有资金买的比特币数还要多。另外MS买币这件事情为什么牛逼,很多人却可能没有感觉:作为一个有完整董事会治理机制监管披露要求的上市公司,MS在用自己的储备金买大饼之前做的准备工作包括税、审计、储备金政策修改、董事会决策、公开市场的资本运作(譬如因为这个事儿给外部投资人offer了股票回购)这一系列操作把比特币在华尔街的共识完全抬高到了一个新的高度。另外更重要的是,踏平了一条重要的入金大道。最近摩根斯坦利受委托人买入10% MS的股份,就是一个全新玩法的开始。”[2021/1/15 16:16:12]

与solid结构相似并兼容的结构化数据规范,

安全哈希算法用于这些结构的实例,

在可签名消息集中安全包含这些实例,

声音 | 阿里巴巴集团副总裁:未来数据结合区块链等技术可能会创造出一个平台生态:金色财经报道,11月13日,阿里巴巴集团副总裁刘松在“《财经》年会2020:预测与战略”上表示,未来,数据结合5G、人工智能、物联网、区块链技术,可能会创造出一个平台生态,让大家在运营的时候,为城市复杂生命体的演进和生长带来价值。[2019/11/14]

一个可扩展的域分离机制,

新的RPC调用eth_signTypedData,

EVM中哈希算法的优化实现。

EIP-712的实现可以在UniswapV2的Periphery合约中看到,它通过许可移除流动性,最终调用UniswapV2Core中的方法来完成这一操作。

前端的签名被传递给Periphery中的方法,签名被用来代表Core中使用该方法的用户批准Router合约。

示例代码

我们的示例将使用EIP-721提案用数据(地址、storedData的值和截止日期)签署交易,这些数据用于更改合约中变量的值。

俄罗斯银行Sberbank宣布了成立了一个区块链实验室:俄罗斯最大的银行之一Sberbank宣布成立了一个区块链实验室来开发和测试基于区块链的解决方案。新的实验室旨在生成产品原型,进行试点测试,并为Sberbank Group部署基于区块链的业务解决方案。Sberbank首席执行官赫尔曼·格雷夫表示,在俄罗斯开展大规模区块链可能需要长达十年时间。俄罗斯正在对区块链进行“试点”,并补充说,今年银行将会“大规模”推出一些产品。[2018/1/12]

如果签名和散列给出了签署人的地址,并且没有超过截止日期,则更改storedData的值。

这是一个无用的例子,但理解了它将确保您可以在其他地方使用该标准。正确使用EIP-712是创建一个ERC20许可证,就像Uniswap团队所做的那样。

步骤1

继续克隆truffle的reactbox。

我们将根据需要简单地调整和添加代码,以使EIP-712正常工作。

步骤2

数据是EIP-712中最关键的部分。这些要签名的数据必须符合预定义的格式。它必须有一个EIP712Domain和要签名的数据(在我们的示例中设置)。两者的组合将被签名并发送给智能合约进行验证。

在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以查看所反映的变化。

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

地球链

比特币交易所AXI:加密游戏的突破之路

随着AxieInfinity的成功,人们看到了加密游戏的可能性。在上个周期,加密猫游戏成功地将以太坊变得拥堵不堪,但加速了以太坊可扩展方案的探索,也推动了其他不同链的诞生.

[0:15ms0-1:42ms