加密貨幣交易所 加密貨幣交易所
Ctrl+D 加密貨幣交易所
ads
首頁 > SHIB > Info

Solidity 中的 ecrecover 的應用_SOL:SIGN

Author:

Time:1900/1/1 0:00:00

譯文出自:登鏈翻譯計劃

譯者:翻譯小組

校對: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生態數據平臺Step Finance收購NFT數據分析平臺Solana Floor:7月28日消息,Solana生態數據分析平臺Step Finance已收購NFT數據分析平臺Solana Floor,目前暫未披露收購金額。Step Finance聯合創始人George Harrap表示,Step Finance和Solana Floor計劃為Solana上的NFT構建藍籌指數。[2022/7/29 2:44:37]

DontUnderstandMeme

那么,這一切意味著什么呢?假設你熟悉公鑰密碼學的基本概念,這將很容易理解。

你可能知道,每當你向以太坊網絡發送一筆交易時,必須用你的私鑰簽署這筆交易。自然也假設以太坊節點有某種方式來驗證簽名是正確的。

這種驗證簽名的功能也同樣添加到了智能合約上。有了這個功能,你可以驗證更多的東西,而不僅僅是交易簽名本身。事實上,你可以將任何數據傳遞給智能合約,對其進行散列,然后根據數據驗證其簽名。上面的代碼中的簽名是v、r和s的組合。

為什么我需要這個?

實際上,之前也有文章討論了如何使用它的例子。這些例子包括:

MetaTransactions

無需gas代幣和ERC20-Permit還任重而道遠

Ribbon Finance將通過Zeta Markets在Solana上推出金庫:1月27日消息,鏈上結構化產品Ribbon Finance將于2月11日通過Zeta Markets在Solana上推出金庫(Vault)。Zeta Markets是Solana鏈上DeFi衍生品交易平臺。

Ribbon將借助Zeta促進OTC大宗交易,提高項目集中性與透明性。出售期權所賺取的溢價將支付給金庫存款人,到期時以現金結算。[2022/1/27 9:17:52]

從本質上講,你可以驗證一個簽名數據,而這些數據不一定來自交易簽署者。

我應該使用哪個簽名標準?

StandardsMeme

首先,我們需要決定簽名的類型。雖然這對ecrecover來說這并不重要,但對簽名來說,已經有幾個標準可以被客戶端使用以太坊密鑰來簽署數據:

eth_sign

personal_sign

EIP-712

eth_sign是用來簽署任意數據。這使得它是最強大的,最簡單的,但也是最危險的。這里的大問題是,你可以讓用戶簽署一個數據,而這個實際上是交易數據。想象一下,你讓用戶登錄到你的服務,但你讓他們簽署的數據實際上是一個交易,如"發送5個ETH給攻擊者"。交易畢竟只是由字節組成,人們很可能不會檢查他們所簽署的這串字符的實際含義。看似無害的簽名,卻成了竊取資金的攻擊。所以一般不鼓勵直接使用eth_sign。

Solana鏈上DeFi借貸協議Acumen將集成Chainlink喂價:1月4日消息,Solana鏈上DeFi借貸協議Acumen宣布將集成Chainlink喂價,以幫助使用DeFi為全球小額信貸提供動力。[2022/1/4 8:24:29]

personal_sign后來加入來解決這個問題。該方法在任何簽名數據前加上"EthereumSignedMessage:",這意味著如果有人要簽署交易數據,添加的前綴字符串會使其成為無效交易。

對于更復雜的用例,特別是在智能合約中使用時,EIP-712標準被創建。EIP-712標準隨著時間的推移而有所改變,但目前MetaMask支持的最后一個版本是signTypedData_v4。或者你可以使用一個特定的庫,如eip-712。EIP-712解決的主要問題是確保用戶清楚地知道他們在簽署什么,為哪個合約地址和網絡簽署,而且每個簽名最多只能使用一次。簡而言之,這是通過簽署所有需要的配置數據的哈希值實際數據本身來實現的。ERC20-Permit是一個關于如何使用signTypedData_v4的好例子。

所有的函數都可以在與MetaMask交互時使用,見例子。另外,它們也可以使用eth-sig-util。

所以回到問題我應該使用哪種簽名標準?從合約的角度來看,使用最新的EIP-712標準!eth_sign并不安全,personal_sign主要用于實現用戶登錄功能。在你的合同中堅持使用EIP-712。

