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是一种更高级、更安全的交易签名方法。使用该标准不仅可以签署交易并且可以验证签名,而且可以将数据与签名一起传递到智能合约中,并且可以根据该数据验证签名以了解签名者是否是实际发送该签名的人要在交易中调用的数据。
一个休眠3.5年的比特币地址将1.5万枚BTC转移至“1LGAVQ”开头地址:金色财经报道,Bitinfocharts数据显示,一个休眠3.5年的比特币地址将1.5万枚BTC(价值约2.525亿美元)转移至“1LGAVQ”开头地址 ,现在地址“1LGAVQ”持有 26056枚BTC (4.392 亿美元)。[2023/1/6 10:26:21]
EIP-712提出了数据的标准结构和从结构化消息生成散列的定义过程。然后使用此散列生成签名。通过这种方式,为发送交易生成的签名与为验证身份或任何其他目的生成的签名之间就有了明显的区别。EIP-712草案将签名方案背后的动机表述为:
提高链上使用的链下消息签名的可用性。我们看到越来越多的人采用链下消息签名,因为它节省了gas,减少了区块链上的交易数量。
EIP-712是类型化结构化数据的哈希和签名的标准,而不仅仅是字节字符串。它包括一个
数据:OKEx开放提币后,第一个区块时间范围内流出2,822BTC:CryptoQuant首席执行官Ki Young Ju在推特上表示,根据他们监测的OKEx地址显示,在开放提币后的第一个区块时间范围内,OKEx流出2,822BTC,为区块时间段内流出的最高值。
同时,该公司首席运营官Mason Jang指出,除却流出的BTC,链上数据显示还有493BTC转移到其他交易所。Ki Young Ju进一步表示指出,当前比特币价格出现价格波动的可能原因是:部分“巨鲸”试图离开OKEx,考虑到快速交易等原因,他们可能会将 BTC 兑换为其他数字货币(例如XRP)。据此前报道,OKEx发布公告称,于2020年11月26日16:00开放提币。[2020/11/26 22:14:25]
编码函数正确性的理论框架,
与solid结构相似并兼容的结构化数据规范,
比特小鹿挖出比特币减半后的第一个区块奖励:北京时间5月12日3点23分43秒,比特币区块链网络630000高度区块被挖出,比特币区块奖励由12.5枚比特币降为6.25枚比特币。据悉,减半后第一个区块奖励是由比特小鹿(BitDeer)接入AntPool的矿机算力挖出。比特小鹿(BitDeer)的云挖矿服务矿机量达数十万台。[2020/5/12]
安全哈希算法用于这些结构的实例,
在可签名消息集中安全包含这些实例,
一个可扩展的域分离机制,
新的RPC调用eth_signTypedData,
EVM中哈希算法的优化实现。
EIP-712的实现可以在Uniswap V2的Periphery 合约中看到,它通过许可移除流动性,最终调用Uniswap V2 Core中的方法来完成这一操作。
声音 | 孙宇晨:百万只是个数字,愿与罗永浩谈出一个满意合作方案:孙宇晨刚在微博表示,昨日看到罗永浩老师的文章很感动,转发力挺,表明自己的态度。一方面表达对于创业者敬意,一方面让供应商拿到款项,实现双赢。至于百万只是个数字,千万追加也是个态度,具体只要罗老师愿意,我们可以谈出一个满意的合作方案!最终弘扬永不言败的创业精神!孙宇晨此前针对“罗永浩被上法院的限制消费令名单,即所谓的“老赖”名单”一事在微博中表示,愿意先出一百万人民币一年聘请罗永浩老师担任创业精神代言人,如果效果拔群,后续愿意持续追加一千万投入。[2019/11/4]
前端的签名被传递给Periphery 中的方法,签名被用来代表Core中使用该方法的用户批准Router合约。
我们的示例将使用EIP-721提案用数据(地址、storedData的值和截止日期)签署交易,这些数据用于更改合约中变量的值。
动态 | 谷歌算法显示比特币是一个“崩塌的经济泡沫”:据bitcoinexchangeguide报道,金融巨头们表示,当用户搜索比特币这个词时,谷歌的人工智能似乎认为比特币是一个“崩溃的经济泡沫”。因为当个人在谷歌中搜索比特币这个词时,首先出现的就是这个词。然而,结果现在已经改变,显示相同的答案,但没有上述短语。[2018/12/15]
如果签名和散列给出了签署人的地址,并且没有超过截止日期,则更改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以查看所反映的变化。
标签:比特币BTCOMADomain比特币中国官网登录入口wbtc币发行价Axioma TokenTrust Domains
中国人民银行日前召开2021年下半年工作会议,在谈到深化重点领域金融改革时,会议提出稳妥推进数字人民币研发试点。此前,中国人民银行数字人民币研发工作组发布中国数字人民币的研发进展白皮书.
1900/1/1 0:00:00在最近的EthCC 2021大会上,Protocol Labs创始人Juan Benet进行了演讲,阐述了为什么Filecoin和以太坊的结合,能够引领我们走向实现Web3的道路.
1900/1/1 0:00:007月30日,以“云网汇政务,数智蕴未来”为主题的智慧政务峰会2021在南宁举行,与会人员共话数字政府建设新趋势,分享智慧政务创新实践,擘画数字政府建设新篇章,以数字政府建设赋能政府治理现代化.
1900/1/1 0:00:00以太坊区块链的下一次重大升级,即伦敦硬分叉升级,可能会在区块高度12,965,000实施,预计时间为下个月四号,也就是8月4日.
1900/1/1 0:00:00Twitter创始人Jack Dorsey领导的数字支付平台Square Inc.同意以290亿美元收购澳大利亚公司Afterpay Ltd.
1900/1/1 0:00:008月3日,新华社发表评论文章《新华社:“精神鸦片”竟长成数千亿产业》,直指未成年人沉迷网络游戏,将对健康成长造成不可低估的影响.
1900/1/1 0:00:00