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是一種更高級、更安全的交易簽名方法。使用該標準不僅可以簽署交易并且可以驗證簽名,而且可以將數據與簽名一起傳遞到智能合約中,并且可以根據該數據驗證簽名以了解簽名者是否是實際發送該簽名的人要在交易中調用的數據。
流入交易所的ETH數量創近一個月新低:金色財經報道,Glassnode數據顯示,流入交易所的ETH數量在過去的一小時(7日均值)為7,655.9枚,創近一個月新低。[2022/12/27 22:09:21]
EIP-712提出了數據的標準結構和從結構化消息生成散列的定義過程。然后使用此散列生成簽名。通過這種方式,為發送交易生成的簽名與為驗證身份或任何其他目的生成的簽名之間就有了明顯的區別。EIP-712草案將簽名方案背后的動機表述為:
提高鏈上使用的鏈下消息簽名的可用性。我們看到越來越多的人采用鏈下消息簽名,因為它節省了gas,減少了區塊鏈上的交易數量。
EIP-712是類型化結構化數據的哈希和簽名的標準,而不僅僅是字節字符串。它包括一個
編碼函數正確性的理論框架,
CoinGecko聯合創始人:下一個比特幣大買家或將是推特公司:2月10日消息,對于誰是下一個比特幣大買家,CoinGecko聯合創始人Bobby Ong表示:“我認為下一個值得關注的公司將是Twitter。其首席執行官Jack Dorsey是比特幣的知名擁護者。接下來,我預計Facebook、Alphabet和亞馬遜等大型科技公司也會投資比特幣。”根據Ong的說法,隨著主要機構的持倉量增加,普通公眾將開始對比特幣有更多的信心,這可能為新一輪的散戶投資鋪平道路。(AMBcrypto)[2021/2/10 19:22:46]
與solid結構相似并兼容的結構化數據規范,
安全哈希算法用于這些結構的實例,
在可簽名消息集中安全包含這些實例,
一個可擴展的域分離機制,
觀點:DeFi最終會成為一個吸收所有閑置資產的流動性黑洞:盡管DeFi多年來一直受到黑客攻擊,但創新者和投資者對這個加密子行業的信心仍在繼續增長。一位關注以太坊的著名投資者Arthur最近在推特上表示:“我在DeFi空間花費的時間越多,我就越認為DeFi最終會成為一個流動性黑洞,它將吸收所有閑置資產。如果你不想承擔持有BTC和ETH的市場風險,有很多方法可以實現市場中性收益。”(CryptoSlate)[2020/6/2]
新的RPC調用eth_signTypedData,
EVM中哈希算法的優化實現。
EIP-712的實現可以在Uniswap V2的Periphery 合約中看到,它通過許可移除流動性,最終調用Uniswap V2 Core中的方法來完成這一操作。
前端的簽名被傳遞給Periphery 中的方法,簽名被用來代表Core中使用該方法的用戶批準Router合約。
聲音 | PoS之父Sunny King:我們需要的不僅僅是貨幣 而是一個支持各種區塊鏈應用的經濟體系:PoS之父Sunny King于今日在與CMC創始人Brandon Chez對話中提到,其支持加密貨幣與比特幣進行整合的趨勢。他表示:“我們需要的不僅僅是貨幣,而是需要一個能夠支持各種區塊鏈應用的經濟體系,這也是我現在主導V SYSTEMS區塊鏈的初衷。基礎貨幣對于經濟的健康繁榮確實至關重要,但也僅是這個經濟體系中很小的一部分。比特幣是最早出現的加密貨幣,在技術的世界,比特幣的主導地位將不斷受到挑戰。比特幣的設計中存在風險因素,可能會在未來十到二十年內顯現,屆時比特幣的新的增量已經非常小了。因此作為基礎加密貨幣,比特幣可能無法長期占據主導地位,對于成千上萬的其他加密貨幣,大家要對它們寄予希望。”[2019/11/12]
我們的示例將使用EIP-721提案用數據(地址、storedData的值和截止日期)簽署交易,這些數據用于更改合約中變量的值。
加密貨幣已經成為一個文化符號:據Bitcoin消息,在過去一年半的時間里,比特幣和加密貨幣頻頻成為熱門話題,并在一定程度上侵入了主流文化。人們更常聽到關于加密貨幣其中一個原因,便是因為加密貨幣已經成為一個神奇的文化符號。印有加密貨幣的服裝、針織毛衣、襪子、咖啡杯,及背包等已經變得相當廣泛。[2018/6/24]
如果簽名和散列給出了簽署人的地址,并且沒有超過截止日期,則更改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以查看所反映的變化。
金色財經 區塊鏈8月8日訊? ?八月初,美國證券交易所委員會主席Gary Gensler在Aspen Security Forum論壇上針對數字貨幣行業(包含交易所)監管發表了看法.
1900/1/1 0:00:00據英國《每日電訊報》網站7月22日報道,比特幣挖礦被稱為數字世界的淘金熱,是虛擬世界的克朗代克(該地位于加拿大西北部,以19世紀末的淘金熱聞名——本網注),能讓參與者一夜暴富.
1900/1/1 0:00:00提及涉及比特幣等數字資產的理財,就不得不提量化交易。如果你是數字資產的持有者、愛好者,那你也一定聽過或參加過有量化交易宣傳的一些活動.
1900/1/1 0:00:00在一年內,美國BTC ATM機數量幾乎翻了一番,這表明尋求便利的散戶投資者需求在不斷增長。隨著BTC的普及,在美國BTC ATM機遍地開花.
1900/1/1 0:00:00金色周刊是金色財經推出的一檔每周區塊鏈行業總結欄目,內容涵蓋一周重點新聞、礦業信息、項目動態、技術進展等行業動態。本文是其中的新聞周刊,帶您一覽本周區塊鏈行業大事.
1900/1/1 0:00:00Kusama 最初作為 Polkadot 的測試網上線,不過在 Polkadot 上線后仍被保留作為先行網使用,一些需要部署在 Polkadot 上的功能會率先上線 Kusama.
1900/1/1 0:00:00