譯文出自:登鏈翻譯計劃
譯者:翻譯小組
校對:Tiny熊
有沒有想過Solidity中的ecrecover命令到底是怎么回事?
這都是關于簽名和密鑰的...
PublicKeyXKCD
什么是ecrecover?
你可能在Solidity合約中看到過ecrecover,并想知道這到底是什么。那么你遇到了EVM預編譯ecrecover。預編譯是一些提前被編譯的智能合約的通用函數,所以Ethereum節點可以有效地運行這個函數。從合約的角度來看,這只是一個像操作碼一樣的單一命令。
看看下面的代碼:
functionrecoverSignerFromSignature(uint8v,bytes32r,bytes32s,bytes32hash)external{addresssigner=ecrecover(hash,v,r,s);require(signer!=address(0),"ECDSA:invalidsignature");}
基本上,大家就是這樣使用它,盡管還有更多的內容。不要在生產中實際使用上述代碼,PatricioPalladino正確地指出了這一點。正確的方法是在本文底部的最后一個例子中。
Solana聯創:FTX的SOL代幣應該分發給客戶:金色財經報道,Solana聯合創始人Anatoly Yakovenko表示,FTX的SOL代幣應該分發給客戶,我的愿望是將SOL直接分發給所有FTX客戶,對每個人來說,這可能是最不糟糕的結果。將SOL分發給500萬用戶將使網絡長期受益,并且如果用戶能夠控制資產并在荷蘭式拍賣中出售其份額,可能會產生最好的結果。Yakovenko將該計劃描述為“雙贏” 。
據悉,鏈上數據顯示,區塊鏈瀏覽器Solscan標記的FTX冷錢包昨天開始轉移其SOL,多個冷存儲FTX錢包總共持有近700萬個SOL,按今天的價格計算價值約為1.34億美元。[2023/9/2 13:13:04]
DontUnderstandMeme
那么,這一切意味著什么呢?假設你熟悉公鑰密碼學的基本概念,這將很容易理解。
你可能知道,每當你向以太坊網絡發送一筆交易時,必須用你的私鑰簽署這筆交易。自然也假設以太坊節點有某種方式來驗證簽名是正確的。
這種驗證簽名的功能也同樣添加到了智能合約上。有了這個功能,你可以驗證更多的東西,而不僅僅是交易簽名本身。事實上,你可以將任何數據傳遞給智能合約,對其進行散列,然后根據數據驗證其簽名。上面的代碼中的簽名是v、r和s的組合。
為什么我需要這個?
Solana鏈上NFT市場Solanart交易總額突破5億美元 創歷史新高:金色財經報道,據最新數據顯示,Solana鏈上NFT市場Solanart交易總額已突破5億美元,創歷史新高,本文撰寫時為5.0257億美元,交易者總量為128.493。Solanart 平臺與 Opensea 有所不同,該平臺上的NFT 藏品都經過仔細篩選,但正是因為如此,導致平臺上可供選擇的 NFT 數量相對較少。此外,如果用戶想要在 Solanart 平臺上購買 NFT,必須下載支持 Solana 區塊鏈的錢包。[2021/10/31 6:22:30]
實際上,之前也有文章討論了如何使用它的例子。這些例子包括:
MetaTransactions
無需gas代幣和ERC20-Permit還任重而道遠
從本質上講,你可以驗證一個簽名數據,而這些數據不一定來自交易簽署者。
我應該使用哪個簽名標準?
StandardsMeme
首先,我們需要決定簽名的類型。雖然這對ecrecover來說這并不重要,但對簽名來說,已經有幾個標準可以被客戶端使用以太坊密鑰來簽署數據:
eth_sign
personal_sign
EIP-712
EDM藝術家Deadmau5將在Solana區塊鏈上推出NFT:金色財經報道,加拿大EDM藝術家Deadmau5正在利用新的原宇宙工作室Looks Rare在Solana區塊鏈上推出NFT。該NFT系列將于11月4日在科羅拉多州紅巖音樂節上由抽象藝術家Gregory Siff制作。Looks Rare將現場將這些作品轉換為NFT,讓粉絲們同時帶走實體藝術和數字收藏品。[2021/11/3 21:19:52]
eth_sign是用來簽署任意數據。這使得它是最強大的,最簡單的,但也是最危險的。這里的大問題是,你可以讓用戶簽署一個數據,而這個實際上是交易數據。想象一下,你讓用戶登錄到你的服務,但你讓他們簽署的數據實際上是一個交易,如"發送5個ETH給攻擊者"。交易畢竟只是由字節組成,人們很可能不會檢查他們所簽署的這串字符的實際含義。看似無害的簽名,卻成了竊取資金的攻擊。所以一般不鼓勵直接使用eth_sign。
personal_sign后來加入來解決這個問題。該方法在任何簽名數據前加上"EthereumSignedMessage:",這意味著如果有人要簽署交易數據,添加的前綴字符串會使其成為無效交易。
對于更復雜的用例,特別是在智能合約中使用時,EIP-712標準被創建。EIP-712標準隨著時間的推移而有所改變,但目前MetaMask支持的最后一個版本是signTypedData_v4。或者你可以使用一個特定的庫,如eip-712。EIP-712解決的主要問題是確保用戶清楚地知道他們在簽署什么,為哪個合約地址和網絡簽署,而且每個簽名最多只能使用一次。簡而言之,這是通過簽署所有需要的配置數據的哈希值實際數據本身來實現的。ERC20-Permit是一個關于如何使用signTypedData_v4的好例子。
Solana確認總流通量近2000萬 向做市商借出的1136萬SOL代幣不鎖定:金色財經報道,針對持幣人對公鏈項目Solana流通量的質疑,Solana團隊發布公告,確認Solana基金會已經向做市商借出1136萬枚代幣,向做市商借出的這些代幣“不鎖定”。Solana團隊還表示,過去談及該項目流通量時,未包括這1136萬枚代幣,但是未來提供流通量數據時,將會把這1136萬枚借給做市商的代幣包括在內。
此前Solana團隊公示Solana代幣總流通量約為826萬(包括Coinlist拍賣的800萬枚代幣和空投的26萬枚代幣),加上1136萬枚借給做市商的代幣之后,Solana目前準確的流通量應該在1962萬枚左右。[2020/4/28]
所有的函數都可以在與MetaMask交互時使用,見例子。另外,它們也可以使用eth-sig-util。
所以回到問題我應該使用哪種簽名標準?從合約的角度來看,使用最新的EIP-712標準!eth_sign并不安全,personal_sign主要用于實現用戶登錄功能。在你的合同中堅持使用EIP-712。
如何實現EIP-712
現在讓我們看看如何在Solidity中實現EIP-712。大概的想法是:
計算一個域的哈希值,該值涵蓋了合約地址和chainId的配置數據
動態 | 區塊鏈公司Solana獲得1800萬美元投資 Multicoin Capital領投:據Cointelegraph消息,區塊鏈公司Solana獲得1800萬美元資金,本輪融資由Multicoin Capital牽頭,參與投資的公司包括Distributed Global、Blocktower Capital、Foundation Capital和Blockchange VC等。據稱,最新一輪融資使Solana價值達到2000萬美元。據悉,Solana是一個能夠承載計算帶寬類似于現代互聯網的應用程序的解決方案,其網絡每秒可以支持50,000個事務。[2019/7/30]
計算結構化的數據哈希值
結合這兩個哈希值,并在ecrecover中使用它。
我個人還建議增加一個nonce和deadline值,以防止重放攻擊并確保在特定時間內執行。這些不是EIP-712標準的直接組成部分,但可以很容易地添加。下面你會發現一個例子,如何實現這些,然后加上合約的本身的參數去執行它:
functionexecuteMyFunctionFromSignature(uint8v,bytes32r,bytes32s,addressowner,uint256myParam,uint256deadline)external{bytes32eip712DomainHash=keccak256(abi
ecrecover的安全問題解決方案
ecrecover有幾個問題,在上面的代碼中沒有說明,但你應該注意:
在某些情況下,ecrecover可以返回一個隨機地址,而不是無效簽名的0。這一點可以通過結構化數據中加入所有者地址來防止。
簽名是可塑的,這意味著你可能會為同一數據創建第二個同樣有效的簽名。在我們的案例中,我們沒有使用簽名數據本身。
如果哈希值不是在合約本身中計算的,攻擊者可以構建一個看起來有效的哈希值和簽名。
在實踐中,我再次建議使用Openzeppelin合約。他們的ECDSA實現解決了所有這三個問題,而且他們還有一個EIP-712實現。這不僅更容易使用,而且他們還做了進一步的改進:
eip712DomainHash的緩存機制,所以只有在chainId改變時才會計算
如上所述,對簽名的額外安全檢查
能夠以字符串形式發送簽名
上面的代碼將被簡化為:
import"
這就是目前最新的EIP-721的第四版標準。如果你在其他合約中遇到EIP-712的實現,要注意使用的是哪個版本。
另外,最后也說明一下,調試無效的簽名是非常痛苦的,因為任何數值的微小差異都會導致無效的簽名,但你不知道哪些數據可能是錯誤的。因此,如果你遇到無效簽名,一定要仔細檢查你的所有輸入。
另一個有趣的標準是EIP-1271。由于以太坊的智能合約背后沒有私鑰,所以它們不能創建那些v、r、s簽名。但有了這個標準,仍然可以讓合約本身創建簽名,見我之前的文章的底部。
來源:WhatisecrecoverinSolidity?
參考資料
登鏈翻譯計劃:https://github.com/lbc-team/Pioneer
翻譯小組:https://learnblockchain.cn/people/412
Tiny熊:https://learnblockchain.cn/people/15
EVM預編譯:https://ethervm.io/#3F
ecrecover:https://docs.klaytn.com/smart-contract/precompiled-contracts#address-0x-01-ecrecover-hash-v-r-s
PatricioPalladino:https://twitter.com/alcuadrado
公鑰密碼學:https://en.wikipedia.org/wiki/Public-key_cryptography
MetaTransactions:https://soliditydeveloper.com/meta-transactions
無需gas代幣和ERC20-Permit還任重而道遠:https://learnblockchain.cn/article/1790
eip-712:https://github.com/Mrtenz/eip-712
ERC20-Permit:https://learnblockchain.cn/article/1790
例子:https://github.com/danfinlay/js-eth-personal-sign-examples
eth-sig-util:https://github.com/MetaMask/eth-sig-util
可塑的:http://coders-errand.com/malleability-ecdsa-signatures/
EIP-1271:https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1271.md
之前的文章:https://soliditydeveloper.com/meta-transactions
WhatisecrecoverinSolidity?:https://soliditydeveloper.com/ecrecover
免責聲明:作為區塊鏈信息平臺,本站所發布文章僅代表作者個人觀點,與鏈聞ChainNews立場無關。文章內的信息、意見等均僅供參考,并非作為或被視為實際投資建議。
本文來源于非小號媒體平臺:
登鏈社區
現已在非小號資訊平臺發布105篇作品,
非小號開放平臺歡迎幣圈作者入駐
入駐指南:
/apply_guide/
本文網址:
/news/10138004.html
免責聲明:
1.資訊內容不構成投資建議,投資者應獨立決策并自行承擔風險
2.本文版權歸屬原作所有,僅代表作者本人觀點,不代表非小號的觀點或立場
上一篇:
巨鯨的資金涌向哪里,哪里就是熱點!
Tags:SOLSOLALANAOLAGlobal Innovative Solutionssolana幣solana幣的最新價格polar幣多少錢一個
尊敬的ZT用戶:ZT創新板即將上線SCBULL,SCBEAR,并開啟SCBULL/USDT,SCBEAR/USDT交易對.
1900/1/1 0:00:00尊敬的用戶: AOFEX?交易所每月使用手續費盈利的20%,從二級市場中回購OT并銷毀。現將OT第12期回購銷毀明細公示如下:回購銷毀第八期執行時間為:2021年6月30日17:30回購銷毀數量.
1900/1/1 0:00:00本文由中幣研究院原創編輯,下載全球領先的數字貨幣交易所中幣APP:www.zb.land 熱點摘要: 1.世界著名連鎖酒店Pavilions宣布接受比特幣支付;2.550億美元規模的對沖基金Ma.
1900/1/1 0:00:00隨著數字貨幣的整體回調,此前大熱的NFT熱度弈有所下降,表現最直接的就是成交數據的下滑。其中,一度破圈的NFT游戲—NBATopShot的單日銷售額,已從今年2月22日4.57千萬美元,一路下跌.
1900/1/1 0:00:00季夏7月,Gate.io直播間依舊精彩紛呈。和日漸炎熱的天氣相映襯的是平臺主播不減的熱情。正是由于你們的付出,Gate.io直播間吸引了越來越多的用戶與關注,也變得愈加豐富多彩.
1900/1/1 0:00:00親愛的BitMart用戶:BitMart將于2021年7月12日首發上線代幣SnoopCoin(SNOOP)。屆時將開通SNOOP/USDT交易對.
1900/1/1 0:00:00