FTX首席執行官:Solana價格上漲可能是“相當有機的”:金色財經報道,FTX首席執行官Sam Bankman-Fried認為,最近Solana原生代幣價格的上漲可能是“相當有機的”,而不是營銷炒作或夸大其資質的產物。該加密貨幣目前的價格走勢是建立在更堅固的基礎上的。[2021/9/10 23:14:22]

如何實現EIP-712

現在讓我們看看如何在Solidity中實現EIP-712。大概的想法是:

計算一個域的哈希值,該值涵蓋了合約地址和chainId的配置數據

計算結構化的數據哈希值

結合這兩個哈希值,并在ecrecover中使用它。

我個人還建議增加一個nonce和deadline值,以防止重放攻擊并確保在特定時間內執行。這些不是EIP-712標準的直接組成部分,但可以很容易地添加。下面你會發現一個例子,如何實現這些,然后加上合約的本身的參數去執行它:

functionexecuteMyFunctionFromSignature(uint8v,bytes32r,bytes32s,addressowner,uint256myParam,uint256deadline)external{bytes32eip712DomainHash=keccak256(abi

Solana鏈上去中心化交易所Saber鎖倉量突破4億美元:數據顯示,基于Solana的去中心化交易所Saber總鎖倉量(TVL)已突破4億美元。Saber表示,TVL在兩天時間里從2億美元增至3億美元,在一天時間里就從3億美元增至4億美元。

據此前報道,基于Solana的跨鏈穩定幣交易所Saber Labs獲得770萬美元種子輪融資,Race Capital領投,Social Capital、Jump Capital、Multicoin Capital、Solana Foundation、Jason Lau(OKCoin)、Tristan Yver(FTX)、Julien Bouteloup(Curve Finance)、Jeff Kuan(Terraform Labs)以及Ryan Shea(Stacks)等參投。此輪融資將用于招聘、營銷、業務產品開發等三個領域。[2021/8/19 22:24:10]

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:SOLSIGSIGNIGNLNAsolution CoinSigil FinanceSignataDignity Gold

SHIB
BlockFi開始推出Visa支持的比特幣獎勵信用卡_BLOC:blockchain是什么公司

總部位于紐約的加密貸款和儲蓄初創公司BlockFi今天推出了其比特幣獎勵信用卡。該信用卡提供給美國候補名單上的精選客戶.

1900/1/1 0:00:00
HomiEx(紅米交易所)關于“USDT 7日定期(第五十五期)”Staking 產品固定年化收益20%開啟的公告_OMI:OMI

親愛的用戶: 為回饋新老用戶長期的關注與支持,HomiExUSDT固定年化20%挖礦基金,今日開啟7天定期產品認購,保本保息無風險,到期系統自動發放收益本金至HomiEx錢包賬戶.

1900/1/1 0:00:00
繼奇亞Chia后Swarm挖礦也將涼涼?BZZ還能戰嗎?_ARM:swarm幣簡介

Swarm是突然火起來的,但隨著Coinlist公募結束和主網上線,熱度又突然跌了下去。同樣是分布式存儲項目SwarmBzz,與FIL和chia對比,火爆程度更快,涼涼的時間也就更快,目前OKe.

1900/1/1 0:00:00
挖礦難度將下降更多?本周比特幣需要關注的5件事_比特幣:比特幣行情走勢k線圖怎么看

比特幣可能剛剛經歷了有史以來最大的困難暴跌,但隨著礦工們繼續掙扎,估計下一次可能會超過這個跌幅。比特幣周末的穩健上漲以下跌告終后,在熟悉的領域開啟了新的一周.

1900/1/1 0:00:00
市場消息:美國共和黨參議員圖米在提倡減少監管后投資了加密貨幣_NAME:加密貨幣行情追蹤工具

巴比特訊,美國共和黨參議員圖米在提倡減少監管后投資了加密貨幣。",postDate:1625790457,thumbnail:g,__typename:f},extra:{authorInfo:.

1900/1/1 0:00:00
以太坊 2.0 進展更新|Prysm 開發團隊呼吁棄用 Eth2 一詞_ETH:COM

前言 近期,以太坊基金會研究員DannyRyan將他的Eth2系列文章從「eth2quickupdate」更名為「Finalized」,移除了Eth2這個詞.

1900/1/1 0:00:00
ads