Metamask
是否可以使用元遮罩對純文字消息進行簽名?
我已經找到了使用 Metamask 和 ethers 讓使用者簽署任意消息的機制,但它涉及計算消息的雜湊,將其排列,然後呼叫驗證消息。
像這樣的東西:
function signMessage(msg : string) : string { let msgHash= ethers.utils.solidityKeccak256(['string'],[msg]); let sig = await this.mySigner.signMessage(ethers.utils.arrayify(hash)); return sig; }
我要解決的問題是使用者在 Metamask 請求消息簽名時看到的內容,如下所示:
問題是最終使用者會看到雜湊,但無法知道他們被要求籤名的實際消息是什麼。如果我是使用者,我希望能夠閱讀要求我在 Metamask 中籤名的消息。有沒有一種方法可以請求對消息的明文進行簽名,而不是對消息的雜湊進行簽名?我嘗試向 ethers
signer.signMessage
函式提供一個字元串,但它會產生錯誤。
您可以查看此資源,了解如何使用元遮罩對純文字消息進行簽名。它取決於使用
eth.personal_sign(fromAddress, hexEncodedUtf8Message)
.
您正在使用正確的方法來簽署消息。但我不知道您為什麼要嘗試將 python 與 ether.js 一起使用。並且您在簽名時不需要散列消息。
這是範例:
const Message = async (message) => { const signer = ethers.getSigner(); const signature = await signer.signMessage(message); }
上述功能工作正常。由於 singMessage 返回的結果是雜湊,我們需要解決這個承諾。
為了更進一步,您可以使用 ether.js 中的另一種方法驗證簽名。
const Message = async (message) => { const signer = ethers.getSigner(); const signature = await signer.signMessage(message); const verify = ethers.utils.verifyMessage(message, signature) }
如果您將驗證登錄到控制台,您將看到簽名者地址。那是你的乙太坊地址。
告訴我它是否有幫助!