宇宙链 宇宙链
Ctrl+D收藏宇宙链
首页 > USDC > 正文

一个示例来解释EIP-712

作者:

时间:1900/1/1 0:00:00

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

传奇投资者Jim Rogers:最糟糕时刻尚未到来,美元替代品缺位将是一个大问题:7月9日消息,传奇投资者Jim Rogers在一档播客节目中表示,美国经济最糟糕的时刻尚未到来。通货膨胀将会变得更糟。债务问题将变得更加严重,美国将遭受损失。由于美国长期货币超发,最终我们将付出代价。而一旦美国和美元出现问题,没有潜在的美元替代品将是一个大问题。世界也因此将在一段时间内陷入严重的金融危机。[2023/7/9 22:26:50]

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

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

1,022,566枚BNB从未知钱包转移到另一个未知钱包:金色财经报道,Whale Alert监测数据显示,1,022,566枚BNB (价值约296,007,523美元) 从未知钱包转移到另一个未知钱包。[2022/12/9 21:34:03]

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

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

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

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

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

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

新的RPC调用eth_signTypedData,

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

FTX的破产程序开始,交易平台资产开始归集到一个地址:11月12日消息,据链上数据显示,FTX与FTX.US的破产程序已经开始,大量交易平台资产开始归集到同一个链上地址,0x59abf3837fa962d6853b4cc0a19513aa031fd32b。[2022/11/12 12:54:24]

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

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

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

持有超100 BTC的地址数创一个月低点:金色财经消息,Glassnode数据显示,持有超100 BTC的地址数创一个月低点,当前为15,824。[2022/7/25 2:36:48]

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

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

继续克隆 truffle 的react box。

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

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

第一个比特币雕像将在斯洛文尼亚克拉尼揭幕:斯洛文尼亚将成为世界上第一座拥有比特币纪念碑的城市。该纪念碑的启用仪式将于2018年3月13日举行,届时相关政要都会出席。比特币雕像位于Staneta Zagarja街,雕像在环形交叉路口的放置象征着比特币和区块链的分散性,还体现了比特币和区块链技术创造更好连接的能力。[2018/3/12]

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

标签:DOMOMAMAIDomaineverdome币最新价格PolkaDomainMAID币Modulus Domains Service

USDC热门资讯
增长势头超越Axie:异军突起的链游新星CryptoBlades是何来历

在这个加密通证普遍不景气的夏天,区块链游戏成为市场的新宠。最近90天内,Axie Infinity的30日交易额从3668357.98美元飞涨到429653644.8美元,涨幅为117倍(数据来源:dappradar.com).

1900/1/1 0:00:00
金色图览 | 数字艺术很高调 互联网巨头凑热闹

数字艺术很高调,互联网巨头凑热闹,一图让你看懂哪些互联网巨头在参与NFT数字艺术。金色晨讯 | 区块链等行业企业将获补助 韩元交易占比已超越美元排名第二:1.杭州市:区块链等行业企业主导国际标准将获补助 2.全球数字货币交易量创近期新.

1900/1/1 0:00:00
公链大战迎来中场休息?NA(Nirvana) Chain探索出一条社区双治理机制崭露锋芒

区块链的高速发展带动了加密货币投资兴起及爆发,各大公链也开始涉及到整合资源的不同方向,在庞大的商业帝国中可供加密经济发挥的领域实在太多,贸易、支付、电商、通信等都成为肆意改革的风口,并可将更多提供商和服务商集成到一个平台上.

1900/1/1 0:00:00
EIP-1559上线之际被泼一点冷水

?8月5日,以太坊伦敦硬分叉升级完成,EIP-1559 正式上线。以太坊,迎来前所未有的高光时刻,似乎所有人都在讨论和等待反转时刻——以太坊超越比特币。高盛发了报告,说以太坊是最具“实际使用潜力”的区块链,市值有望超越比特币.

1900/1/1 0:00:00
金色百家谈 | 对话LendMi:借贷赛道VFIL如何赋能Filecoin生态?

LendMi 2.0升级,如何赋能Filecoin生态?7月27日14:00,金色财经邀请LendMi官方社区负责人Patrick做客「金色百家谈」直播间,深度解读LendMi 2.0全面升级内容.

1900/1/1 0:00:00
以太坊6周年 回顾这六年以来以太的发展史

以太坊于2015年7月30日推出。2015 年7月30日,以太坊的第一个版本发布。自成立以来的六年时间里,该网络经受住了近乎灾难性的早期攻击,经历了有争议的硬分叉,市值达到了 2700 多亿美元,ETH成为了市值第二大加密货币,仅次于.

1900/1/1 0:00:00