Web3js
恢復鍵入的簽名失敗,因為它太長了
我有一個由 EIP712 V3 生成的類型簽名。它有 132 個字元長。我正在嘗試使用
recoverTypedSignature
from eth-sig-util來恢復它。這失敗說:index.js:1 Error: Invalid signature length
因為它依賴於
ethereumjs-util
’sfromRpcSig
:fromRpcSig = function (sig) { sig = exports.toBuffer(sig); // NOTE: with potential introduction of chainId this might need to be updated if (sig.length !== 65) { throw new Error('Invalid signature length'); }
如何恢復簽名?我是否需要以某種方式將 132 個字元轉換為 65 個字元?
就我而言,答案是我錯誤地呼叫了 API 🤦🏻♂️
recoverTypedSignature({ data: createPayload(message), sig: signature })
是正確的。我不小心用
sign
(注意額外的“n”)呼叫它。
我是否需要以某種方式將 132 個字元轉換為 65 個字元?
不,
sig = exports.toBuffer(sig)
函式中的行fromRpcSig
會為您執行此操作。然而,為了讓它返回一個 65 字節的緩衝區,
toBuffer
需要接收一個 130 個十六進製字元的輸入字元串,因為每個字元(0-9;AF)代表 1/2 字節(4 位)。因此,您的 132 個字元的字元串在這裡輸入錯誤。
現在,有可能(如果不深入檢查,我不能肯定地說)
toBuffer
知道如何處理"0x"
輸入字元串可能以開頭的前綴。因此,首先,您需要做的是:
- 確保您的字元串確實以
"0x"
- 確保剩餘的字元都是十六進制(0-9;AF)