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是一種更高級、更安全的交易簽名方法。使用該標準不僅可以簽署交易并且可以驗證簽名,而且可以將數據與簽名一起傳遞到智能合約中,并且可以根據該數據驗證簽名以了解簽名者是否是實際發送該簽名的人要在交易中調用的數據。
觀點:研究表明中本聰是一個人而非一個團隊的假設更加可信:研究表明,中本聰是一個人而不是一個團隊的假設更有說服力。Patoshi挖礦模式研究者Sergio Demain Lerner的最新研究表明,中本聰逐漸降低了隨機數(Nonce)的價值。重新挖掘揭示了Patoshi挖掘算法在掃描內部隨機數時,傾向于選擇較高的隨機數。這種趨勢表明隨機數正在減少,這與Satochi客戶端0.1版本相反。也就是說,當一起分析兩個子范圍時,隨機數失衡減少,這表明Patoshi是在并行掃描5個子范圍,但每個子范圍都是內部順序掃描。這與Patoshi部署第一個由50臺獨立計算機組成礦場的理論相矛盾,并支持了Patoshi只是在高端CPU上執行多線程的理論。如果Lerner理論正確,將使中本聰是一個人而不是一個團隊的假設更加可信。同時這也是對澳本聰(Craig Wright)的一次有力打擊,因為他曾多次表示,他使用數十臺計算機來挖掘早期區塊。(Cointelegraph)[2020/8/23]
EIP-712提出了數據的標準結構和從結構化消息生成散列的定義過程。然后使用此散列生成簽名。通過這種方式,為發送交易生成的簽名與為驗證身份或任何其他目的生成的簽名之間就有了明顯的區別。EIP-712草案將簽名方案背后的動機表述為:
聲音 | 周小川:全球性數字貨幣需要一個類似全球央行的機構:近日,在重慶舉行的博鰲亞洲論壇第二屆“亞歐合作對話”中,博鰲亞洲論壇副理事長、中國人民銀行原行長周小川表示,針對數字經濟稅、數字貨幣和電子支付等新情況,需要全球合作以及金融界的積極響應。關于最近各方熱議的數字化的全球貨幣,他認為目前全球確實面臨機會推進類似eSDR(電子特別提款權)和SHC(合成霸權貨幣)這樣的全球性數字貨幣,但這需要一個類似全球央行的機構。(第一財經)[2019/12/5]
提高鏈上使用的鏈下消息簽名的可用性。我們看到越來越多的人采用鏈下消息簽名,因為它節省了gas,減少了區塊鏈上的交易數量。
EIP-712是類型化結構化數據的哈希和簽名的標準,而不僅僅是字節字符串。它包括一個
編碼函數正確性的理論框架,
與solid結構相似并兼容的結構化數據規范,
聲音 | 李光斗:區塊鏈能讓每個人成為一個??商業節點:12月2日消息,中國著名品牌戰略專家李光斗接受記者專訪時表示區塊鏈技術的應用會讓各行各業的形態發生改變。李光斗更預測,區塊鏈去中心化的特征,甚至會讓商業社會重塑。“??區塊鏈時代來臨之后,每個人都成為一個商業節點,??可能以后不需要辦公司了,??辦公司就是為了要工商審核,有牌照才能做買賣。現在互聯網時代??不需要牌照也可以做買賣,這叫微商,而區塊鏈時代就變成每一個人都能成為一個??商業中心,所以說區塊鏈可以賦權賦能。”(紅星新聞)[2019/12/2]
安全哈希算法用于這些結構的實例,
在可簽名消息集中安全包含這些實例,
一個可擴展的域分離機制,
新的RPC調用eth_signTypedData,
EVM中哈希算法的優化實現。
聽證會 | 扎克伯格:Libra是一個全球支付系統:金色財經直播報道,在今日聽證會上,議員Perlmutter提問稱,請問Libra是否被視為貨幣?扎克伯格表示,Libra是一個全球支付系統。議員Perlmutter繼續提問,那么Libra將用戶的數字貨幣存儲在Calibra錢包中對吧?就像我把我的錢存在某某銀行中一樣?扎克伯格回應稱,您可以這樣認為。議員Perlmutter繼續追問,那么這就是問題所在,這也是當前很多監管者主要關心的問題,更別提這是一個跨國的全球化項目,Calibra注冊在瑞士,而我身在美國,這背后牽扯到的一系列資產安全和管理問題是非常復雜的,我認為你們都不確定你們究竟做得是怎樣一個東西。[2019/10/24]
EIP-712的實現可以在UniswapV2的Periphery合約中看到,它通過許可移除流動性,最終調用UniswapV2Core中的方法來完成這一操作。
和菜頭:在一個新場子什么韭菜都沒有,那你就是那根韭菜:昨晚和菜頭公眾號發文稱,春節前后,朋友圈平均每天都能看到2~3條關于比特幣或者區塊鏈的內容。現在,這個數量還在持續增長,而且開始向群里蔓延。關于“韭菜”和菜頭文中提及:我去買了本阿爾文德的《區塊鏈:技術驅動金融》來自學。看了三分之一之后,我非常確定一件事情:在這一輪由比特幣而起的區塊鏈熱潮里,我就是根“韭菜”。在一個新興的場子里,如何確定自己的地位?去找周圍有什么韭菜沒有。如果一根韭菜都找不到,那么,你自己就是那根韭菜。[2018/3/1]
前端的簽名被傳遞給Periphery中的方法,簽名被用來代表Core中使用該方法的用戶批準Router合約。
示例代碼
我們的示例將使用EIP-721提案用數據(地址、storedData的值和截止日期)簽署交易,這些數據用于更改合約中變量的值。
如果簽名和散列給出了簽署人的地址,并且沒有超過截止日期,則更改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以查看所反映的變化。
Tags:區塊鏈MAINAINMAI區塊鏈最新應用Unstoppable DomainsTools ChainMAIN價格
金色財經區塊鏈8月6日訊??現階段,去中心化金融?(DeFi)行業發展速度很快,自今年年初以來,鎖定在DeFi中的加密資產規模已增長了大約四倍.
1900/1/1 0:00:00原標題:EIP-1559:WhatHappensNextforEthereum以太坊的倫敦硬分叉將于本周到來,與之一同到來的是EIP-1559以太坊改進提案.
1900/1/1 0:00:00CryptoQuant是加密世界中使用最多的數據網站之一,他們的CEOKiYoungJu如何從數據看目前的走勢與行業的未來.
1900/1/1 0:00:00自我們成立以來,Circle一直受到這樣一種想法的啟發:一個新的全球經濟體系可以建立在互聯網原生基礎上——開放、全球和可互操作的公共互聯網基礎設施,用于價值的存儲和傳輸.
1900/1/1 0:00:00金色財經報道,魚池創始人神魚在微博中表示,前天19:30起,到今52個小時,在多方的共同努力與溝通下,推動PolyNetwork安全事件的進展.
1900/1/1 0:00:00原文標題:《OntheDesignofMEVMarketplaces》建立一個有效和民主化的MEV市場對以太坊甚至整個加密貨幣生態至關重要,作為以太坊的社區成員和Flashbots的支持者.
1900/1/1 0:00:00