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是一種更高級、更安全的交易簽名方法。使用該標準不僅可以簽署交易并且可以驗證簽名,而且可以將數據與簽名一起傳遞到智能合約中,并且可以根據該數據驗證簽名以了解簽名者是否是實際發送該簽名的人要在交易中調用的數據。
PV01推出一個月期美國國庫券的代幣化鏈上版本:金色財經報道,加密初創公司PV01計劃利用區塊鏈技術們,解決債務資本市場的長期問題。該公司計劃發行的第一款產品,是將一個月期美國國庫債券代幣化。(Coindesk)[2023/4/21 14:19:00]
EIP-712提出了數據的標準結構和從結構化消息生成散列的定義過程。然后使用此散列生成簽名。通過這種方式,為發送交易生成的簽名與為驗證身份或任何其他目的生成的簽名之間就有了明顯的區別。EIP-712草案將簽名方案背后的動機表述為:
提高鏈上使用的鏈下消息簽名的可用性。我們看到越來越多的人采用鏈下消息簽名,因為它節省了gas,減少了區塊鏈上的交易數量。
EIP-712是類型化結構化數據的哈希和簽名的標準,而不僅僅是字節字符串。它包括一個
Ark Invest研究主管:在一個缺乏哈希值的世界里,比特幣芯片的最佳用途是始終運行它:金色財經報道,Ark Invest研究主管Brett Winton在其社交媒體上稱,世界花了十年的時間來解決比特幣挖礦計算供應不足的問題,并為該領域優化了商業模式:最大的利用率以減少攤銷費用,最大的采購規模以排在最新套件的前面,與單一供應商建立緊密聯系。現在在多個代工廠中有多個可靠的供應商;二級供應大量涌入市場;附屬于主要業務目標的小規模擱淺能源實施可以擴展和擴散。在一個缺乏哈希值的世界里,比特幣芯片的最佳用途是始終運行它,接受一個永遠在線的大宗能源,即使能源成本更高。在一個豐富的哈希值的世界里,將以低能源成本或負能源成本,對間歇性和小的過剩能源進行部署。[2022/7/26 2:37:21]
編碼函數正確性的理論框架,
與solid結構相似并兼容的結構化數據規范,
Circle政策負責人:CBDC是一個“荒謬的想法”:6月10日消息,在德克薩斯州奧斯汀舉行的Consensus2022大會上,穩定幣發行商?Circle?Internet Financial 政策負責人?Dante Disparte?表示,CBDC是一個“荒謬的想法”,這個想法類似于美國聯邦航空管理局 (Federal Aviation Administration) 去制造噴氣發動機和飛機,Circle并沒有將其作為一種學術抽象來做,我們是在做真實的事情。但 Willamette 大學法學教授、加密貨幣行業的尖銳批評者?Rohan Grey?反駁道:Circle 是一家免于承擔責任的私營公司,如果它倒閉,納稅人將不得不為他的損失承擔責任。[2022/6/10 4:16:14]
安全哈希算法用于這些結構的實例,
在可簽名消息集中安全包含這些實例,
EthHub聯合創始人:比特幣將是整個以太坊網絡交易量中的一個子集:EthHub聯合創始人Eric Conner剛剛發推表示,以太坊是金融互聯網。比特幣是數字黃金。這意味著比特幣將是整個在以太坊網絡進行交易的交易量中的一個子集。你將需要ETH來進行這些交易。[2020/12/18 15:41:18]
一個可擴展的域分離機制,
新的RPC調用eth_signTypedData,
EVM中哈希算法的優化實現。
EIP-712的實現可以在Uniswap V2的Periphery 合約中看到,它通過許可移除流動性,最終調用Uniswap V2 Core中的方法來完成這一操作。
前端的簽名被傳遞給Periphery 中的方法,簽名被用來代表Core中使用該方法的用戶批準Router合約。
聲音 | ADA創始人:目標是讓ADA成為第一個萬億美元的數字貨幣:7月21日消息,ADA創始人Charles Hoskinson在今天發布到Cardano Reddit論壇上的Emurgo項目宣傳視頻中描述了他對Cardano的最終目標是希望其成為一個“自我供給的經濟體”。他表示,與比特幣不同的是人們不會“ 買入”ADA以用于現金支出,而是將ADA視為一種工具,以便更加公平地參與到私營經濟中。正因為這樣,Charles在同一視頻中聲稱,ADA將成為第一個萬億美元的數字貨幣。[2018/7/22]
我們的示例將使用EIP-721提案用數據(地址、storedData的值和截止日期)簽署交易,這些數據用于更改合約中變量的值。
如果簽名和散列給出了簽署人的地址,并且沒有超過截止日期,則更改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以查看所反映的變化。
實現 閃電網絡的白皮書是一份長而復雜的文件,包含許多技術含量很高的概念;在 2015 年,很少有人有時間和能力讀完并且理解這份文件.
1900/1/1 0:00:00截至2021年第二季度,加密資產市場的額外凈增值為100億美元。這一增長與上一季度的數值一致,但它是 2020 年第四季度數值的兩倍、2020 年第三季度數值的 5 倍以上.
1900/1/1 0:00:00當你想購買更多加密貨幣或者出售時,你會去哪里? 答案可能是 VASP。 當你收到比特幣時,你最終會將它發送到哪里? 可能也是 VASP.
1900/1/1 0:00:00你買過JGP圖片嗎?幾萬美金一張那種。今年6月10日,在蘇富比舉行的 NFT 藝術品展覽及在線拍賣活動中,CryptoPunk #7523以1175.4萬美元成交.
1900/1/1 0:00:008月4日,北京市委辦公廳、北京市人民政府辦公廳印發《北京市關于加快建設全球數字經濟標桿城市的實施方案》(下稱《方案》),《方案》指出,要超前布局區塊鏈.
1900/1/1 0:00:00隨著加密貨幣成為主流以及越來越多的人了解它的實際運作方式,該領域中最大的參與者比特幣和以太坊面臨著越來越多的批評,指責其為了保持區塊鏈運行而實施的挖礦操作對環境的破壞.
1900/1/1 0:00:00